डबल हैशिंग

From Vigyanwiki
Revision as of 09:53, 11 July 2023 by alpha>Indicwiki (Created page with "डबल हैशिंग एक कंप्यूटर प्रोग्रामिंग तकनीक है जिसका उपयोग टकराव...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

डबल हैशिंग एक कंप्यूटर प्रोग्रामिंग तकनीक है जिसका उपयोग टकराव होने पर ऑफसेट के रूप में कुंजी के द्वितीयक हैश का उपयोग करके, हैश टकराव को हल करने के लिए हैश तालिकाओं में खुले पते के साथ संयोजन में किया जाता है। खुला संबोधन के साथ डबल हैशिंग एक टेबल पर एक शास्त्रीय डेटा संरचना है .

डबल हैशिंग तकनीक तालिका में एक सूचकांक के रूप में एक हैश मान का उपयोग करती है और तब तक बार-बार एक अंतराल को आगे बढ़ाती है जब तक कि वांछित मान स्थित न हो जाए, एक खाली स्थान न पहुंच जाए, या पूरी तालिका खोज न ली जाए; लेकिन यह अंतराल एक दूसरे, स्वतंत्र हैश फंकशन द्वारा निर्धारित किया जाता है। रैखिक जांच और द्विघात जांच के वैकल्पिक टकराव-रिज़ॉल्यूशन तरीकों के विपरीत, अंतराल डेटा पर निर्भर करता है, ताकि एक ही स्थान पर मैपिंग मानों में अलग-अलग बाल्टी अनुक्रम हों; यह बार-बार होने वाले टकरावों और क्लस्टरिंग के प्रभावों को कम करता है।

दो यादृच्छिक, समान और स्वतंत्र हैश फ़ंक्शन दिए गए हैं और , द मूल्य के लिए बकेट अनुक्रम में वां स्थान की हैश तालिका में बाल्टी है: आम तौर पर, और सार्वभौमिक हैश फ़ंक्शंस के एक सेट से चुने गए हैं; की रेंज के लिए चुना गया है और की एक सीमा होना . डबल हैशिंग एक यादृच्छिक वितरण का अनुमान लगाता है; अधिक सटीक रूप से, जोड़ी-वार स्वतंत्र हैश फ़ंक्शंस की संभावना उत्पन्न होती है कि चाबियों का कोई भी जोड़ा समान बकेट अनुक्रम का पालन करेगा।

एच का चयन2(के)

द्वितीयक हैश फ़ंक्शन कई विशेषताएं होनी चाहिए:

  • इससे कभी भी शून्य का सूचकांक प्राप्त नहीं होना चाहिए
  • इसे पूरी मेज पर घूमना चाहिए
  • यह गणना करने में बहुत तेज़ होना चाहिए
  • यह जोड़ी-वार स्वतंत्र होना चाहिए
  • की वितरण विशेषताएँ अप्रासंगिक हैं. यह एक यादृच्छिक-संख्या जनरेटर के समान है।
  • सभी |T| के लिए अपेक्षाकृत अभाज्य बनें।

व्यवहार में:

  • यदि विभाजन हैशिंग का उपयोग दोनों कार्यों के लिए किया जाता है, तो भाजक को अभाज्य के रूप में चुना जाता है।
  • यदि टी 2 की शक्ति है, तो पहली और आखिरी आवश्यकताएं आमतौर पर बनाकर पूरी की जाती हैं हमेशा विषम संख्या लौटाएं. इसका दुष्परिणाम यह है कि एक बर्बाद बिट के कारण टकराव की संभावना दोगुनी हो जाती है।[1]


विश्लेषण

होने देना संग्रहित तत्वों की संख्या हो , तब का लोड फैक्टर है . अर्थात्, यादृच्छिक रूप से, समान रूप से और स्वतंत्र रूप से दो सार्वभौमिक हैश फ़ंक्शन का चयन करके प्रारंभ करें और एक डबल हैशिंग टेबल बनाने के लिए . सभी तत्व डाल दिए गए हैं डबल हैशिंग का उपयोग करके और . एक चाबी दे दी , द -st हैश स्थान की गणना इसके द्वारा की जाती है:

होने देना निश्चित लोड फैक्टर है . ब्रैडफोर्ड और माइकल एन. कटेहाकिस[2] में असफल खोज के लिए जांचों की अपेक्षित संख्या दिखाई गई , अभी भी इन प्रारंभिक रूप से चुने गए हैश फ़ंक्शंस का उपयोग कर रहा है इनपुट के वितरण की परवाह किए बिना। हैश फ़ंक्शंस की जोड़ी-वार स्वतंत्रता पर्याप्त है।

ओपन एड्रेसिंग के अन्य सभी रूपों की तरह, डबल हैशिंग रैखिक हो जाती है क्योंकि हैश तालिका अधिकतम क्षमता तक पहुंचती है। सामान्य अनुमान टेबल लोडिंग को क्षमता के 75% तक सीमित करना है। अंततः, अन्य सभी ओपन एड्रेसिंग योजनाओं की तरह, बड़े आकार में पुनः प्रयास करना आवश्यक होगा।

वेरिएंट

पीटर डिलिंजर की पीएचडी थीसिस[3] बताते हैं कि डबल हैशिंग अवांछित समतुल्य हैश फ़ंक्शन उत्पन्न करता है जब हैश फ़ंक्शन को एक सेट के रूप में माना जाता है, जैसा कि ब्लूम फिल्टर में होता है: यदि और , तब और हैश के सेट समरूप हैं। इससे टकराव की संभावना अपेक्षा से दोगुनी हो जाती है .

इसके अतिरिक्त बड़ी संख्या में अधिकतर ओवरलैपिंग हैश सेट भी हैं; अगर और , तब , और अतिरिक्त हैश मानों की तुलना करना (सीमा का विस्तार करना)। ) कोई मदद नहीं है.

ट्रिपल हैशिंग

एक द्विघात पद जोड़ना [4] (एक त्रिकोणीय संख्या) या सम (ट्रिपल हैशिंग)[5] हैश फ़ंक्शन में हैश फ़ंक्शन में कुछ हद तक सुधार होता है[4]लेकिन इस समस्या को ठीक नहीं करता; अगर:

और

तब


उन्नत डबल हैशिंग

एक घन फ़ंक्शन जोड़ना [4]या (एक चतुष्फलकीय संख्या),[1] समस्या का समाधान करता है, एक तकनीक जिसे एन्हांस्ड डबल हैशिंग के रूप में जाना जाता है। इसकी गणना आगे का अंतर द्वारा कुशलतापूर्वक की जा सकती है:

struct key;	/// Opaque
/// Use other data types when needed. (Must be unsigned for guaranteed wrapping.)
extern unsigned int h1(struct key const *), h2(struct key const *);

/// Calculate k hash values from two underlying hash functions
/// h1() and h2() using enhanced double hashing.  On return,
///     hashes[i] = h1(x) + i*h2(x) + (i*i*i - i)/6.
/// Takes advantage of automatic wrapping (modular reduction)
/// of unsigned types in C.
void ext_dbl_hash(struct key const *x, unsigned int hashes[], unsigned int n)
{
	unsigned int a = h1(x), b = h2(x), i;

	for (i = 0; i < n; i++) { 
		hashes[i] = a;
		a += b;	// Add quadratic difference to get cubic
		b += i;	// Add linear difference to get quadratic
		       	// i++ adds constant difference to get linear
	}
}

टकराव की समस्या को सुधारने के अलावा, बढ़ी हुई डबल हैशिंग भी डबल-हैशिंग के संख्यात्मक प्रतिबंधों को हटा देती है के गुण, एक हैश फ़ंक्शन को संपत्ति के समान अनुमति देता है (लेकिन अभी भी स्वतंत्र है) इस्तेमाल किया जाएगा।[1]


यह भी देखें

संदर्भ

  1. 1.0 1.1 1.2 Dillinger, Peter C.; Manolios, Panagiotis (November 15–17, 2004). Bloom Filters in Probabilistic Verification (PDF). 5h International Conference on Formal Methods in Computer Aided Design (FMCAD 2004). Austin, Texas. CiteSeerX 10.1.1.119.628. doi:10.1007/978-3-540-30494-4_26.
  2. Bradford, Phillip G.; Katehakis, Michael N. (April 2007), "A Probabilistic Study on Combinatorial Expanders and Hashing" (PDF), SIAM Journal on Computing, 37 (1): 83–111, doi:10.1137/S009753970444630X, MR 2306284, archived from the original (PDF) on 2016-01-25.
  3. Dillinger, Peter C. (December 2010). Adaptive Approximate State Storage (PDF) (PhD thesis). Northeastern University. pp. 93–112.
  4. 4.0 4.1 4.2 Kirsch, Adam; Mitzenmacher, Michael (September 2008). "Less Hashing, Same Performance: Building a Better Bloom Filter" (PDF). Random Structures and Algorithms. 33 (2): 187–218. CiteSeerX 10.1.1.152.579. doi:10.1002/rsa.20208.
  5. Alternatively defined with the triangular number, as in Dillinger 2004.


बाहरी संबंध