पहले, आइए हम दो स्पष्ट, लेकिन महत्वपूर्ण धारणाएँ बनाते हैं:
_.random_item
अंतिम स्थिति चुन सकते हैं।
_.random_item
संभावना 1 के साथ हर स्थिति चुनता है ।1n+1
अपने एल्गोरिथ्म की शुद्धता साबित करने के लिए, आपको यहां इस्तेमाल किए जाने वाले के समान एक प्रेरक तर्क की आवश्यकता है :
- एकल सूची के लिए केवल एक ही संभावना है, इसलिए इसे समान रूप से चुना गया है।
- यह मानते हुए कि तत्वों के साथ सूची समान रूप से चुनी गई थी (सभी क्रमपरिवर्तन से), यह दिखाएं कि आपकी तकनीक द्वारा प्राप्त n + 1 तत्वों के साथ समान रूप से चुना गया है।nn+1
यहाँ से, प्रमाण गलत है। कृपया सही प्रमाण के लिए नीचे देखें; मैं इसे यहां छोड़ देता हूं क्योंकि गलती और निम्न चरण (जो ध्वनि हैं) शैक्षिक हो सकते हैं।
यह एक स्थानीय (यानी तत्व-वार) संपत्ति को प्राप्त करने के लिए उपयोगी है जिसे पकड़ना है, क्योंकि पूरे क्रमपरिवर्तन के बारे में बहस करना दर्दनाक है। निरीक्षण करें कि यदि प्रत्येक तत्व को प्रत्येक स्थिति में होने की समान संभावना है, अर्थात, एक क्रमचय को समान रूप से चुना जाता है
∀π∈PermnPr(L=π)=1n!⟺∀i=1n ∀j=1nPr(Li=j)=1n(1)
जहाँ और हम सूची में { 1 , … , n } को सम्मिलित करने वाली उल्लेखनीय सादगी के लिए मानते हैं ।n=|L|{1,…,n}
अब, देखते हैं कि सेंट तत्व को सम्मिलित करते समय आपकी तकनीक क्या करती है। हमें तीन मामलों पर विचार करना होगा (स्वैप के बाद):n+1
- सूची में तत्वों में से एक, बदली नहीं, यानी और जे ∈ { 1 , ... , n }i∈{1,…,n}j∈{1,…,n}
- सूची में तत्वों, बदली, यानी में से एक और जे ∈ { 1 , ... , n }i=n+1j∈{1,…,n}
- नए तत्व, यानी और j = n + 1i∈{1,…,n+1}j=n+1
प्रत्येक मामले के लिए, हम तत्व की स्थिति i पर होने की संभावना की गणना करते हैं ; सभी को 1 होना हैji (जो(1) केकारण पर्याप्त है)। चलोपीएन=11n+1(1) पहले से एक की संभावना होnतत्वों पुरानी सूची (प्रेरण परिकल्पना) में किसी भी स्थिति में किया जा रहा है, औरपीएस=1pn=1nn किसी भी स्थिति को चुने जाने की संभावना(अनुमान 1, 2)। ध्यान दें किnतत्वों केसाथ सूची का सहवासऔर स्वैप स्थिति को चुननास्वतंत्र घटनाएँ हैं, इसलिए संयुक्त घटनाओं की संभावनाएं;ps=1n+1random_item
n
Pr(Li=j,i swapped)=Pr(Li=j)⋅Pr(i swapped)=pnps
के लिए । अब गणना के लिए।i,j∈{1,…,n}
हम केवल पुराने तत्वों पर विचार करते हैं। ऐसा तत्व j स्थिति में है अगर मैं और केवल अगर यह अंतिम प्रविष्टि से पहले था और मुझे स्वैप स्थिति के रूप में नहीं चुना गया है, तो वह यह है कि njii
।Pr(Li=j)=pn(1−ps)=1n⋅nn+1=1n+1
यहां हम मानते हैं कि पुराने तत्वों में से एक को अंतिम स्थिति में बदल दिया जाता है। एलिमेंट किसी भी पुराने पद पर हो सकता है, इसलिए हम सभी संभावनाओं पर योग करते हैं जो कि j मैं स्थिति में थी और मुझे स्वैप स्थिति के रूप में चुना गया है, वह हैjjii
।Pr(Ln+1=j)=∑i=1npnps=∑i=1n1n⋅1n+1=1n+1
नया तत्व स्थिति पर समाप्त होता है यदि और केवल अगर मैं स्वैप स्थिति के रूप में चुना जाता है, तो यह हैii
।Pr(Li=j)=ps=1n+1
सभी अच्छी तरह से पता चला है, आपकी प्रविष्टि रणनीति वास्तव में एकरूपता को संरक्षित करती है। प्रेरण की शक्ति से, यह साबित होता है कि आपका एल्गोरिथ्म समान रूप से वितरित क्रमपरिवर्तन बनाता है।
चेतावनी का एक शब्द: यह सबूत टूट जाता है यदि सम्मिलित तत्व युग्मक अलग-अलग सम्मान नहीं हैं। विशिष्ट, क्योंकि तब बहुत पहले समीकरण मान्य नहीं है। लेकिन आपका एल्गोरिथ्म अभी भी मान्य है; डुप्लिकेट के साथ प्रत्येक क्रमपरिवर्तन यादृच्छिक निष्पादन की एक ही संख्या से उत्पन्न होता है। आप डुप्लिकेट को चिह्नित करके इसका प्रमाण दे सकते हैं (अर्थात उन्हें अलग-अलग बना सकते हैं), प्रमाण के ऊपर प्रदर्शन करें और चिह्नों को हटा दें (वस्तुतः); अंतिम चरण समान आकार के क्रमपरिवर्तन को समान करता है।
जैसा कि स्टीवन ने टिप्पणियों में सही ढंग से टिप्पणी की है, उपरोक्त सबूत मूलभूत रूप से त्रुटिपूर्ण है क्योंकि पकड़ में नहीं आता है; आप दाएं हाथ को पूरा करने वाले क्रमपरिवर्तन के सेट पर वितरण का निर्माण कर सकते हैं, लेकिन बाएं हाथ की ओर नहीं।(1)
इसलिए, हमें क्रमपरिवर्तन की संभावनाओं के साथ काम करना होगा, जो यह बताता है कि आखिरकार यह बुरा नहीं है। random_item
पद के प्रारंभ में उल्लिखित और प्रेरक संरचना की धारणाएँ यथावत हैं, हम वहाँ से जारी हैं। चलो के बाद सूची को निरूपित { 1 , ... , कश्मीर }L(k){1,…,k} डाला गया है।
चलो का एक मनमाना परिवर्तन { 1 , ... , n + 1 } । इसे विशिष्ट रूप से लिखा जा सकता हैπ′∈Permn+1{1,…,n+1}
π′=(π(1),π(2),…,π(i−1),n+1,π(i+1),…,π(n),π(i))
π∈Permni∈{1,…,n+1}Pr(L(n)=π)=1n!random_item
i1n+1 by assumption. As the random choices of π and i are (stochastically) independent, we get
Pr(L(n+1)=π′)=Pr(L(n)=π)⋅Pr(i swapped)=1(n+1)!
which we had to show. By the power of induction, that proves that your algorithm creates uniformly distributed permutations.
- For example, assign every permutation in {(1,2,3,4),(2,3,4,1),(3,4,1,2),(4,1,2,3)} probability 14 and all others 0. There are also examples that assign every permutation a non-zero probability.