क्या गैर-संक्रमणीय तुलना के साथ एक छँटाई एल्गोरिथ्म का उपयोग करना संभव है, और यदि हाँ, तो तुलनात्मक रूप से छँटाई के लिए आवश्यकता के रूप में सूचीबद्धता क्यों है?
पृष्ठभूमि:
एक छँटाई एल्गोरिथ्म आमतौर पर एक तुलनित्र फ़ंक्शन सी (x, y) के अनुसार सूची के तत्वों को क्रमबद्ध करता है
इस तुलनित्र की आवश्यकताएं हैं, जहां तक मैं उन्हें समझता हूं:
- :
- एंटीसिमेट्रिक:
- सकर्मक:
- C (x, y) को सभी x और y के लिए परिभाषित किया गया है, और परिणाम केवल x और y पर निर्भर करते हैं
(इन आवश्यकताओं को हमेशा अलग-अलग कार्यान्वयनों के साथ अलग-अलग सूचीबद्ध किया जाता है, इसलिए मुझे यकीन नहीं है कि मुझे यह सब सही मिला है)
अब मैं एक "सहिष्णु" तुलनित्र फ़ंक्शन के बारे में सोच रहा हूं, जो संख्याओं को स्वीकार करता है x, y जैसा कि यदि :
उदाहरण: दोनों [ 1, 2, 3, 4, 5]
और [1, 4, 3, 2, 5]
सहिष्णु तुलनित्र के अनुसार आरोही क्रम में क्रमबद्ध हैं ( यदि x सूची में y से पहले आता है),
लेकिन नहीं है, क्योंकि C (4,2) = 1[1, 4, 2, 3, 5]
यह सहिष्णु तुलनित्र रिफ्लेक्सिव और एंटीसिमेट्रिक है, लेकिन सकर्मक नहीं।
यानी C (1,2) = 0, c (2,3) = 0, लेकिन C (1,3) = -1, संक्रामण का उल्लंघन
फिर भी मैं किसी भी छँटाई एल्गोरिथ्म के बारे में नहीं सोच सकता हूँ जो इस तुलनित्र और एक यादृच्छिक सूची को देखते हुए "सही ढंग से क्रमबद्ध" आउटपुट का उत्पादन करने में विफल होगा।
क्या इस मामले में संवेदनशीलता की आवश्यकता नहीं है? और वहाँ है कि संक्रामिता ने एक कम सख्त संस्करण है है काम करने के लिए छंटाई के लिए आवश्यक?
संबंधित सवाल:
- तुलनात्मक प्रकार के लिए एंटीसिममेट्री क्यों आवश्यक है? (एंटीसिमेट्री के बारे में)
- छँटाई एल्गोरिदम जो एक यादृच्छिक तुलनित्र को स्वीकार करते हैं (एक यादृच्छिक C (x, y) के बारे में)
- एक गैर-संक्रमणीय IComparer के साथ ऑर्डरबी (मेरे द्वारा c # सॉर्ट एल्गोरिथ्म के बारे में)