1, 10, 2, 3 ... द्वारा कुछ छंटनी विधियाँ क्यों छाँटी जाती हैं?


30

मैंने देखा है कि कई संख्यात्मक छँटाई के तरीकों से 1, 10, 2, 3 ... की अपेक्षा 1, 2, 3, 10 की छँटाई होती है ... मुझे एक परिदृश्य के साथ आने में परेशानी हो रही है जहाँ मैं करूँगा पहली विधि की जरूरत है और, एक उपयोगकर्ता के रूप में, जब भी मैं इसे अभ्यास में देखता हूं, मैं निराश हो जाता हूं। क्या दूसरी शैली में पहली शैली के लिए वैध उपयोग के मामले हैं? यदि ऐसा है, तो वो क्या हैं? यदि नहीं, तो पहली तरह की शैली कभी कैसे अस्तित्व में आई? प्रत्येक प्रकार की विधि के आधिकारिक नाम क्या हैं?


आपके प्रश्न का उत्तर नहीं, लेकिन अगर आपको ऐसे तार की एक सूची को क्रमबद्ध करना है, जिसमें संख्याएँ हो सकती हैं, तो आप शायद अल्फ़ान्यूम एल्गोरिथ्म का उपयोग करना चाहते हैं: davekoelle.com/alphanum.html
TehShrike

यह बहुत सरल है। सॉर्ट करते समय, एल्गोरिथ्म बाएं से दाएं स्कैन करता है। इसलिए, जब यह 1 और 5 के लिए आता है, तो 5 बड़ा होता है, और यह केवल इस EVEN के साथ जाता है अगर 1 वास्तव में 134234 जैसी बड़ी संख्या का हिस्सा है। यह जानने के लिए कि 134234 5 से बड़ा है, हमें वास्तव में स्कैन करना चाहिए संख्या को अंतिम अंक तक ले जाना (वास्तव में पहला अंक) 4 तो पीछे की ओर काम करें और देखें कि वास्तव में एक 100000 है जो 5. से बहुत बड़ा है। इसलिए, आपका विशिष्ट अंधा प्रकार ऐसा नहीं करता है क्योंकि यह केवल चरित्र की तुलना करता है तुलना में (या पहले) क्या होता है, इसे अनदेखा करने वाला चरित्र।
AbstractDissonance

1
यदि आप en.wikipedia.org/wiki/Natural_sort_order पढ़ते हैं तो यह समझ में आना चाहिए। प्राकृतिक क्रम में, अंकों के तारों को एक एकल "वर्ण" के रूप में वर्गीकृत किया जाता है। शारीरिक रूप से नहीं, सिर्फ तार्किक रूप से इसलिए हम अभी भी पहले मामले की तरह चरित्र तुलना कर सकते हैं, लेकिन हम पूर्णांक तार की तुलना पूर्णांक तार से वर्णों के बजाय वर्णों से कर पाएंगे, जो हमें पूर्ण मूल्य की तुलना करने की अनुमति देगा। सभी प्रकार इस तरह से होना चाहिए क्योंकि यह वह तरीका है जिससे हम मनुष्य चीजों को पढ़ते हैं (संख्याओं के लिए, हम वास्तव में दाएं से बाएं पढ़ते हैं, यहां तक ​​कि बाएं से दाएं स्ट्रिंग 1234 = 1000 + 200 + 30 + 4, 4000 + 300 + 20 + नहीं। 1
AbstractDissonance

जवाबों:


62

वह यह है कि कोषगत छंटाई जो तारों के रूप में मूल रूप से इसका मतलब है भाषा व्यवहार करता है चर और वर्ण दर वर्ण तुलना ( "200"से अधिक है "19999"क्योंकि '2'से अधिक है '1')

इसे ठीक करने के लिए आप कर सकते हैं

  • यह सुनिश्चित करें कि मानों को पूर्णांक माना जाता है,

  • आगे जोड़ते '0'तार करने के लिए इतना सब बराबर लंबाई (केवल व्यवहार्य जब आप अधिकतम मूल्य पता है) है।
    यही कारण है कि आप मीडिया फ़ाइलों (S1E01) के एपिसोड नंबर को पहले से ही 0 के साथ देखेंगे, इसलिए एक लेक्सोग्राफ़िक प्रकार चीजों को गड़बड़ नहीं करता है और कार्यक्रमों को वर्णानुक्रम में बस खेलने / प्रदर्शन करने की अनुमति देता है,

  • या एक कस्टम तुलनित्र बनाएं जो पहले स्ट्रिंग्स की लंबाई की तुलना करता है (छोटे तार छोटे पूर्णांक होते हैं) और जब वे समान होते हैं तो लेक्सिकोग्राफिक रूप से तुलना करते हैं (अग्रणी के बारे में सावधान '0')


5
'Lexiographic' के लिए +1। उस शब्द को कभी नहीं सुना, मैंने सिर्फ इस बारे में सोचा होगा कि वर्णानुक्रमिक छंटाई - संख्याओं को एक स्ट्रिंग प्रकार के रूप में माना जा रहा है, जैसे आपने कहा।
बेनामी

3
स्ट्रिंग के लिए '0' को प्रीपेन्ड करें। मैं यह प्रोग्रामिंग नहीं कर रहा था, यह मेरे फ़ोल्डर्स के नाम पर था और 'अध्याय 10' 'अध्याय 2' से पहले आ रहा था। फिर मैंने 1-9 नामक अध्याय बनाया और इसे "सही ढंग से" अब क्रमबद्ध किया गया है।
मार्विन

6

वर्णानुक्रम में, 1 पहले आता है। जब भी आप पहली विधि देखते हैं, तो यह वांछनीय नहीं है, बल्कि इसलिए कि छंटाई सख्ती से वर्णानुक्रम में होती है (और बाएं से दाएं, एक समय में एक वर्ण होता है): 1, 2, 10 समझ में आता है आपके लिए लेकिन कंप्यूटर से नहीं जो केवल तुलनात्मक जानकारी जानता हो। इस तरह की सरल तुलना में यह जानने का कोई तरीका नहीं है कि एक 0 के बाद एक वास्तव में दो के बाद आता है ।

जब आप मिश्रित शब्द और संख्या सॉर्टिंग देखते हैं जो संख्याओं को सही ढंग से व्यवहार करता है, तो ऐसा इसलिए है क्योंकि छंटाई अधिक बुद्धिमान है, और इसके शीर्ष पर, अभी भी आमतौर पर केवल एक स्ट्रिंग की शुरुआत या अंत में काम करता है।


4

यह परिणाम है जब आप संख्यात्मक रूप से बजाय संख्या के तार को वर्णानुक्रम में सॉर्ट करते हैं।

उस प्रकार की शैली sortउदाहरण के लिए यूनिक्स कमांड का डिफ़ॉल्ट व्यवहार है , जब तक कि आप --numeric-sortकमांड लाइन विकल्प का उपयोग नहीं करते हैं , जो इसे संख्यात्मक मानों की व्याख्या करने का प्रयास करने के लिए कहता है।


4

दूसरों के पास इस प्रकार के उत्तर हैं, लेकिन हर कोई आपके प्रश्न का उत्तर नहीं देता कि आप इसे क्यों देखते हैं। उत्तर वास्तव में उतना रोमांचक नहीं है। यह आमतौर पर एक बग है। अधिकांश छंटनी विधियाँ एक या दूसरे के लिए डिफ़ॉल्ट होंगी और प्रोग्रामिंग क्रमांक संख्याओं को छांटते समय डिफ़ॉल्ट को बदलने में लापरवाह होंगे।


मिश्रित अल्फ़ाबेटिक / न्यूमेरिक संदर्भों में, अनुभवी उपयोगकर्ता लेक्सोग्राफ़िक सॉर्टिंग पसंद करना पसंद करेंगे, क्योंकि यह सुसंगत और अनुमानित है। प्रत्येक ऐप जो "बुद्धिमानी से" मिश्रण करने की कोशिश करता है, लेक्सीग्राफिक और न्यूमेरिक सॉर्टिंग अलग-अलग तरीके से करता है, जिससे प्रश्नवाचक उपयोगिता का प्रकार बनता है।
j__m
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.