हमारे पास कई आइटम हैं जिन्हें अंतिम उपयोगकर्ता एक वांछित क्रम में व्यवस्थित करने में सक्षम होगा। आइटम का सेट अनियंत्रित है, लेकिन प्रत्येक आइटम में एक सॉर्ट कुंजी है जिसे संशोधित किया जा सकता है।
हम एक ऐसे एल्गोरिथ्म की तलाश कर रहे हैं, जो किसी ऐसी वस्तु के लिए एक नई सॉर्ट कुंजी बनाने की अनुमति देगा जिसे जोड़ा या स्थानांतरित किया गया हो या तो पहले आइटम, अंतिम आइटम, या किसी भी दो आइटम के बीच हो। हम उम्मीद कर रहे हैं कि केवल आइटम की छँटाई कुंजी को संशोधित किया जाएगा।
एक उदाहरण एल्गोरिथ्म में प्रत्येक प्रकार की कुंजी एक फ्लोटिंग पॉइंट नंबर होना चाहिए, और दो आइटमों के बीच एक आइटम रखने पर, औसत होने के लिए सॉर्ट कुंजी सेट करें। किसी आइटम को पहले या आखिरी में रखने से सबसे बाहरी मान + 1 प्राप्त होगा।
यहाँ समस्या यह है कि फ्लोटिंग पॉइंट प्रिसिजन फ़ेल होने का कारण हो सकता है। एक भिन्नात्मक संख्या का प्रतिनिधित्व करने के लिए दो पूर्णांक का उपयोग करना इसी तरह संख्या इतनी बड़ी हो सकती है कि वे नियमित रूप से संख्यात्मक प्रकारों में सटीक रूप से प्रतिनिधित्व नहीं कर सकते हैं (जैसे कि JSON के रूप में स्थानांतरित होने पर)। हम BigInts का उपयोग नहीं करना चाहेंगे।
क्या इसके लिए एक उपयुक्त एल्गोरिथ्म है जो उदाहरण के लिए, तार का उपयोग करके काम करेगा, जो इन कमियों से प्रभावित नहीं होगा?
हम बड़ी संख्या में चालों का समर्थन नहीं कर रहे हैं, लेकिन ऊपर वर्णित एल्गोरिथ्म लगभग 50 चालों के बाद एक डबल-सटीक फ़्लोटिंग पॉइंट नंबर पर विफल हो सकता है।
A, B, C
- A, AA, B, C
- A, AA, AB, B, C
- A, AA, AAA, AAB, AAC, AB, AC, B, C
। बेशक, आप शायद अपने पत्रों को अधिक स्थान देना चाहते हैं ताकि तार इतनी जल्दी न बढ़ें, लेकिन यह किया जा सकता है।