هل سبق لك أن تساءلت عن كيفية عمل Math.random()؟ ما هو الرقم العشوائي وكيف يتم الحصول عليه؟ تخيل سؤالاً في المقابلة - اكتب منشئ الأرقام العشوائية في سطرين من التعليمات البرمجية. إذن ما هو الحادث وهل من الممكن التنبؤ به؟

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

ستكون هذه المادة مفيدة لجميع مطوري الواجهة الأمامية ومطوري Node.js الذين هم في طليعة التكنولوجيا ويريدون الدخول في مشروع/بدء تشغيل blockchain، حيث يتم طرح أسئلة على مطوري الواجهة الأمامية حول الأمان والتشفير، على على الأقل على المستوى الأساسي.

مولد أرقام عشوائية زائفة ومولد أرقام عشوائية

من أجل الحصول على شيء عشوائي، نحتاج إلى مصدر للإنتروبيا، مصدر لبعض الفوضى التي سنستخدمها لتوليد العشوائية.

يستخدم هذا المصدر لتجميع الإنتروبيا ثم الحصول منه على قيمة أولية (بذرة)، وهي ضرورية لمولدات الأرقام العشوائية (RNG) لتوليد أرقام عشوائية.

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

الانتروبيا هي مقياس للفوضى. إنتروبيا المعلومات هي مقياس لعدم اليقين أو عدم القدرة على التنبؤ بالمعلومات.
اتضح أنه من أجل إنشاء تسلسل عشوائي زائف، نحتاج إلى خوارزمية تقوم بإنشاء تسلسل معين بناءً على صيغة معينة. ولكن مثل هذا التسلسل يمكن التنبؤ به. ومع ذلك، دعونا نتخيل كيف يمكننا كتابة مولد الأرقام العشوائية الخاص بنا إذا لم يكن لدينا Math.random()

يحتوي PRNG على بعض الخوارزميات التي يمكن إعادة إنتاجها.
RNG هي عملية الحصول على أرقام بالكامل من نوع ما من الضوضاء، والقدرة على حسابها تميل إلى الصفر. في الوقت نفسه، يحتوي RNG على خوارزميات معينة لموازنة التوزيع.

لقد توصلنا إلى خوارزمية PRNG الخاصة بنا

مولد الأرقام العشوائية الزائفة (PRNG) هو خوارزمية تولد سلسلة من الأرقام التي تكون عناصرها مستقلة تقريبًا عن بعضها البعض وتخضع لتوزيع معين (عادةً ما يكون موحدًا).
يمكننا أن نأخذ سلسلة من بعض الأرقام ونأخذ معامل الرقم منها. أبسط مثال يتبادر إلى الذهن. نحن بحاجة إلى التفكير في التسلسل الذي يجب اتخاذه والوحدة النمطية منه. إذا قمت مباشرة من 0 إلى N والمعامل 2، فستحصل على مولد 1 و0:

الوظيفة* rand() ( const n = 100; const mod = 2; Let i = 0; while (true) ( ​​​​yield i % mod; if (i++ > n) i = 0; ) ) Let i = 0; for (let x of rand()) ( if (i++ > 100)break; console.log(x); )
تولد هذه الوظيفة التسلسل 01010101010101... ولا يمكن حتى تسميتها بالعشوائية الزائفة. لكي يكون المولد عشوائيًا، يجب أن يجتاز اختبار البت التالي. لكن ليس لدينا مثل هذه المهمة. ومع ذلك، حتى بدون أي اختبارات يمكننا التنبؤ بالتسلسل التالي، مما يعني أن مثل هذه الخوارزمية ليست مناسبة، لكننا في الاتجاه الصحيح.

ماذا لو أخذنا بعض التسلسلات المعروفة ولكن غير الخطية، على سبيل المثال الرقم PI. وكقيمة للوحدة، لن نأخذ 2، بل شيئًا آخر. يمكنك حتى التفكير في القيمة المتغيرة للوحدة. يعتبر تسلسل الأرقام في Pi عشوائيًا. يمكن للمولد أن يعمل باستخدام أرقام Pi بدءًا من نقطة غير معروفة. مثال على هذه الخوارزمية، مع تسلسل قائم على PI ووحدة نمطية متغيرة:

Const Vector = [...Math.PI.toFixed(48).replace("."،"")]; الدالة* rand() ( for (let i=3; i<1000; i++) { if (i >99) ط = 2؛ ل (دع ن = 0؛ ن لكن في JS، لا يمكن عرض رقم PI إلا حتى 48 رقمًا وليس أكثر. لذلك، لا يزال من السهل التنبؤ بمثل هذا التسلسل، وكل تشغيل لمثل هذا المولد سينتج دائمًا نفس الأرقام. لكن المولد الخاص بنا بدأ بالفعل في عرض الأرقام من 0 إلى 9.

حصلنا على مولد للأرقام من 0 إلى 9، لكن التوزيع غير متساوٍ للغاية وسيولد نفس التسلسل في كل مرة.

لا يمكننا أن نأخذ الرقم Pi، بل الزمن في التمثيل العددي ونعتبر هذا الرقم بمثابة سلسلة من الأرقام، ولكي نضمن عدم تكرار التسلسل في كل مرة، سنقرأه من النهاية. في المجمل، ستبدو خوارزمية PRNG الخاصة بنا كما يلي:

الدالة* rand() ( Let newNumVector = () => [...(+تاريخ جديد)+""].reverse(); Let Vector = newNumVector(); Let i=2; while (true) ( ​​​​إذا (i++ > 99) i = 2؛ دع n=-1؛ بينما (++n< vector.length) yield (vector[n] % i); vector = newNumVector(); } } // TEST: let i = 0; for (let x of rand()) { if (i++ >100) استراحة؛ console.log(x)
يبدو هذا بالفعل وكأنه منشئ أرقام عشوائية زائفة. ونفس Math.random() هي PRNG، وسنتحدث عنها بعد قليل. علاوة على ذلك، في كل مرة نحصل على رقم أول مختلف.

في الواقع، باستخدام هذه الأمثلة البسيطة يمكنك فهم كيفية عمل مولدات الأرقام العشوائية الأكثر تعقيدًا.وهناك أيضًا خوارزميات جاهزة. كمثال، دعونا نلقي نظرة على واحدة منها — هذا هو التطابق الخطي PRNG (LCPRNG).

التطابق الخطي PRNG

تعد PRNG (LCPRNG) المتطابقة الخطية طريقة شائعة لتوليد أرقام عشوائية زائفة. إنها ليست قوية من الناحية التشفيرية. تتكون هذه الطريقة من حساب شروط التسلسل الخطي المتكرر modulo لبعض الأعداد الطبيعية m، المعطاة بالصيغة. يعتمد التسلسل الناتج على اختيار رقم البداية   —   أي. بذرة. مع قيم أولية مختلفة، يتم الحصول على تسلسلات مختلفة من الأرقام العشوائية. مثال على تنفيذ مثل هذه الخوارزمية في JavaScript:

كونست أ = 45؛ ثابت ج = 21؛ ثابت م = 67؛ فار البذور = 2؛ const rand = () => بذرة = (أ * بذرة + ج) % م؛ من أجل (دع i = 0؛ i<30; i++) console.log(rand())
تستخدم العديد من لغات البرمجة LCPRNG (ولكن ليس هذه الخوارزمية بالضبط (!)).

وكما ذكر أعلاه، يمكن التنبؤ بمثل هذا التسلسل. فلماذا نحتاج PRNG؟ إذا تحدثنا عن الأمان، فإن PRNG يمثل مشكلة. إذا تحدثنا عن مهام أخرى، فيمكن أن تكون هذه الخصائص ميزة إضافية. على سبيل المثال، بالنسبة للعديد من المؤثرات الخاصة والرسوم المتحركة الرسومية، قد تحتاج إلى الاتصال بشكل عشوائي بشكل متكرر. وهنا تكمن أهمية توزيع المعاني والأداء! لا يمكن للخوارزميات الآمنة أن تتباهى بالسرعة.

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

كيف تعمل Math.random()

يُرجع الأسلوب Math.random() رقم الفاصلة العائمة شبه العشوائي من النطاق = crypto.getRandomValues(new Uint8Array(1)); console.log(rvalue)
ولكن، على عكس Math.random() PRNG، فإن هذه الطريقة تستهلك الكثير من الموارد. الحقيقة هي أن هذا المولد يستخدم مكالمات النظام في نظام التشغيل للوصول إلى مصادر الإنتروبيا (عنوان Mac، وحدة المعالجة المركزية، درجة الحرارة، إلخ...).

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

تعليمات مولد الأرقام عبر الإنترنت (العشوائي):

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

لعرض النتيجة، يمكنك استخدام محددات مختلفة: الفاصلة المنقوطة والفاصلة والمسافة. بالإضافة إلى ذلك، قد يحدث التكرار. سيسمح لك خيار "استبعاد التكرارات" بالتخلص من التكرارات. يمكنك أيضًا إرسال رابط للحسابات التي تم إجراؤها عبر برنامج المراسلة أو البريد الإلكتروني عن طريق نسخ "رابط النتيجة".

الرجاء مساعدة الخدمة بنقرة واحدة:أخبر أصدقائك عن المولد!

مولد الأرقام عبر الإنترنت بنقرة واحدة

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

في بعض الأحيان يكون من الضروري الحصول على عدد معين من الأرقام العشوائية مرة واحدة. على سبيل المثال، تريد ملء بطاقة يانصيب "4 من 35"، واثقًا من الصدفة. يمكنك التحقق مما يلي: إذا رميت عملة معدنية 32 مرة، ما هو احتمال ظهور 10 عكسات على التوالي (قد يتم تعيين الرقمين 0 و1 للصورة/الكتابة)؟

رقم عشوائي لتعليم الفيديو عبر الإنترنت - الموزع العشوائي

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

لتوليد أرقام عشوائية في نطاق تردد معين:

  • حدد نطاقًا؛
  • تحديد عدد الأرقام العشوائية؛
  • تعمل وظيفة "فاصل الأرقام" على تحسين جمالية العرض وسهولة عرضه؛
  • إذا لزم الأمر، قم بتمكين/تعطيل التكرار باستخدام مربع الاختيار؛
  • انقر فوق الزر "إنشاء".

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

لدينا سلسلة من الأرقام تتكون من عناصر مستقلة عمليا تخضع لتوزيع معين. وكقاعدة عامة، التوزيع الموحد.

يمكنك إنشاء أرقام عشوائية في Excel بطرق وأساليب مختلفة. دعونا نفكر فقط في الأفضل منهم.

دالة الأرقام العشوائية في Excel

  1. تقوم الدالة RAND بإرجاع رقم حقيقي عشوائي وموزع بشكل موحد. سيكون أقل من 1، أكبر من أو يساوي 0.
  2. تقوم الدالة RANDBETWEEN بإرجاع عدد صحيح عشوائي.

دعونا نلقي نظرة على استخدامها مع الأمثلة.

أخذ عينات من الأرقام العشوائية باستخدام RAND

لا تتطلب هذه الدالة أي وسائط (RAND()).

لإنشاء رقم حقيقي عشوائي في النطاق من 1 إلى 5، على سبيل المثال، استخدم الصيغة التالية: =RAND()*(5-1)+1.

يتم توزيع الرقم العشوائي الذي تم إرجاعه بشكل موحد عبر الفاصل الزمني.

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

  1. انقر على الخلية التي تحتوي على رقم عشوائي.
  2. في شريط الصيغة، حدد الصيغة.
  3. اضغط على F9. وأدخل.

دعونا نتحقق من توحيد توزيع الأرقام العشوائية من العينة الأولى باستخدام الرسم البياني للتوزيع.


نطاق القيم الرأسية هو التردد. أفقي - "جيوب".



دالة RANDBETWEEN

بناء جملة الدالة RANDBETWEEN هو (الحد الأدنى؛ الحد الأعلى). يجب أن تكون الوسيطة الأولى أقل من الثانية. وإلا فإن الوظيفة سوف ترمي خطأ. من المفترض أن تكون الحدود أعدادًا صحيحة. تتجاهل الصيغة الجزء الكسري.

مثال لاستخدام الدالة:

أرقام عشوائية بدقة 0.1 و 0.01:

كيفية إنشاء مولد أرقام عشوائية في إكسيل

لنقم بإنشاء مولد أرقام عشوائي يولد قيمة من نطاق معين. نستخدم صيغة مثل: =INDEX(A1:A10,INTEGER(RAND()*10)+1).

لنقم بإنشاء مولد أرقام عشوائي في النطاق من 0 إلى 100 في خطوات من 10.

تحتاج إلى تحديد قيمتين عشوائيتين من قائمة القيم النصية. باستخدام الدالة RAND، نقوم بمقارنة القيم النصية في النطاق A1:A7 بأرقام عشوائية.

دعنا نستخدم وظيفة INDEX لتحديد قيمتين نصيتين عشوائيتين من القائمة الأصلية.

لتحديد قيمة عشوائية واحدة من القائمة، استخدم الصيغة التالية: =INDEX(A1:A7,RANDBETWEEN(1,COUNT(A1:A7))).

التوزيع الطبيعي مولد رقم عشوائي

تنتج الدالتان RAND وRANDBETWEEN أرقامًا عشوائية ذات توزيع موحد. يمكن لأي قيمة لها نفس الاحتمال أن تقع في الحد الأدنى للنطاق المطلوب وفي النطاق العلوي. وهذا يؤدي إلى انتشار كبير من القيمة المستهدفة.

يشير التوزيع الطبيعي إلى أن معظم الأرقام التي تم إنشاؤها قريبة من الرقم المستهدف. دعونا نضبط صيغة RANDBETWEEN وننشئ مصفوفة بيانات ذات توزيع عادي.

تكلفة المنتج X 100 روبل. الدفعة المنتجة بأكملها تتبع التوزيع الطبيعي. يتبع المتغير العشوائي أيضًا التوزيع الاحتمالي الطبيعي.

في ظل هذه الظروف، متوسط ​​قيمة النطاق هو 100 روبل. لنقم بإنشاء مصفوفة وإنشاء رسم بياني بتوزيع طبيعي بانحراف معياري قدره 1.5 روبل.

نستخدم الدالة: =NORMINV(RAND();100;1.5).

قام Excel بحساب القيم التي كانت ضمن نطاق الاحتمال. نظرًا لأن احتمال إنتاج منتج بتكلفة 100 روبل هو الحد الأقصى، فإن الصيغة تعرض قيمًا قريبة من 100 أكثر من غيرها.

دعنا ننتقل إلى رسم الرسم البياني. تحتاج أولاً إلى إنشاء جدول بالفئات. للقيام بذلك، نقوم بتقسيم المصفوفة إلى فترات:

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

يعمل مولد الأرقام العشوائية المقدم عبر الإنترنت على أساس مولد أرقام عشوائية زائفة مع توزيع موحد مدمج في JavaScript. يتم إنشاء الأعداد الصحيحة. افتراضيًا، يتم إخراج 10 أرقام عشوائية في النطاق 100...999، ويتم فصل الأرقام بمسافات.

الإعدادات الأساسية لمولد الأرقام العشوائية:

  • كمية من الأرقام
  • نطاق الأرقام
  • نوع الفاصل
  • تشغيل/إيقاف وظيفة إزالة التكرارات (الأرقام المكررة)

العدد الإجمالي محدد رسميًا بـ 1000، وبحد أقصى مليار. خيارات الفاصلة: مسافة، فاصلة، فاصلة منقوطة.

الآن أنت تعرف بالضبط أين وكيف تحصل على تسلسل مجاني للأرقام العشوائية في نطاق معين على الإنترنت.

خيارات التطبيق لمولد أرقام عشوائية

سيكون منشئ الأرقام العشوائية (RNG في JS مع توزيع موحد) مفيدًا لمتخصصي SMM وأصحاب المجموعات والمجتمعات على شبكات التواصل الاجتماعي Instagram وFacebook وVKontakte وOdnoklassniki لتحديد الفائزين في اليانصيب والمسابقات وسحوبات الجوائز.

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

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