تبحث عن صفحة ويب واضحة وموجزة تشرح سبب عدم وجود بتات أقل من الأرقام العشوائية بشكل عشوائي

StackOverflow https://stackoverflow.com/questions/2560980

  •  23-09-2019
  •  | 
  •  

سؤال

أقوم بتجميع صفحة "كل مطور يجب أن يعرف".

رأيت العديد من المناقشات بخصوص rand() % N, ، ولكن ليس صفحة ويب واحدة تشرح كل شيء.

على سبيل المثال ، أشعر بالفضول إذا كانت هذه المشكلة فقط C- و Linux خاصة ، أو إذا كانت تنطبق أيضًا على Windows ، C ++ ،. جافا ، .net ، بيثون ، بيرل.

الرجاء مساعدتي في الوصول إلى أسفل هذا. أيضًا ، كيف تحصل الأرقام غير العشوائية؟ شكرًا لك!

هل كانت مفيدة؟

المحلول

ليس لدي صفحة ويب لإحالتك إليها ، لكن قد يكون لدي تفسير "ظهر الظرف" الذي سيساعد. الطريقة التي تعمل بها مولدات الأرقام العشوائية البسيطة هي باتباع الخطوات

  1. استخدم الرقم الأخير الذي تم إنشاؤه n أو رقم البذور.
  2. اضرب هذا الرقم برقم كبير خاص
  3. أضف رقمًا كبيرًا آخر خاصًا
  4. قسّم ذلك على عدد كبير ثالث خاص ورمي الباقي
  5. إرجاع النتيجة

الآن إذا كنت تفكر في ما يحدث في كل الخطوة 4 ، فأنت تقوم بعمليات حيث يمكن للبت السفلى فقط تغيير البتات السفلية من النتيجة. إضافة 1001 و 100 ... ستنتهي 00001 ... 02 (ها أنت على الرغم من أنني كنت أتحدث قاعدة 2 ، فإن هذا الرقم هو حقًا قاعدة 12 للضحك.) بغض النظر عن ما هو في نهاية الحساب. وبالمثل ، عندما تتكاثر ، سينتهي الأمر في 1 ، بغض النظر عن ماذا.

هناك مشكلة مماثلة في الطرف العلوي أيضًا ، حيث تهيمن مليار مرة على مليار مرة على مساهمة مئات الأماكن من رقم الذكر. هذا يشير إلى حقيقة أن الوسط هو المكان الذي تحدث فيه الأشياء الجيدة. تتفاعل الكثير من البتات هنا-عالية ، متوسطة ، منخفضة.

هذا هو الغرض من خطوة التقسيم ، فإنه يقطع الجزء السفلي من النتيجة حيث لم يكن هناك تفاعل كبير. عادةً ما لا يتم تقطيع الجزء العلوي لأن الكمبيوتر يسقط البتات العلوية عندما لا تتناسب الضربات مع كلمة الجهاز بعد الآن.

في النهاية على الرغم من أن نقاط القطع تعسفية إلى حد ما ويمكنك أن تكون أكثر إرضاءً من الأشخاص الذين صمموا الخوارزمية ولا يزالون يقطعون بعض البتات.

لسؤالك عن مدى سوءها ، يمكن أن تكون سيئة للغاية. أسهل طريقة لرؤية ذلك هي تجميع الأرقام الفردية في tuples ورسمها. لذلك إذا كان لديك أرقام عشوائية a, b, c, d, ... رسم بياني (a,b), (c,d), ... وانظر إلى النتائج. وهذا ما يسمى الاختبار الطيفي و Rand يفشل بشكل جميل. هذا واحد لدي رابط للمحاولة http://random.mat.sbg.ac.at/results/karl/spectraltest/

نصائح أخرى

الدفع http://en.wikipedia.org/wiki/Linear_Congruential_Generator, ، والتي من المحتمل أن تكون الخوارزمية المستخدمة لمعظم مولدات الأرقام العشوائية المدمجة.

التمرير لأسفل ، ابحث عن الفقرة التي تبدأ بـ "مشكلة أخرى من LCGs هي أن أجزاء الترتيب الأدنى من التسلسل المولد لها فترة أقصر بكثير .." لبعض البصيرة في rand() % N.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top