मैं गुड्स/यूआईडी के मानवीय पठनीय विकल्पों पर एक छोटा सा लेख लिख रहा हूं, उदाहरण के लिए जो यूआरएल हैश के लिए TinyURL पर उपयोग किए जाते हैं (जिन्हें अक्सर पत्रिकाओं में मुद्रित किया जाता है, इसलिए संक्षिप्त होने की आवश्यकता होती है)।अपनी खुद की Tinyurl शैली बनाना uid
मैं उत्पन्न करने वाला सरल यूआईडी है - 6 वर्ण: या तो लोअरकेस अक्षर (ए-जेड) या 0-9।
"मेरी गणना कप्तान के अनुसार", यह 6 पारस्परिक रूप से अनन्य घटनाओं की है, हालांकि संघर्ष की संभावना की गणना करना पी (ए या बी) = पी (ए) + पी (बी) से थोड़ा कठिन हो जाता है, जैसा कि जाहिर है संख्याओं और नीचे दिए गए कोड से, आप देख सकते हैं कि यह 50/50 का उपयोग करके किसी संख्या या अक्षर का उपयोग करना है या नहीं।
मुझे संघर्ष दर में रूचि है और यदि नीचे दिया गया कोड अनुमानित संघर्ष दर का यथार्थवादी सिमुलेशन है जो आपको हैश उत्पन्न करने से प्राप्त होता है। औसतन मुझे प्रति मिलियन 40-50 संघर्ष मिलते हैं, हालांकि ध्यान में रखते हुए कि यूआईडी एक बार में दस लाख बार उत्पन्न नहीं किया जाएगा, लेकिन शायद एक मिनट में लगभग 10-1000 बार।
हर बार संघर्ष की संभावना क्या है, और क्या कोई इसे करने का बेहतर तरीका सुझा सकता है?
static Random _random = new Random();
public static void main()
{
// Size of the key, 6
HashSet<string> set = new HashSet<string>();
int clashes = 0;
for (int n=0;n < 1000000;n++)
{
StringBuilder builder = new StringBuilder();
for (int i =0;i < 7;i++)
{
if (_random.NextDouble() > 0.5)
{
builder.Append((char)_random.Next(97,123));
}
else
{
builder.Append(_random.Next(0,9).ToString());
}
}
if (set.Contains(builder.ToString()))
{
clashes++;
Console.WriteLine("clash: (" +n+ ")" +builder.ToString());
}
set.Add(builder.ToString());
_random.Next();
//Console.Write(builder.ToString());
}
Console.WriteLine("Clashes: " +clashes);
Console.ReadLine();
}
अद्यतन: Here's the resulting article इस सवाल
से मैं सच में दो सवाल पूछा यहाँ तो मैं धोखा दे रहा था। जवाब मैं बाद में राकर था, हालांकि स्क्लिवज़ भी दूसरे भाग (एक वैकल्पिक) का जवाब है। क्या डेटाबेस में एक कस्टम अद्वितीय आईडी जेनरेटर बनाना संभव है, या यह क्लाइंट साइड होगा (जो 2 संभवतः पहले संभव होगा)?
सामान्य विचार जो मैं बाद में डेटाबेस या अन्य स्टोर्स में आईडी का उपयोग कर रहा था जिसका उपयोग फ़ोन या मुद्रित सामग्री द्वारा किया जा सकता है, एक विशाल 16 बाइट गाइड नहीं।
अद्यतन 2: मैं (बजाय 2 स्वतंत्र लोगों के ऊपर दो परस्पर अनन्य घटनाओं के लिए सूत्र डाल एक 'एक' पहली बार मतलब यह नहीं है कि आप एक 'एक' दूसरी बार नहीं मिल सकता है हो रही है के रूप में)। पी (ए और बी) = पी (ए) एक्स पी (बी)
आईडी को हैश करने का बुरा विचार - आपको पंक्ति को देखने के लिए वापस अनचाहे आईडी प्राप्त करने की आवश्यकता है। Sklivvz जवाब देखें। – MSalters
मुझे नहीं लगता कि आपके गणित काफी सही हैं। ओपी का डेटा प्रति मिलियन ~ 50 टकराव सुझाता है, जबकि आप 1700 (1000000 का 0.17%) की भविष्यवाणी करते हैं। शायद मुझे कुछ याद आ रहा है? – freespace
मेरा मतलब वास्तविक हश नहीं था; मैं बस Sklivvz के जवाब का पालन करना था। मैं इसे स्पष्ट करने के लिए अपना उत्तर संपादित करूंगा। – Randy