चाहता है तो तुच्छ हैं, तो स्वैप की न्यूनतम संख्या के चक्र की संख्या से निर्धारित किया जाएगा। यह Cuckoo Hashing के समान सिद्धांत का पालन करेगा। आप क्रमपरिवर्तन में पहला मान लेते हैं, और मूल अनुक्रमणिका में मान के सूचकांक पर मान को देखते हैं। यदि वे मेल खाते हैं, तो एक ही ऑपरेशन के लिए स्वैप करें।
[ 2 1]: वैल्यू 3 इंडेक्स पर है, इसलिए इंडेक्स 3 पर मान देखें।
[3 2 ]: मान 1 सूचकांक 3 पर है, इसलिए दो सूचकांक चक्र मौजूद हैं। इन मूल्यों को स्वैप करें।
यदि नहीं, तो पहले इंडेक्स को स्टैक पर दबाएं और दूसरी अनुक्रमणिका के मान के लिए इंडेक्स की तलाश करें। आखिर में एक चक्र होगा। उस बिंदु पर, ढेर से मूल्यों को पॉप करके स्वैप करना प्रारंभ करें। यह एन -1 के बराबर कई स्वैप लेगा, जहां एन चक्र की लंबाई है।
[ 1 2]: मूल्य 3 सूचकांक एक पर है, इसलिए सूचकांक में मूल्य को देखने 3.
[3 1 ]: मान 2 सूचकांक 3 में है, इसलिए 3 करने के लिए जोड़ ढेर और इंडेक्स की तलाश 2. चक्र के शुरुआती मूल्य के रूप में 3 स्टोर करें।
[3 2]: मान 1 सूचकांक 2 में है, इसलिए ढेर करने के लिए 2 जोड़ सकते हैं और सूचकांक की तलाश 1.
[ 1 2]: मूल्य 3 चक्र की शुरुआत है, इसलिए स्वैप स्टैक से पॉप 2 और स्वैप मान 1 और 2.
[1 3 2]: स्टैक से पॉप 3 और 2 और 3 स्वैप करें, जिसके परिणामस्वरूप 2 स्वैप के साथ सॉर्ट की गई सूची होती है।
[1 2 3]
इस एल्गोरिथ्म के साथ
, स्वैप की अधिकतम संख्या एन -1, जहां N मानों की कुल संख्या है किया जाएगा। यह तब होता है जब एन लंबाई चक्र होता है।
संपादित करें: यह एल्गोरिदम न्यूनतम स्वैप देता है, लेकिन न्यूनतम (x, y) फ़ंक्शन का उपयोग करके न्यूनतम मूल्य आवश्यक नहीं है। मैंने गणित नहीं किया है, लेकिन मुझे विश्वास है कि एकमात्र समय जब स्वैप (एक्स, वाई) = {स्वैप (1, एक्स), स्वैप (1, वाई), स्वैप (1, एक्स)} का उपयोग नहीं किया जाना चाहिए जब x {2,3} और n < 2 में x है; एक विशेष मामले के रूप में लिखने के लिए पर्याप्त आसान होना चाहिए। 2 और 3 को स्पष्ट रूप से जांचना और स्थानांतरित करना बेहतर हो सकता है, फिर दो संचालन में सॉर्टिंग प्राप्त करने के लिए टिप्पणियों में उल्लिखित एल्गोरिदम का पालन करें।
संपादित करें 2: बहुत यकीन है कि यह सभी मामलों को पकड़ लेगा।
while (unsorted) {
while (1 != index(1))
swap (1 , index (1))
if (index(2) == [email protected](2))
swap (2, [email protected](2))
else
swap (1 , highest value out of place)
}
तो, क्या मुझे प्रश्न सही है: आप क्रमपरिवर्तन दे रहे हैं। इस दिए गए क्रमपरिवर्तन के लिए, आपको प्रति स्वैप के साथ उस स्वैप ऑपरेशन का उपयोग करके इसे क्रमबद्ध करने की न्यूनतम लागत की आवश्यकता है? – hyde
स्वैप लागत, एक्स और वाई तत्व अंतिम स्थिति या मान हैं, या वे वर्तमान में स्थिति तत्व हैं? – hyde
... असल में, क्या यह एक चाल सवाल है? यदि लागत न्यूनतम (एक्स, वाई) है, तो आप हमेशा 1 के साथ स्वैप करें ... सही स्थिति में तत्व प्राप्त करने के लिए दो स्वैप। – hyde