سؤال

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

import uuid
unique_str = str(uuid.uuid4())
double_str = ''.join([str(uuid.uuid4()), str(uuid.uuid4())])

هو double_str سلسلة مربعة فريدة من نوعها unique_str أو مجرد مبلغ أكثر فريدة من نوعه؟ أيضا ، هل هناك أي آثار سلبية في القيام بشيء مثل هذا (مثل بعض موقف مشكلة عيد الميلاد ، إلخ)؟ قد يبدو هذا جاهلاً ، لكنني ببساطة لن أعرف لأن الرياضيات الخاصة بي تمتد الجبر 2 في أحسن الأحوال.

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

المحلول

ال uuid4 تقوم الوظيفة بإرجاع uuid تم إنشاؤها من 16 بايت عشوائي وهي موجودة الى ابعد حد من غير المرجح أن تنتج تصادمًا ، لدرجة أنك ربما لا ينبغي أن تقلق بشأنه.

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

إذا كنت تستخدم التنفيذ الافتراضي random.seed(None) يمكنك أن ترى في مصدر يتم استخدام 16 بايت فقط من العشوائية لتهيئة مولد الأرقام العشوائية ، لذلك هذه مشكلة يجب عليك حلها أولاً. أيضًا ، إذا كان نظام التشغيل لا يوفر مصدرًا للعشوائية ، فسيتم استخدام وقت النظام وهو ليس عشوائيًا على الإطلاق.

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

alt text

أين d هو 2**(16*8) للحصول على uuid تم إنشاؤه عشوائيا و 2**(16*2*8) مع نهجك المقترح. الجذر التربيعي في الصيغة يرجع بالفعل إلى مفارقة عيد ميلاد. ولكن إذا قمت بعملها ، فيمكنك رؤية ذلك إذا قمت بتوسيع نطاق القيم d مع الحفاظ p ثابت ثم يمكنك أيضا مربع n.

نصائح أخرى

نظرًا لأن UUID4 يستند إلى مولد رقم عشوائي زائفة ، فإن وصفه مرتين لن يربط كمية "التفرد" (وقد لا تضيف أي تفرد على الإطلاق).

أنظر أيضا متى يجب أن أستخدم uuid.uuid1 () مقابل uuid.uuid4 () في بيثون؟

يعتمد ذلك على مولد الأرقام العشوائية ، لكنه تفرد تقريبًا.

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