تطوير لبرنامج
لمحاكاة إلقاء العملة المعدنية
لدراسة
احتمال الحصول على 100 صورة متتالية
في الموضوع
السابق شرحت فكرة إنشاء برنامج يحاكي عملية إلقاء عملة، ويدرس عدد الصور
المتوالية التي يمكن الحصول عليها.
ذلك
البرنامج كان يركز على حساب أقصى عدد من الصور يمكن الوصول إليه، لهذا كان يتجاهل
بعض النتائج الأقصر من أقصى عدد حصلنا عليه، كما كان يتجاهل عدد مرات تكرار نفس
النتيجة.
وقد
قررت تطوير هذا البرنامج ليعطي صورة أشمل لمن يريد دراسة هذه الاحتمالات (على
الأقل سيكون مفيدا كبرنامج توضيحي للطلاب الذين يدرسون علم الإحصاء).. لهذا جعلت
البرنامج يأخذ في الاعتبار كل النتائج وعدد مرات تكرارها كما في الصورة:
يمكنكم
تحميل كود هذا البرنامج من هنا:
الملاحظة
الواضحة التي ستبرز لمن يدرس النتائج، هي أي التتابعات الأقصر للصور تحدث أسرع، وتتكرر
أكثر.. فالحصول على صورة منفردة يحدث من أول بضع محاولات، ويتكرر ملايين المرات،
والنسبة المئوية تظهر أن الصورة المنفردة تستأثر بحوالي نصف عدد النتائج التي نحصل
عليها.. لاحظ أنني أحسب هذه النسبة المئوية بالقسمة على مجموع النتائج (مجموع
القيم الموجودة في العمود "تكرار الحدوث").
ستلاحظ
أيضا أن عدد مرات التكرار يقل إلى النصف كلما زدت عدد الصور المتتابعة بواحد.. فحدوث
صورتين متتاليتين يستأثر بربع عدد النتائج.. وحدوث ثلاث صور متتابعة يستأثر بثمن
عدد النتائج.. وهكذا يستمر القسمة على 2 كلمات زدنا عدد الصور المتتابعة بواحد..
وهذا ما يجعل مرات التكرار يقل بشكل أسي سريع، وهو ما يفسر لك لماذا يصير الحصول
على عدد أكبر من الصور المتتابعة أصعب.. فالحصول على 6 صور متتابعة لم يحظ بأكثر
من 1.25% من النتائج.. والحصول على 10 صور
متتابعة شكّل أقل من 1 في الألف من النتائج.. أما حدوث 20 صورة متتابعة، فكان
نصيبه حوالي 1 في المليون من النتائج!.. وكما تتوقع: حدوث 30 صورة متتالية نصيبه 1
في المليار من النتائج.. لاحظ أن زيادة 10 يعني القسمة على 2 عشر مرات.. 2 أس 10
يساوي 1024 ، ويمكننا اعتبار أنها تساوي 1000 للتسهيل.. هذا معناه أن كل 10 صور
نضيفها للصور المتتابعة تقسم النسبة المئوية للناتج على 1000.. لهذا نتوقع أن تكون
نسبة 40 صورة متتالية في النتائج هي 1 في التريليون، ونسبة 50 صورة هي 1/10 أس 15،
ونسبة 60 صورة هي 1/10 أس 18، ونسبة 100 صورة هي 1/10 أس 30، وهي النسبة التي أثبتنا مرارا
وتكرارا أنها تساوي صفرا ولا يكفي عمر الكون لتوفير عدد كاف من المحاولات يجعلها
تحدث.
ملاحظات:
- هذه النسخة المطورة من البرنامج أسرع
من النسخة السابقة، حيث يمكنها تنفيذ حوالي 1.3 مليون محاولة في الثانية.. لكن لا
تعتمد على هذا، فهو لن يقلل من مليارات السنين المنتظرة للحصول على 100 صورة
متتابعة شيئا يذكر J
- أقصى عدد من الخانات العشرية سمحت للبرنامج
بعرضه في عمود نسبة التكرار، هو 15 خانة.. هذا معناه أن النسب المئوية الأصغر من
هذا والتي تحتاج خانات عشرية أكثر، سيتم تقريبها إلى صفر.. لكن لكي ترى هذا، يجب
أن تنتظر إلى أن يحدث تتابع أكثر من 50 صورة متتالية، وهو أمر يحتاج إلى ترك
البرنامج يعمل لحوالي 27 سنة متواصلة لكي يكون حدوثه محتملا!
- نظرا لأن النتائج لا تأتي بالترتيب، فمن الممكن
أن يحدث تتابع 10 صور قبل أن يحدث تتابع 9 صور، فقد ظهرت الحاجة لترتيب النتائج
(سابقا كنا نتجاهل النتيجة الأقصر لأننا نبحث عن النتائج التي تحوي أطول تتابع من
الصور).. لهذا أضفت للبرنامج الفئة SortableBindingList لاستخدامها كمصدر ربط مع جدول العرض، بحيث يمكن ترتيب النتائج
التي يعرضها.
- لكي يمكن تحديث عدد مرات تكرار كل نتيجة،
استخدمت قاموسا Dictionary،
مفتاحه هو عدد مرات تتابع الصور، وقيمته هي البيانات الخاصة بالنتيجة المحفوظة
كائن من نوع الفئة PictureInfo.. أي
أننا صرنا نتعامل مع قاموس من النوع:
Dictionary(Of Integer, PictureInfo)
هذا
القاموس لا يصلح كمصدر بيانات لجدول العرض، لهذا حصلنا منه على قائمة تصلح للربط
كالتالي:
Coins.PicsInfo.Values.ToList
حيث
إن الخاصية Values الخاصة
بالقاموس تعيد مجموعة Collection تحتوي
على كل القيم المحفوظة في القاموس (بدون المفاتيح).. لكن هذه المجموعة لا تصلح
أيضا كمصدر ربط، لهذا حولناها إلى قائمة باستخدام الوسيلة ToList.
وستجد
أننا أرسلنا التعبير السابق إلى حدث إنشاء الفئة SortableBindingList للحصول على قائمة قابلة للترتيب.