سؤال

لدي نظام يتطلب رمز فريد من 6 أرقام لتمثيل كائن، وأحاول التفكير في خوارزمية جيدة لتوليدها. فيما يلي Requs:

  • أنا أستخدم نظام قاعدة 20 (بدون قبعات أو أرقام أو حروف العلة أو ل لمنع الارتباك والكلمات المشاغب)
    • يسمح Base-20 ب 64 مليون مجموعة
  • سأكون إدراج 5-10 آلاف مداخل في وقت واحد، لذا من الناحية النظرية، كنت أستخدم إدراج السائبة، مما يعني استخدام مفتاح فريد ربما لن يكون فعالا أو جميلا (خاصة إذا بدأ هناك الكثير من التصادم)
  • ليس بعيدا عن السؤال لملء 10٪ من المجموعات، لذلك هناك إمكانات عالية للكثير من الاصطدام
  • أريد أن أتأكد من أن الرموز غير متتالية

كان لدي فكرة بدا وكأنه سيعمل، لكنني لست جيدا بما فيه الكفاية في الرياضيات لمعرفة كيفية تنفيذها: إذا بدأت في 0 وزيادة N، ثم تحويل إلى Base-20، يبدو أنه يجب أن يكون هناك يكون بعض القيمة ل N يتيح لي حساب كل قيمة من 0-63،999،999 قبل تكرار أي.

على سبيل المثال، الذهاب من 0 إلى 9 باستخدام N = 3 (لذلك 10 وزارة الدفاع 3): 0، 3، 6، 9، 2، 5، 8، 1، 4، 7.

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

بدلا من ذلك، فإن خوارزمية التجزئة التي تضمن تفرد القيم 0-64 مليون سيعمل، لكنني غبي للغاية لمعرفة ما إذا كان ذلك ممكنا.

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

المحلول

كل ما تحتاجه هو رقم يشارك أي عوامل مع المساحة الرئيسية الخاصة بك. أسهل قيمة هي استخدام رقم رئيسي. يمكنك جوجل من أجل الأعداد الأولية الكبيرة، أو الاستخدام http://primes.utm.edu/lists/small/10000.txt.

نصائح أخرى

يجب أن يكون أي رقم أولي ليس عاملا في طول التسلسل قادرا على تمكين التسلسل دون تكرار. مقابل 64000000، وهذا يعني أنك يجب أن لا تستخدم 2 أو 5. بالطبع، إذا كنت لا تريد أن يتم إنشاؤها على التوالي، فإن إنشاءها 2 أو 5 بصرف النظر ربما ليست جيدة جدا. أنا شخصيا أحب الرقم 73973!

هناك طريقة أخرى للحصول على نتيجة مماثلة (القفز فوق مجموعة كاملة من القيم دون تكرار، nonconsequtive)، دون استخدام الأعداد الأولية - باستخدام أعلى تسلسل الطول, ، والتي يمكنك توليدها باستخدام سجلات التحول المبنية بشكل خاص.

رياضيتي صدئ بعض الشيء، لكنني أعتقد أنك بحاجة فقط إلى التأكد من أن GCF من N و 64 مليون هو 1. سأذهب مع رقم رئيسي (لا ينقسم بالتساوي إلى 64 مليون) فقط في حالة.

nick لويس:

حسنا، فقط إذا كان الرقم الأول لا يقسم 64 مليون دولار. لذلك، لأغراض الأسئلة، من المحتمل أن لا ينصح أرقام مثل 2 أو 5.

لا إعادة اختراع العجلة:http://en.wikipedia.org/wiki/universally_unique_derifier.

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