रैखिक हैशिंग: Difference between revisions
(→LH*) |
|||
| Line 74: | Line 74: | ||
==डेटाबेस सिस्टम में अपनाना== | ==डेटाबेस सिस्टम में अपनाना== | ||
रैखिक हैशिंग का उपयोग [[बर्कले डीबी|बर्कले]] डेटाबेस सिस्टम (बीडीबी) में किया जाता है, जो बदले में कई सॉफ्टवेयर सिस्टम द्वारा उपयोग किया जाता है, सीएसीएम लेख से प्राप्त C कार्यान्वयन का उपयोग करके और पहली बार 1988 में एसमंड पिट द्वारा यूज़नेट पर प्रकाशित किया गया था। | रैखिक हैशिंग का उपयोग [[बर्कले डीबी|बर्कले]] डेटाबेस सिस्टम (बीडीबी) में किया जाता है, जो बदले में कई सॉफ्टवेयर सिस्टम द्वारा उपयोग किया जाता है, सीएसीएम लेख से प्राप्त C कार्यान्वयन का उपयोग करके और पहली बार 1988 में एसमंड पिट द्वारा यूज़नेट पर प्रकाशित किया गया था। | ||
== यह भी देखें == | |||
* [[विस्तार योग्य हैशिंग|एक्सटेन्डिब्ले हैसिंग]] | |||
* [[लगातार हैशिंग|कंसिस्टेंट हैसिंग]] | |||
* सर्पिल हैशिंग | |||
==संदर्भ== | ==संदर्भ== | ||
| Line 83: | Line 88: | ||
* [http://hackthology.com/an-in-memory-go-implementation-of-linear-hashing.html An in Memory Go Implementation with Explanation] | * [http://hackthology.com/an-in-memory-go-implementation-of-linear-hashing.html An in Memory Go Implementation with Explanation] | ||
* [https://github.com/KevinStern/index-cpp/blob/master/src/linear_hashing_table.h A C++ Implementation of Linear Hashtable which Supports Both Filesystem and In-Memory storage] | * [https://github.com/KevinStern/index-cpp/blob/master/src/linear_hashing_table.h A C++ Implementation of Linear Hashtable which Supports Both Filesystem and In-Memory storage] | ||
श्रेणी:खोज एल्गोरिदम | श्रेणी:खोज एल्गोरिदम | ||
श्रेणी:हैशिंग | श्रेणी:हैशिंग | ||
[[Category: Machine Translated Page]] | [[Category: Machine Translated Page]] | ||
[[Category:Created On 11/07/2023]] | [[Category:Created On 11/07/2023]] | ||
Revision as of 08:23, 19 July 2023
लीनियर हैशिंग (LH) एक गतिशील डेटा संरचना है जो हैश तालिका को प्रयुक्त करती है और एक समय में बकेट को बढ़ाती या संकुचित करती है। इसका आविष्कार 1980 में विटोल्ड लिटविन ने किया था।[1][2] इसका विश्लेषण बाएज़ा-येट्स और सोज़ा-पोलमैन द्वारा किया गया है।[3] यह डायनेमिक हैशिंग के नाम से जानी जाने वाली कई योजनाओं में पहला है [3][4] जैसे कि आंशिक विस्तार के साथ लार्सन की लीनियर हैशिंग, [5] प्राथमिकता विभाजन के साथ लीनियर हैशिंग, [6] आंशिक विस्तार और प्राथमिकता विभाजन के साथ लीनियर हैशिंग,[7] या रिकर्सिव लीनियर हैशिंग आदि।[8]
डायनामिक हैशिंग डेटा संरचना की फ़ाइल संरचना स्वयं को फ़ाइल के आकार में परिवर्तन के अनुसार अनुकूलित करती है, इसलिए महंगे आवधिक फ़ाइल पुनर्गठन से बचा जाता है।[4] लीनियर हैशिंग फ़ाइल एक पूर्व-निर्धारित बकेट को दो भागों में विभाजित करके विस्तारित होती है और दो पूर्व-निर्धारित बकेट को एक में विलय करके अनुबंधित करती है। पुनर्निर्माण की प्रेरणा योजना के स्वाद पर निर्भर करती है; यह एक बकेट या लोड फैक्टर (रिकॉर्ड की संख्या को बकेट की संख्या से विभाजित करने पर) पर एक पूर्व निर्धारित सीमा से बाहर जाने पर अतिप्रवाह हो सकता है।[1] लीनियर हैशिंग में दो प्रकार की बकेट होती हैं, एक वे जिन्हें विभाजित किया जाना है और वे जो पहले ही विभाजित हो चुकी हैं। जबकि विस्तार योग्य हैशिंग केवल अतिप्रवाहित बकेट्स को विभाजित करती है, सर्पिल हैशिंग (सर्पिल स्टोरेज) बकेट्स पर रिकॉर्ड को असमान रूप से वितरित करती है, जैसे कि प्रविष्टि, विलोपन या पुनर्प्राप्ति की उच्च लागत वाली बकेट्स विभाजन के लिए सबसे पहले होती हैं।[5]
लीनियर हैशिंग को एक स्केलेबल वितरित डेटा संरचना, LH* में भी बनाया गया है। LH* में, प्रत्येक बकेट अलग सर्वर पर रहता है।[9] असफल बकेट की उपस्थिति में डेटा उपलब्धता प्रदान करने के लिए LH* का विस्तार किया गया है।[10] LH और LH* में कुंजी (की) आधारित संचालन (सम्मिलित करना, हटाना, अपडेट करना, पढ़ना) बकेट की संख्या और इसलिए रिकॉर्ड से स्वतंत्र अधिकतम निरंतर समय लेते हैं।[1][10]
एल्गोरिदम विवरण
LH या LH* में रिकॉर्ड में एक कुंजी और सामग्री होती है, बाद में मूल रूप से रिकॉर्ड की अन्य सभी विशेषताएं होती हैं।[1][10] इन्हें बकेट्स में संग्रहित किया जाता है। उदाहरण के लिए, एलिस के कार्यान्वयन में, बकेट रिकॉर्ड्स की एक लिंक की गई सूची है।[2] फ़ाइल कुंजी आधारित सीआरयूडी संचालन को बनाने या सम्मिलित करने, पढ़ने, अद्यतन करने और हटाने के साथ-साथ स्कैन संचालन की अनुमति देती है जो सभी रिकॉर्ड को स्कैन करती है, उदाहरण के लिए गैर-कुंजी विशेषता पर डेटाबेस चयन ऑपरेशन करना।[10] रिकॉर्ड्स को बकेट्स में संग्रहित किया जाता है जिनकी संख्या 0 से प्रारम्भ होती है।[10]
हैश फ़ंक्शन
कुंजी के साथ रिकॉर्ड तक पहुंचने के लिए, हैश फ़ंक्शंस का एक वर्ग, जिसे सामूहिक रूप से डायनेमिक हैश फ़ंक्शन कहा जाता है, कुंजी पर प्रयुक्त किया जाता है। किसी भी समय, अधिकतम दो हैश फ़ंक्शन और का उपयोग किया जाता है। एक विशिष्ट उदाहरण डिवीजन मॉड्यूलो x ऑपरेशन का उपयोग करता है। यदि बकेट्स की मूल संख्या है, तो हैश फ़ंक्शन का वर्ग है।[10]
फ़ाइल विस्तार
जैसे-जैसे फ़ाइल सम्मिलन के माध्यम से बढ़ती है, यह बकेट को दो बकेट में विभाजित करने के माध्यम से सुन्दरता से विस्तारित होती है। बकेट्स को विभाजित करने का क्रम पूर्व निर्धारित है। फागिन की विस्तार योग्य हैशिंग जैसी योजनाओं में यह मूलभूत अंतर है।[11] दो नई बकेट्स के लिए, हैश फ़ंक्शन को से बदल दिया गया है। विभाजित की जाने वाली बकेट की संख्या फ़ाइल स्थिति का हिस्सा है और इसे स्प्लिट पॉइंटर कहा जाता है।[10]
विभाजित नियंत्रण
जब भी कोई बकेट ओवरफ्लो हो जाती है तो विभाजन किया जा सकता है। यह अनियंत्रित कॉन्ट्रेक्शन है। वैकल्पिक रूप से, फ़ाइल लोड फ़ैक्टर की निगरानी कर सकती है और जब भी लोड फ़ैक्टर एक सीमा से अधिक हो जाता है तो एक विभाजन करता है। यह नियंत्रित बंटवारा था।[10]
एड्रेसिंग
एड्रेसिंग फ़ाइल स्थिति पर आधारित है, जिसमें विभाजित सूचक और स्तर सम्मिलित है। यदि स्तर है, तो प्रयुक्त हैश फ़ंक्शन और हैं।
हैशिंग कुंजी के लिए LH एल्गोरिथ्म है [10]
यदि
विभाजन
जब बकेट को विभाजित किया जाता है, तो स्प्लिट पॉइंटर और संभवतः स्तर को [10] के अनुसार अपडेट किया जाता है।
यदि :
फाइल कॉन्ट्रेक्शन
यदि नियंत्रित कॉन्ट्रेक्शन के तहत लोड फैक्टर एक सीमा से नीचे चला जाता है, तो मर्ज ऑपरेशन प्रारम्भ हो जाता है। मर्ज ऑपरेशन अंतिम विभाजन को पूर्ववत कर देता है, साथ ही फ़ाइल स्थिति को भी रीसेट कर देता है।[10]
फ़ाइल स्थिति गणना
फ़ाइल स्थिति में विभाजित सूचक और स्तर सम्मिलित हैं। यदि मूल फ़ाइल बकेट से प्रारंभ हुई है, तो बकेट