मैं इसे एक शॉट दूँगा, क्योंकि मैं कुछ अन्य उत्तरों में दी गई सलाह से पर्याप्त रूप से परेशान हूं।
आज्ञा दें दो RNG द्वारा उत्पन्न अनंत बिट अनुक्रम हैं (जरूरी नहीं कि PRNG जो कि एक बार प्रारंभिक अवस्था ज्ञात होने पर नियतात्मक हों), और हम अनुक्रम का उपयोग करने की संभावना पर विचार कर रहे हैं कुछ अर्थों में व्यवहार में सुधार की आशा के साथ । ऐसे कई तरीके हैं जिनमें को प्रत्येक और की तुलना में बेहतर या बदतर माना जा सकता है ; यहाँ एक छोटा सा मुट्ठी भर शब्द है जो मुझे विश्वास है कि "बेहतर" और "बदतर" शब्दों के सामान्य उपयोग के साथ सार्थक, उपयोगी और सुसंगत हैं:X⃗ ,Y⃗ X⃗ ⊕Y⃗ X⃗ ⊕Y⃗ X⃗ Y⃗
- (0) अनुक्रम की वास्तविक यादृच्छिकता की संभावना बढ़ जाती है या घट जाती है
- (1) अवलोकनीय गैर-यादृच्छिकता की संभावना बढ़ जाती है या घट जाती है (कुछ पर्यवेक्षक के संबंध में, जांच की कुछ दी गई राशि, संभवतः)
- (२) अवलोकनीय गैर-यादृच्छिकता की गंभीरता / स्पष्टता बढ़ती या घटती है।
पहले विचार करते हैं (0) के बारे में, जो कि तीनों में से केवल एक ही है जिसके सटीक होने की कोई उम्मीद है। ध्यान दें कि यदि वास्तव में, दोनों इनपुट RNG में से कोई भी वास्तव में यादृच्छिक, निष्पक्ष और दूसरे से स्वतंत्र है, तो XOR परिणाम वास्तव में यादृच्छिक और निष्पक्ष भी होगा। इस बात को ध्यान में रखते हुए, उस मामले पर विचार करें जब आप मानते हैं कि वास्तव में बेतरतीब ढंग से अलग-थलग अलग-अलग धाराएँ हैं, लेकिन आप पूरी तरह से निश्चित नहीं हैं। यदि संबंधित संभावनाएं हैं, तो आप उनमें से प्रत्येक के बारे में गलत हैं, तो संभावना है कि सही-यादृच्छिक नहीं है, तो
, वास्तव में बहुत कमX⃗ ,Y⃗ εX,εYX⃗ ⊕Y⃗ ≤εXεY<min{εX,εY}εX,εY को 0 के बहुत करीब माना जाता है ("आप मानते हैं कि वे वास्तव में यादृच्छिक हैं")। और वास्तव में यह उससे भी बेहतर है, जब हम की संभावना को भी ध्यान में रखते हैं तब भी जब वास्तव में यादृच्छिक न हो तो भी स्वतंत्र है:
इसलिए हम इस निष्कर्ष पर पहुँच सकते हैं कि (0), XOR को नुकसान नहीं पहुँचा सकता है, और संभवतः बहुत मदद कर सकता है।X⃗ ,Y⃗
Pr(X⃗ ⊕Y⃗ not truly random)≤min{Pr(X⃗ not truly random),Pr(Y⃗ not truly random),Pr(X⃗ ,Y⃗ dependent)}.
हालाँकि, PRNGs के लिए (0) दिलचस्प नहीं है, क्योंकि PRNGs के मामले में प्रश्न में कोई भी क्रम सही मायने में यादृच्छिक होने का कोई मौका नहीं है।
इसलिए इस सवाल के लिए, जो वास्तव में PRNGs के बारे में है, हमें कुछ (1) या (2) के बारे में बात करनी चाहिए। चूंकि वे "अवलोकनीय", "गंभीर", "स्पष्ट", "स्पष्ट" जैसे गुणों और मात्राओं के संदर्भ में हैं, अब हम कोलमोगोरोव जटिलता के बारे में बात कर रहे हैं, और मैं इसे सटीक बनाने की कोशिश नहीं करने जा रहा हूं। लेकिन मैं उम्मीद के मुताबिक निर्विवाद जोर लगाने के लिए इतनी दूर जाऊंगा कि, इस तरह के एक उपाय से, "01100110 ..." (अवधि = 4) "01010101 ..." (अवधि = 2) से भी बदतर है जो "इससे भी बदतर है" 00000000 ... "(स्थिर)।
अब, एक अनुमान लगा सकता है कि (1) और (2) उसी प्रवृत्ति का अनुसरण करेगा (0), और इसलिए कि निष्कर्ष "XOR चोट नहीं कर सकता" अभी भी पकड़ सकता है। हालाँकि, इस महत्वपूर्ण संभावना पर ध्यान दें कि न तो और न ही का अवलोकन गैर-यादृच्छिक था, लेकिन उन दोनों के बीच सहसंबंध के कारण का अवलोकन गैर-यादृच्छिक होता है। इसका सबसे गंभीर मामला, ज़ाहिर है, जब (या ), जिस स्थिति में स्थिर है, सभी संभावित परिणामों में से सबसे खराब; सामान्य तौर पर, यह देखना आसान है कि, भले ही कितना अच्छा और हैं,X⃗ Y⃗ X⃗ ⊕Y⃗ X⃗ =Y⃗ X⃗ =not(Y⃗ )X⃗ ⊕Y⃗ X⃗ Y⃗ X⃗ और को अपने xor के लिए स्वतंत्र रूप से "नज़दीकी" होने की आवश्यकता होती है, न कि अवलोकन-गैर-आयामी। वास्तव में, अवलोकनीय-निर्भर नहीं होने को यथोचित रूप से रूप में परिभाषित किया जा सकता है, न कि अवलोकन-गैर-आयामी।Y⃗ X⃗ ⊕Y⃗
इस तरह की आश्चर्यजनक निर्भरता वास्तव में एक बड़ी समस्या है।
क्या गलत हो जाता है इसका एक उदाहरण
प्रश्न में कहा गया है कि "मैं एक ही परिवार से एक साथ काम कर रहे कई रेखीय प्रतिक्रिया शिफ्ट रजिस्टर के सामान्य उदाहरण को छोड़ रहा हूं"। लेकिन मैं उस समय के लिए उस बहिष्करण को बाहर करने जा रहा हूं, ताकि XORing के साथ गलत तरीके का एक बहुत ही सरल वास्तविक जीवन उदाहरण दिया जा सके।
मेरा उदाहरण रैंड () का एक पुराना कार्यान्वयन होगा जो कि यूनिक्स लगभग 1983 के कुछ संस्करण पर था। IIRC, रैंड के इस कार्यान्वयन () फ़ंक्शन में निम्नलिखित गुण थे:
- रैंड () के लिए प्रत्येक कॉल का मूल्य 15 छद्म यादृच्छिक बिट्स था, अर्थात, [0, 32767 श्रेणी में पूर्णांक)।
- क्रमिक रिटर्न मान वैकल्पिक-सम-विषम-विषम; यह है, सबसे कम-महत्वपूर्ण-बिट 0-1-0-1 बारी-बारी से ...
- अगले-से-कम-महत्वपूर्ण बिट की अवधि 4 थी, इसके बाद की अवधि 8 थी, ... इसलिए उच्चतम-ऑर्डर बिट की अवधि ।215
- इसलिए रैंड के 15-बिट रिटर्न वैल्यू का क्रम अवधि के साथ आवधिक था ।215
मैं मूल स्रोत कोड को खोजने में असमर्थ किया गया है, लेकिन मैं में यहां से पोस्ट की एक जोड़ी एक साथ piecing से अनुमान लगा रहा हूँ https://groups.google.com/forum/#!topic/comp.os.vms/9k4W6KrRV3A कि इसने निम्नलिखित (सी कोड) को ठीक किया, जो उपरोक्त गुणों की मेरी स्मृति से सहमत है:
#define RAND_MAX 32767
static unsigned int next = 1;
int rand(void)
{
next = next * 1103515245 + 12345;
return (next & RAND_MAX);
}
void srand(seed)
unsigned int seed;
{
next = seed;
}
जैसा कि कोई कल्पना कर सकता है, विभिन्न तरीकों से इस रैंड () का उपयोग करने की कोशिश ने निराशाओं को जन्म दिया।
उदाहरण के लिए, एक बिंदु पर मैंने बार-बार लेने के द्वारा यादृच्छिक सिक्का फ़्लिप के अनुक्रम का अनुकरण करने की कोशिश की:
rand() & 1
यानी कम से कम महत्वपूर्ण बिट। परिणाम सरल वैकल्पिक सिर-पूंछ-सिर-पूंछ था। यह पहली बार में विश्वास करना कठिन था (मेरे कार्यक्रम में एक बग होना चाहिए!), लेकिन बाद में मैंने खुद को आश्वस्त किया कि यह सच है, मैंने इसके बजाय अगले-कम-महत्वपूर्ण बिट का उपयोग करने की कोशिश की। यह बहुत बेहतर नहीं है, जैसा कि पहले उल्लेख किया गया है - वह बिट आवधिक है। 4. क्रमिक रूप से उच्च बिट्स का पता लगाने के लिए पैटर्न मैंने पहले नोट किया था: अर्थात, प्रत्येक अगले उच्च-क्रम बिट में पिछले की अवधि से दोगुना था, इसलिए यह सम्मान उच्चतम-क्रम बिट उन सभी के लिए सबसे उपयोगी था। ध्यान दें कि कोई काला-सफेद दहलीज नहीं था "बिट उपयोगी है, बिट उपयोगी नहीं है" यहां; हम सभी वास्तव में कह सकते हैं कि गिने-चुने बिट पदों में उपयोगिता / बेकारता की अलग-अलग डिग्री थी।ii−1
मैंने परिणामों को आगे बढ़ाने के लिए भी कोशिश की, या एक साथ कई कॉल रैंड () से लौटाए गए मानों को XOR करना। क्रमिक रैंड () मूल्यों के XORing जोड़े एक आपदा थे, निश्चित रूप से - इसके परिणामस्वरूप सभी विषम संख्याएं थीं! मेरे उद्देश्यों के लिए (अर्थात् सिक्के के उतार-चढ़ाव का "स्पष्ट रूप से यादृच्छिक" अनुक्रम पैदा करना), XOR की निरंतर समता परिणाम मूल के विषम सम-विषम व्यवहार से भी बदतर थी।
थोड़ी भिन्नता इसे मूल ढाँचे में डालती है: , रैंड द्वारा लौटाए गए 15-बिट मानों का अनुक्रम हो () दिए गए बीज , और एक अलग बीज से अनुक्रम । फिर, सभी या सम-विषम संख्याओं का एक अनुक्रम होगा, जो मूल प्रत्यावर्ती सम / विषम व्यवहार से भी बदतर है।X⃗ sXY⃗ sYX⃗ ⊕Y⃗
दूसरे शब्दों में, यह एक उदाहरण है जहां XOR ने किसी भी उचित व्याख्या द्वारा (1) और (2) के अर्थ में चीजों को बदतर बना दिया। यह कई अन्य तरीकों से भी बदतर है:
- (3) XORed कम से कम-महत्वपूर्ण-बिट स्पष्ट रूप से पक्षपाती है, यानी 0 और 1 के असमान आवृत्तियों में से किसी भी संख्या में बिट स्थिति के विपरीत, जो सभी निष्पक्ष हैं।
- (४) वास्तव में, प्रत्येक बिट स्थिति के लिए, बीजों के जोड़े होते हैं, जिसके लिए एक्सओआर परिणाम में वह बिट स्थिति पक्षपाती होती है, और बीजों की प्रत्येक जोड़ी के लिए, एक्सओआर में पक्षपाती होने वाले (कम से कम ५) बिट पद होते हैं नतीजा।
- (5) XOR परिणाम में 15-बिट मानों के पूरे अनुक्रम की अवधि या तो 1 या , जबकि मूल के लिए की तुलना में ।214215
कोई नहीं (3), (4), (5) स्पष्ट है, लेकिन वे सभी आसानी से सत्यापन योग्य हैं।
अंत में, आइए एक ही परिवार से PRNGs के निषेध को फिर से शुरू करने पर विचार करें। यहाँ मुझे लगता है कि समस्या यह है कि यह वास्तव में कभी स्पष्ट नहीं है कि दो PRNG "एक ही परिवार से" हैं, जब तक / जब तक कोई XOR और नोटिस (या हमलावर नोटिस) का उपयोग करना शुरू नहीं करता है, तब तक (1) के अर्थ में चीजें खराब हो गईं। और (2), अर्थात जब तक आउटपुट में गैर-यादृच्छिक पैटर्न नहीं देखा-देखा / शर्मनाक / विनाशकारी से सीमा को पार करते हैं, और उस बिंदु पर बहुत देर हो चुकी होती है।
मैं यहाँ अन्य जवाबों से घबरा गया हूँ, जो सैद्धांतिक सलाह के आधार पर अयोग्य सलाह "XOR को चोट नहीं पहुँचा सकते" जो मुझे मॉडलिंग के घटिया काम करने के लिए दिखाई देती है, जिसे ज्यादातर लोग "अच्छा" और "बुरा" मानते हैं। वास्तविक जीवन में PRNGs। उस सलाह का स्पष्ट और स्पष्ट उदाहरणों से खंडन किया जाता है जिसमें XOR चीजों को बदतर बना देता है, जैसे कि रैंड () उदाहरण ऊपर दिया गया है। हालांकि यह अनुमान योग्य है कि अपेक्षाकृत "मजबूत" PRNG लगातार विपरीत व्यवहार प्रदर्शित कर सकता है जब XORed टू द खिलौना PRNG जो कि रैंड () था, जिससे XOR उनके लिए एक अच्छा विचार बना रहा है, मैंने उस दिशा में कोई सबूत नहीं देखा है, सैद्धांतिक या अनुभवजन्य, इसलिए ऐसा होना मेरे लिए अनुचित है।
व्यक्तिगत रूप से, मेरी युवावस्था में XORing रैंड () के द्वारा आश्चर्य से काट लिया गया है, और अपने पूरे जीवन में अनगिनत अन्य मिश्रित आश्चर्य सहसंबंधों से, मुझे लगता है कि अगर मैं फिर से इसी तरह की रणनीति आजमाता हूं, तो परिणाम के बारे में सोचने का कोई कारण नहीं है। यही कारण है कि मैं, व्यक्तिगत रूप से, कई PRNGs के साथ XOR के लिए बहुत अनिच्छुक होगा जब तक कि बहुत व्यापक विश्लेषण और वीटिंग मुझे कुछ आत्मविश्वास देने के लिए नहीं किया गया है कि विशेष रूप से RNG के लिए ऐसा करना सुरक्षित हो सकता है। जब मुझे एक या एक से अधिक PRNG में कम आत्मविश्वास होता है, तो संभावित इलाज के रूप में, उन्हें XORing करना मेरा आत्मविश्वास बढ़ाने की संभावना नहीं है, इसलिए मैं इस तरह के उद्देश्य के लिए इसका उपयोग करने की संभावना नहीं हूं। मैं आपके प्रश्न के उत्तर की कल्पना करता हूं कि यह व्यापक रूप से आयोजित भावना है।