2009-04-30 3 views
38

एक प्रकार को स्थिर माना जाता है यदि यह समान कुंजी वाले तत्वों के सापेक्ष क्रम को बनाए रखता है। मुझे लगता है कि मेरा सवाल वास्तव में है, इस सापेक्ष आदेश को बनाए रखने का क्या फायदा है? क्या कोई उदाहरण दे सकता है? धन्यवाद।एक प्रकार के एल्गोरिदम स्थिर होने के लिए क्या लाभ है?

उत्तर

13

नहीं सभी छंटाई पूरे मूल्य पर आधारित है। लोगों की एक सूची पर विचार करें। मैं केवल उनकी सभी जानकारी के बजाय उन्हें अपने नाम से सॉर्ट करना चाहता हूं। एक स्थिर सॉर्टिंग एल्गोरिदम के साथ, मुझे पता है कि अगर मेरे पास "जॉन स्मिथ" नामक दो लोग हैं, तो उनके रिश्तेदार आदेश को संरक्षित किया जा रहा है।

Last  First  Phone 
----------------------------- 
Wilson Peter  555-1212 
Smith John  123-4567 
Smith John  012-3456 
Adams Gabriel  533-5574 

के बाद से दो "जॉन स्मिथ" s पहले से ही "हल कर रहे हैं", मैं उन्हें पदों को बदलना चाहते हैं नहीं होगा (वे आदेश मैं उन्हें चाहते हैं कर रहे हैं)। अगर मैं पिछले द्वारा इन वस्तुओं को सॉर्ट, तो पहले एक अस्थिर छंटाई एल्गोरिथ्म के साथ, मैं अंत सकता है या तो इस के साथ:

Last  First  Phone 
----------------------------- 
Adams Gabriel  533-5574 
Smith John  123-4567 
Smith John  012-3456 
Wilson Peter  555-1212 

है कौन सा मैं क्या चाहते हैं, या मैं इस लग सकती है:

Last  First  Phone 
----------------------------- 
Adams Gabriel  533-5574 
Smith John  012-3456 
Smith John  123-4567 
Wilson Peter  555-1212 

(आप दो "जॉन स्मिथ" ने स्थान बदल दिए हैं)। यह वह नहीं है जिसकी मुझे चाहत है।

अगर मैं एक स्थिर छँटाई कलन विधि का इस्तेमाल किया, मैं पहला विकल्प है, जो कि मैं क्या कर रहा हूँ के बाद की गारंटी दी जाएगी।

+0

ऊपर की ओर; किसी और ने उल्लेख नहीं किया, "रिश्तेदार" आदेश का संरक्षण। – techtrainer

15

प्राथमिकता कतार इसका एक उदाहरण है।

  1. (1, "बॉब")
  2. (3, "बिल")
  3. (1, "जेन")

आप इस छोटी से सॉर्ट हैं: यदि आप इस राशि कहो सबसे बड़ी संख्या में, एक अस्थिर प्रकार यह कर सकता है।

  1. (1, "जेन")
  2. (1, "बॉब")
  3. (3, "बिल")

... लेकिन फिर "जेन" से आगे हो गया "बॉब" हालांकि यह चारों ओर एक और तरीका माना जाता था।

आम तौर पर, वे एक से अधिक चरणों में कई प्रविष्टियाँ छँटाई के लिए उपयोगी होते हैं।

38

एक सॉर्टिंग एल्गोरिदम स्थिर है यदि यह डुप्लिकेट कुंजी के क्रम को सुरक्षित रखता है।

ठीक है, ठीक है, लेकिन क्यों यह महत्वपूर्ण होना चाहिए? खैर, एक सॉर्टिंग एल्गोरिदम में "स्थिरता" का सवाल उठता है जब हम अलग-अलग कुंजी के अनुसार एक ही डेटा को एक से अधिक सॉर्ट करना चाहते हैं।

कभी-कभी डेटा आइटम्स में कई कुंजी होती हैं। उदाहरण के लिए, शायद एक (अनूठी) प्राथमिक कुंजी जैसे सामाजिक बीमा संख्या, या छात्र पहचान संख्या, और एक या अधिक माध्यमिक कुंजी, जैसे कि निवास शहर, या प्रयोगशाला अनुभाग। और हम इस तरह के डेटा को चाबियों में से एक से अधिक क्रमबद्ध करना चाहते हैं। समस्या यह है कि, यदि हम एक ही कुंजी को एक कुंजी के अनुसार क्रमबद्ध करते हैं, और फिर दूसरी कुंजी के अनुसार, दूसरी कुंजी पहले प्रकार से प्राप्त ऑर्डरिंग को नष्ट कर सकती है। लेकिन ऐसा नहीं होगा यदि हमारा दूसरा प्रकार एक स्थिर प्रकार है।

Stable Sorting Algorithms

+1

मैंने डाउनवोट नहीं किया था, लेकिन आपने जो कुछ किया वह वेबसाइट से डेटा कॉपी किया गया था। अन्य वास्तव में इस मुद्दे को समझाने के लिए परेशानी में गए, इसलिए शायद यही कारण है। मेरे लिए एक लायक नहीं लगता है, लेकिन अन्य ऐसा सोच सकते हैं। –

+0

कि, आईएमओ, पहिया को पुनर्निर्मित नहीं कर रहा है और उचित विशेषता के साथ उद्धरण भी नहीं दे रहा है। YMMV। – dirkgently

+3

उपरोक्त; एक संक्षिप्त उद्धरण और प्रतिष्ठित स्रोत का एक लिंक इस जगह के चारों ओर तैरने वाले कई उत्तरों से बेहतर है। – Kevin

5

ही एक मामला से है जब आपके पास कई कुंजी के आधार पर सॉर्ट करना चाहते हैं। उदाहरण के लिए, पहले नाम/उपनाम जोड़े की सूची को सॉर्ट करने के लिए, आप पहले नाम से पहले और फिर उपनाम द्वारा क्रमबद्ध कर सकते हैं।

यदि आपका सॉर्ट स्थिर नहीं था, तो आप पहले प्रकार का लाभ खो देंगे।

8

इसका मतलब है कि यदि आप एल्बम द्वारा क्रमबद्ध करना चाहते हैं, और ट्रैक नंबर से, तो आप पहले ट्रैक नंबर पर क्लिक कर सकते हैं, और इसे सॉर्ट किया गया है - फिर एल्बम का नाम क्लिक करें, और प्रत्येक एल्बम के लिए ट्रैक नंबर सही क्रम में रहते हैं।

+0

मुझे आश्चर्य है कि कितने लोगों को एहसास है कि यह इस तरह से काम करता है? लगभग रिवर्स पोलिश नोटेशन की तरह लगता है। –

57

यह कई प्रकार के माध्यम से आपकी श्रृंखला को 'श्रृंखला' में सक्षम बनाता है।

कहें कि आपके पास यादृच्छिक क्रम में पहले और अंतिम नाम वाली तालिका है। यदि आप पहले नाम से क्रमबद्ध करते हैं, और उसके बाद अंतिम नाम से, स्थिर सॉर्टिंग एल्गोरिदम सुनिश्चित करेगा कि अंतिम नाम वाले लोगों को पहले नाम से क्रमबद्ध किया गया हो।

उदाहरण के लिए:

  • स्मिथ, अल्फ्रेड
  • स्मिथ, जेड

सही क्रम में होने की गारंटी किया जाएगा।

+4

तुलनात्मक अनुमान में यह पहला और अंतिम नाम क्यों शामिल नहीं है? फिर आपको केवल एक बार सॉर्ट करना होगा। – SebastianK

+20

यह उपयोगी है जब आप समय से पहले की स्थिति नहीं जानते हैं। एक सूचीदृश्य की कल्पना करें जहां उपयोगकर्ता क्रमबद्ध करने के लिए कॉलम पर क्लिक करता है, और फिर आगे क्रमबद्ध करने के लिए किसी अन्य कॉलम पर क्लिक करता है। –

6

एक उदाहरण:

आप एक डेटा संरचना है कि फोन नंबर और कर्मचारियों को जो उन्हें कहा जाता है के जोड़े शामिल है कहो। प्रत्येक कॉल के बाद एक नंबर/कर्मचारी रिकॉर्ड जोड़ा जाता है। कई फोन नंबरों को कई अलग-अलग कर्मचारियों द्वारा बुलाया जा सकता है।

इसके अलावा, आप फोन नंबर द्वारा क्रमित और पहले 2 लोग हैं, जो किसी भी नंबर पर फोन किया करने के लिए एक बोनस देने के लिए चाहते हैं।

आप एक अस्थिर एल्गोरिथ्म के साथ सॉर्ट हैं, तो आप दी गई संख्या के कॉल करने के क्रम बनाए रखने के नहीं हो सकता है, और गलत कर्मचारियों बोनस दिया जा सकता।

एक स्थिर एल्गोरिथ्म यह सुनिश्चित करें कि फोन नंबर के प्रति सही 2 कर्मचारी बोनस प्राप्त करता है।

+0

उस बिंदु के उत्तर पर मैं देख रहा था। – bharatj

2

स्थिर छंटाई का लाभ कई चाबी के लिए संदिग्ध है, तो आप हमेशा एक तुलना कि एक बार में सभी चाबियाँ तुलना उपयोग कर सकते हैं। यह केवल एक फायदा है यदि आप एक समय में एक फ़ील्ड को सॉर्ट कर रहे हैं, जैसे कॉलम शीर्षक पर क्लिक करते समय - Joe Koberg एक अच्छा उदाहरण देता है।

किसी भी तरह एक स्थिर प्रकार में बदल सकता है अगर आप रिकॉर्ड करने के लिए एक दृश्य के नंबर जोड़ने के लिए खर्च कर सकते हैं, और एक टाई ब्रेकर के रूप में उपयोग जब बराबर कुंजी के साथ प्रस्तुत किया।

सबसे बड़ा लाभ तब आता है जब मूल क्रम में कुछ अर्थ होता है। मैं एक अच्छे उदाहरण के साथ नहीं आ सकता था, लेकिन मैं JeffH देखता था, जबकि मैं इसके बारे में सोच रहा था।

0

मान लीजिए कि आप एक इनपुट सेट जो दो क्षेत्रों है पर छँटाई कर रहे हैं, और, आप केवल प्रकार पहले पर। '|' चरित्र खेतों को विभाजित करता है।

इनपुट में सेट आप कई प्रविष्टियों है, लेकिन, आप 3 प्रविष्टियों को

की तरह लग रही है। । । एएए | टॉइंग । । । एएए | कार किराए पर लेना । । । एएए | नलसाजी । । ।

अब, जब आप सॉर्टिंग करते हैं तो आप उन सभी क्षेत्रों को एएए के साथ मिलकर उम्मीद करते हैं।

एक स्थिर प्रकार आपको देगा: । । । एएए | टॉइंग एएए | कार किराए पर लेना एएए | नलसाजी । । ।

यानी, तीन रिकॉर्ड जो एक ही तरह की कुंजी, एएए थे, आउटपुट में उसी क्रम में हैं जो वे इनपुट में थे। ध्यान दें कि उन्हें दूसरे फ़ील्ड पर सॉर्ट नहीं किया गया है, क्योंकि आपने रिकॉर्ड में दूसरे फ़ील्ड को सॉर्ट नहीं किया है।

एक अस्थिर प्रकार आपको देगा: । । । एएए | प्लंबिंग एएए | कार किराए पर लेना एएए | टॉइंग । । ।

ध्यान दें कि रिकॉर्ड अभी भी पहले फ़ील्ड पर क्रमबद्ध हैं, और दूसरा फ़ील्ड इनपुट ऑर्डर से अलग है।

एक अस्थिर प्रकार की तेज़ी से होने की संभावना है। एक स्थिर प्रकार नकल करता है कि जब वे कुछ सॉर्ट करते हैं तो गैर-कंप्यूटर वैज्ञानिक/गैर-गणित लोगों के मन में क्या होता है। हां, अगर आपने इंडेक्स कार्ड के साथ एक सम्मिलन प्रकार किया है तो आपके पास सबसे अधिक स्थिर प्रकार होगा।

0

आप हमेशा एक ही समय में सभी क्षेत्रों की तुलना नहीं कर सकते हैं। कुछ उदाहरण: (1) मेमोरी सीमाएं, जहां आप एक बड़ी डिस्क फ़ाइल को सॉर्ट कर रहे हैं, और मुख्य मेमोरी में सभी रिकॉर्ड्स के सभी फ़ील्ड के लिए जगह नहीं है; (2) बेस क्लास पॉइंटर्स की एक सूची को सॉर्ट करना, जहां कुछ ऑब्जेक्ट उप-वर्ग प्राप्त किए जा सकते हैं (आपके पास केवल बेस क्लास फ़ील्ड तक पहुंच है)।

इसके अलावा, स्थिर प्रकारों में एक ही इनपुट दिए गए निर्धारिती आउटपुट होते हैं, जो डिबगिंग और परीक्षण के लिए महत्वपूर्ण हो सकते हैं।

संबंधित मुद्दे