8

मेरे पास एक ऐसी प्रणाली है जिसके लिए किसी ऑब्जेक्ट का प्रतिनिधित्व करने के लिए एक अद्वितीय 6-अंकीय कोड की आवश्यकता होती है, और मैं उन्हें उत्पन्न करने के लिए एक अच्छा एल्गोरिदम सोचने की कोशिश कर रहा हूं।टिन्यूरल-शैली अद्वितीय कोड: टकराव को रोकने के लिए संभावित एल्गोरिदम

  • मैं
    • आधार -20 64 की अनुमति देता है (भ्रम और शरारती शब्द रोकने के लिए कोई टोपी, संख्या, स्वर, या एल) एक आधार -20 प्रणाली का उपयोग कर रहा: यहाँ पूर्व reqs हैं मिलियन संयोजन
  • मैं एक बार में संभावित रूप से 5-10 हजार प्रविष्टियों को सम्मिलित कर दूंगा, इसलिए सिद्धांत में मैं थोक आवेषण का उपयोग करूंगा, जिसका मतलब है कि एक अद्वितीय कुंजी का उपयोग संभवतः कुशल या सुंदर नहीं होगा (विशेष रूप से यदि वहां कई टकराव होने लगते हैं)
  • यह qu से बाहर नहीं है तो वहाँ टकराव के बहुत सारे के लिए एक उच्च क्षमता
  • मुझे यकीन है कि कोड गैर-निरंतर

मैं एक विचार है कि लग रहा था जैसे कि यह काम करेगा था कर रहे हैं बनाना चाहते है estion संयोजनों का 10% को भरने के लिए है, लेकिन मैं गणित में पर्याप्त रूप से पर्याप्त नहीं हूं कि इसे कैसे कार्यान्वित किया जाए: यदि मैं 0 से शुरू करता हूं और एन द्वारा वृद्धि करता हूं, तो बेस -20 में कनवर्ट करें, ऐसा लगता है कि एन के लिए कुछ मूल्य होना चाहिए जो मुझे प्रत्येक मान को गिनने देता है किसी भी दोहराने से पहले 0-63,999,999।

उदाहरण के लिए

, एन = 3 (ताकि 10 आधुनिक 3) का उपयोग करते हुए 9 के माध्यम से 0 से जा रहा: 0, 3, 6, 9, 2, 5, 8, 1, 4, 7

वहाँ कुछ है कुछ बड़ी संख्या के लिए एन के मानों को समझने के लिए जादू गणित विधि जो दोहराने के बिना पूरी श्रृंखला के माध्यम से गिनने में सक्षम है? आदर्श रूप से, जो नंबर मैं चुनता हूं वह सेट के चारों ओर कूदने जैसा होगा कि यह स्पष्ट नहीं था कि एक पैटर्न था, लेकिन मुझे यकीन नहीं है कि यह कितना संभव है।

वैकल्पिक रूप से, एक हैशिंग एल्गोरिदम जो 0-64 मिलियन मानों के लिए विशिष्टता की गारंटी देता है, लेकिन मैं यह जानना चाहता हूं कि यह संभव है या नहीं।

+0

प्राइम नंबर ... मुझे लगता है कि मैं वास्तव में गणित में बुरा हूं; यह हिंडसाइट में स्पष्ट प्रतीत होता है। प्रत्येक उत्तर देने वाले का धन्यवाद। मैंने पहले जवाब देने के लिए phantombrain को श्रेय दिया। –

+1

चूंकि आप tinyurl का उल्लेख करते हैं, इस प्रश्न का मेरा उत्तर लागू हो सकता है: http://stackoverflow.com/questions/1051949/map-incrementing-integer-range-to-six-digit-base-26-max-but- अनुमानित रूप से/1052896 # 1052896 – FogleBird

+0

कोड को दोबारा निरंतर बनाने के लिए मत भूलना। – Beta

उत्तर

8

आपको केवल एक ऐसी संख्या है जो आपकी मुख्य स्थान के साथ कोई कारक साझा नहीं करती है। सबसे महत्वपूर्ण मूल्य एक प्राइम नंबर का उपयोग करना है। आप बड़े प्राइम्स के लिए Google पर जा सकते हैं, या http://primes.utm.edu/lists/small/10000.txt

0

मेरा गणित थोड़ा जंगली है, लेकिन मुझे लगता है कि आपको यह सुनिश्चित करने की आवश्यकता है कि एन और 64 मिलियन का जीसीएफ 1 है। मैं एक प्रमुख नंबर (हालांकि समान रूप से 64 मिलियन में विभाजित नहीं होता है) हालांकि।

1

कोई भी प्रमुख संख्या जो अनुक्रम की लंबाई का कारक नहीं है, दोहराने के बिना अनुक्रम को फैलाने में सक्षम होना चाहिए। 64000000 के लिए, इसका मतलब है कि आपको 2 या 5 का उपयोग नहीं करना चाहिए। बेशक, यदि आप नहीं चाहते हैं कि वे लगातार उत्पन्न हो जाएं, तो उन्हें 2 या 5 अलग करना संभवतः शायद बहुत अच्छा नहीं है। मुझे व्यक्तिगत रूप से नंबर 73973 पसंद है! ,

खैर केवल तभी अभाज्य संख्या 64 मिलियन विभाजित नहीं होता: http://en.wikipedia.org/wiki/Universally_Unique_Identifier

-3

पहिया बदलने मत करो। इसलिए, प्रश्नकर्ता के उद्देश्यों के लिए, 2 या 5 जैसी संख्या शायद सलाह नहीं दी जाएगी।

+1

UUID बीस वर्ण का छः वर्ण कोड होने में विफल रहता है वर्णमाला। – Karl

+0

मैंने यूयूआईडी का उपयोग नहीं किया, मेरा मतलब यूयूआईडी से सीखना था। – Pyrolistical

1

maximum length sequences का उपयोग करके, उदाहरण के बिना प्राइम का उपयोग किए बिना समान परिणाम (बिना दोहराने के मूल्यों के पूरे सेट पर कूदना), एक और तरीका प्राप्त करने के लिए एक और तरीका है, जिसे आप विशेष रूप से निर्मित शिफ्ट रजिस्टरों का उपयोग करके उत्पन्न कर सकते हैं।

संबंधित मुद्दे