संभव डुप्लिकेट:
how to get uniformed random between a, b by a known uniformed random function RANDOM(0,1)रैंडम (ए, बी) को केवल रैंडम (0,1) के साथ कैसे कार्यान्वित करें?
की पुस्तक परिचय एल्गोरिदम में, एक उत्पाद शुल्क है:
प्रक्रिया रैंडम के एक कार्यान्वयन का वर्णन करें (एक, बी) जो केवल रैंडम (0,1) को कॉल करता है। ए और बी के एक समारोह के रूप में, आपकी प्रक्रिया के अपेक्षित चलने का समय क्या है? रैंडम (ए, बी) के परिणाम की संभावना शुद्ध रूप से वितरित की जानी चाहिए, क्योंकि रैंडम (0,1)
यादृच्छिक फ़ंक्शन के लिए, परिणाम ए और बी के बीच पूर्णांक होते हैं, विशेष रूप से। उदाहरण के लिए, यादृच्छिक (0,1) या तो 0 या 1 उत्पन्न करता है; रैंडम (ए, बी) उत्पन्न करता है एक, एक + 1, एक + 2, ..., ख
मेरे समाधान इस तरह है:
for i = 1 to b-a
r = a + Random(0,1)
return r
चलने का समय टी = बा
हैक्या यह सही है? क्या मेरे समाधान के परिणाम समान रूप से वितरित किए गए हैं?
धन्यवाद
क्या मेरी नई समाधान इस तरह है यदि:
r = a
for i = 1 to b - a //including b-a
r += Random(0,1)
return r
यदि यह सही नहीं है, यही कारण है कि r + = यादृच्छिक (0,1) में आता है आर समान रूप से वितरित नहीं?
आपका समाधान समान रूप से वितरित नहीं किया गया है। उदाहरण के तौर पर सबसे कम मान 'ए' केवल यादृच्छिक (0) + यादृच्छिक (0) + यादृच्छिक (0) + के योग द्वारा" गणना "किया जा सकता है .... हालांकि" मध्य "में किसी मान की संभावना है अधिक क्योंकि इसकी गणना 0 + 0 + 0 + 1 + 1, और 0 + 0 + 1 + 0 + 1, और 1 + 1 + 0 + 0 + 0, और इसी तरह की जा सकती है। इसके बारे में सोचें जैसे कि 2 डाइस फेंकना। 2 (1 + 1) या 12 (6 + 6) प्राप्त करने की संभावना 7 (1 + 6,2 + 5,3 + 4,4 + 3,5 + 2,6 + 1) प्राप्त करने की संभावना से कम है (Catan ftw के बसने वालों;))। – Progman
आपकी दूसरी पंक्ति प्रत्येक बार 'r' रीसेट करती है। आपको इसे 'ए' में प्रारंभ करना चाहिए और फिर इसे लूप में स्वयं के संदर्भ में अपडेट करना चाहिए। –