एक फेरबदल एल्गोरिथ्म की शुद्धता कैसे साबित करें?


24

मेरे पास यादृच्छिक क्रम में वस्तुओं की एक सूची तैयार करने के दो तरीके हैं और यह निर्धारित करना चाहते हैं कि क्या वे समान रूप से निष्पक्ष हैं (निष्पक्ष)।

पहली विधि जो मैं उपयोग करता हूं वह तत्वों की पूरी सूची का निर्माण करना है और फिर उस पर फेरबदल करना है (जैसे फिशर-येट्स फेरबदल)। दूसरी विधि एक पुनरावृत्त विधि की अधिक है जो सूची को हर प्रविष्टि में फेरबदल करती रहती है। छद्म कोड में सम्मिलन समारोह है:

insert( list, item )
    list.append( item )
    swap( list.random_item, list.last_item )

मुझे इस बात में दिलचस्पी है कि कोई इस विशेष फेरबदल की निष्पक्षता कैसे दिखाता है। इस एल्गोरिथ्म के फायदे, जहां इसका उपयोग किया जाता है, यह पर्याप्त है कि भले ही थोड़ा अनुचित यह ठीक होगा। यह तय करने के लिए कि मुझे इसकी निष्पक्षता का मूल्यांकन करने की आवश्यकता है।

मेरा पहला विचार यह है कि मुझे अंतिम लंबाई के एक सेट के लिए संभव कुल अनुमतियों की तुलना में इस तरह संभव कुल गणना की गणना करने की आवश्यकता है। मैं एक नुकसान पर थोड़ा सा हूँ लेकिन इस एल्गोरिथ्म से उत्पन्न क्रमपरिवर्तन की गणना कैसे करें। मैं यह भी निश्चित नहीं कर सकता कि यह सबसे अच्छा या सबसे आसान तरीका है।


आप अपने एल्गोरिथ्म के बड़ी संख्या में एक सांख्यिकीय नमूना कर सकते हैं और इसे अपेक्षित मूल्य से तुलना कर सकते हैं, या इस पर कुछ प्रकार की यादृच्छिकता परीक्षण कर सकते हैं।
डेव क्लार्क

आप वितरण का परीक्षण करना चाहते हैं। क्या यह समान रूप से वितरित, या तिरछा है। हालांकि, मुझे संदेह है कि आपको इसे कई बार चलाने की आवश्यकता होगी।
डेव क्लार्क

मैं स्पष्ट नहीं हूँ कि मैं ऐसा कैसे करूँगा। यह मेरे बाद की सामग्री की यादृच्छिकता नहीं है, लेकिन आदेश की यादृच्छिकता है। कौन सा दृष्टिकोण आदेश के वितरण को माप सकता है?
edA-qa मोर्ट-ओर-वाई

आह, मूर्खतापूर्ण, मैं एक निश्चित इनपुट सेट का उपयोग कर सकता हूं और वितरण प्राप्त करने के लिए प्रत्येक तत्व की अंतिम स्थिति का उपयोग कर सकता हूं। फिर भी, मैं वास्तव में एक सिमुलेशन की तुलना में एक तार्किक प्रमाण के अधिक पसंद करेंगे।
eda-qa mort-ora-y

@ edA-qamort-ora-y: आपकी इच्छा मेरी आज्ञा है। ;)
राफेल

जवाबों:


22

पहले, आइए हम दो स्पष्ट, लेकिन महत्वपूर्ण धारणाएँ बनाते हैं:

  1. _.random_item अंतिम स्थिति चुन सकते हैं।
  2. _.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. सूची में तत्वों में से एक, बदली नहीं, यानी और जे { 1 , ... , n }i{1,,n}j{1,,n}
  2. सूची में तत्वों, बदली, यानी में से एक और जे { 1 , ... , n }i=n+1j{1,,n}
  3. नए तत्व, यानी और 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_itemn

Pr(Li=j,i swapped)=Pr(Li=j)Pr(i swapped)=pnps

के लिए । अब गणना के लिए।i,j{1,,n}

  1. हम केवल पुराने तत्वों पर विचार करते हैं। ऐसा तत्व j स्थिति में है अगर मैं और केवल अगर यह अंतिम प्रविष्टि से पहले था और मुझे स्वैप स्थिति के रूप में नहीं चुना गया है, तो वह यह है कि njii

    Pr(Li=j)=pn(1ps)=1nnn+1=1n+1

  2. यहां हम मानते हैं कि पुराने तत्वों में से एक को अंतिम स्थिति में बदल दिया जाता है। एलिमेंट किसी भी पुराने पद पर हो सकता है, इसलिए हम सभी संभावनाओं पर योग करते हैं जो कि j मैं स्थिति में थी और मुझे स्वैप स्थिति के रूप में चुना गया है, वह हैjjii

    Pr(Ln+1=j)=i=1npnps=i=1n1n1n+1=1n+1

  3. नया तत्व स्थिति पर समाप्त होता है यदि और केवल अगर मैं स्वैप स्थिति के रूप में चुना जाता है, तो यह है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),,π(i1),n+1,π(i+1),,π(n),π(i))

πPermni{1,,n+1}Pr(L(n)=π)=1n!random_itemi1n+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.


  1. 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.

4
'Observe that a permutation is uniformly chosen if every element has equal probability of being at each position' - this isn't true. For instance, the set of four permutations on four elements {(1, 2, 3, 4), (2, 3, 4, 1), (3, 4, 1, 2), (4, 1, 2, 3)} satisfies your constraint, but obviously isn't the set of all permutations. Unfortunately you have to use global properties of your permutation because no local conditions are enough to determine uniformity.
Steven Stadnicki
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.