توليد أرقام عشوائية مجموعها إلى قيمة محددة مسبقًا
في هذا السياق، نهدف إلى إنشاء قائمة من الأرقام العشوائية الزائفة التي تضيف بشكل جماعي حتى قيمة محددة سلفا. تتضمن إحدى الطرق إنشاء رقم بشكل عشوائي ضمن نطاق محدد، وطرحه من الإجمالي، وتكرار هذه العملية حتى يساوي المجموع القيمة المطلوبة. ومع ذلك، فإن هذا النهج يفضل الرقم الذي تم إنشاؤه لأول مرة من حيث مساهمته في المجموع.
لضمان التوحيد، تم تطوير حل أكثر تطورا:
import random
def constrained_sum_sample_pos(n, total):
"""Return a randomly chosen list of n positive integers summing to total.
Each such list is equally likely to occur."""
dividers = sorted(random.sample(range(1, total), n - 1))
return [a - b for a, b in zip(dividers [total], [0] dividers)]
تقوم هذه الطريقة بإنشاء قائمة من الأعداد الصحيحة الموجبة التي يصل مجموعها إلى القيمة المستهدفة. المفهوم الأساسي هو أنه من المرجح أن يتم إنشاء كل مجموعة ممكنة من الأرقام. بالإضافة إلى ذلك، يعد توسيع هذه التقنية لتشمل مجاميع مختلفة وأعدادًا متفاوتة من الأرقام العشوائية أمرًا واضحًا.
على سبيل المثال، إذا وضعنا n على 4 والإجمالي على 40، فقد نحصل على المخرجات التالية: [4، 4، 25 ، 7]. من المهم ملاحظة أن كل عنصر في هذه القائمة، عند جمعه، ينتج القيمة المحددة مسبقًا وهي 40.
للسماح بالأعداد الصحيحة غير الموجبة، يتوفر تعديل:
def constrained_sum_sample_nonneg(n, total):
"""Return a randomly chosen list of n nonnegative integers summing to total.
Each such list is equally likely to occur."""
return [x - 1 for x in constrained_sum_sample_pos(n, total n)]
من خلال زيادة كل قيمة بمقدار واحد، يمكننا إنشاء قائمة من الأعداد الصحيحة غير السالبة التي تضيف ما يصل إلى الإجمالي المطلوب.
تضمن هذه الطريقة أن كل مجموعة ممكنة، بغض النظر عما إذا كانت الأرقام موجبة أم غير سالبة، لها احتمالية متساوية للتوليد. بفضل تنفيذها سهل الاستخدام وتعدد الاستخدامات عبر سيناريوهات مختلفة، أصبحت constrained_sum_sample_pos وconstrained_sum_sample_nonneg جزءًا لا يتجزأ من مهام إنشاء الأرقام العشوائية في Python.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3