2012-02-03 16 views
70

ओपन हैशिंग (अलग श्रृंखलन) का अर्थ:ओपन हैशिंग और बंद hashing

खुला हैशिंग में, कुंजी जुड़ा हुआ एक हैश तालिका की कोशिकाओं से जुड़ी सूचियों में संग्रहीत हैं।

बंद हैशिंग (ओपन को संबोधित करते):

बंद हैशिंग, सभी चाबियाँ जुड़ा हुआ सूचियों के उपयोग के बिना हैश तालिका अपने आप में जमा हो जाती है।

मुझे समझ में नहीं आता कि उन्हें खुले, बंद और अलग क्यों कहा जाता है। क्या कोई इसे समझा सकता है?

उत्तर

85

"बंद" बनाम "खुला" का उपयोग दर्शाता है कि हम किसी निश्चित स्थिति या डेटा संरचना का उपयोग करने के लिए बंद हैं या नहीं (यह एक बेहद अस्पष्ट वर्णन है, लेकिन उम्मीद है कि शेष मदद करता है)।

उदाहरण के लिए, "खुले पते" में "खुला" हमें सूचकांक (उर्फ पता) बताता है जिस पर हैश तालिका में एक ऑब्जेक्ट संग्रहीत किया जाएगा, हैश कोड द्वारा पूरी तरह से निर्धारित नहीं किया जाता है। इसके बजाए, हैश तालिका में पहले से मौजूद है के आधार पर सूचकांक भिन्न हो सकता है।

"बंद हैशिंग" में "बंद" इस तथ्य को संदर्भित करता है कि हम कभी भी हैश तालिका नहीं छोड़ते हैं; प्रत्येक ऑब्जेक्ट को हैश तालिका की आंतरिक सरणी में सीधे एक अनुक्रमणिका में संग्रहीत किया जाता है। ध्यान दें कि कुछ प्रकार की खुली एड्रेसिंग रणनीति का उपयोग करके यह संभव है। यह बताता है कि क्यों "बंद हैशिंग" और "खुले पते" समानार्थी हैं।

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

संक्षेप में, "बंद" हमेशा किसी प्रकार की सख्त गारंटी को संदर्भित करता है, जैसे कि जब हम गारंटी देते हैं कि वस्तुओं को हमेशा हैश तालिका (बंद हैशिंग) के भीतर सीधे संग्रहीत किया जाता है। फिर, "बंद" के विपरीत "खुला" है, इसलिए यदि आपके पास ऐसी गारंटी नहीं है, तो रणनीति को "खुला" माना जाता है।

+12

हमें यह जोड़ना चाहिए कि ओपन हैशिंग (अलग चेनिंग) लिंक की गई सूचियों तक ही सीमित नहीं है, जो कि ओ (एन/2) व्यवहार के टकराव के हमलों पर कैश अनुकूल और विचलित नहीं हैं। आप टकराव की बाल्टी के लिए पेड़ या सॉर्ट किए गए सरणी का भी उपयोग कर सकते हैं। – rurban

-10

खैर इस खुले और बंद हैशिंग की अवधारणा,

ओपन हैशिंग में समझने के लिए बहुत आसान है, यह लिंक सूची की संपत्ति की तुलना में हम सम्मिलित कर सकते हैं अगर सूचकांक के किसी भी कुंजी allready डेटा तत्व होने संदर्भित करता है कि ले एक ही स्थान पर एक और डेटा तत्व, स्पष्ट रूप से यह डेटा के लिए खुला है जिसमें एक ही स्थान है जिसके बाद यह पहले से ही किसी दूसरे पर कब्जा कर लिया गया है।

और बंद में, यदि डेटा तालिका से कोई डेटा उस पते का उपयोग कर सकते हैं में स्थान पाने ..

हल ........

1

नाम खुला को संबोधित आसान na इस तथ्य को संदर्भित करता है कि तत्व का स्थान ("पता") अपने हैश मान द्वारा निर्धारित नहीं है। (इस विधि को बंद हैशिंग भी कहा जाता है)।

अलग श्रृंखला, प्रत्येक बाल्टी स्वतंत्र है, और उसी सूचकांक के साथ प्रविष्टियों के कुछ प्रकार के एडीटी (सूची, बाइनरी खोज पेड़, आदि) हैं। एक अच्छा हैश तालिका में, प्रत्येक बाल्टी, शून्य या एक प्रविष्टियां हैं क्योंकि हम डालने के लिए आदेश हे (1), खोज, आदि के संचालन की जरूरत

यह अलग की एक example सी का उपयोग कर चेनिंग ++ एक साधारण के साथ है हैश फ़ंक्शन मॉड ऑपरेटर (clearly, a bad hash function)

0

आपके पास एक हैश है जो "हैश टेबल" है।

ओपन हैशिंग में सरणी में प्रत्येक सेल टकराव का विरोध करने वाली सूची में इंगित करता है। हैशिंग ने लिंक की गई सूची में सभी वस्तुओं के लिए एक ही इंडेक्स का उत्पादन किया है।

बंद हैशिंग में आप सबकुछ के लिए केवल एक सरणी का उपयोग करते हैं। आप टकराव को उसी सरणी में स्टोर करते हैं। चाल टकराव से टक्कर इकाई तक पहुंचने के लिए कुछ स्मार्ट तरीके का उपयोग करना है जो आप चाहते हैं कि आप क्या चाहते हैं। और इसे एक पुनरुत्पादित/निर्धारिक तरीके से करें।

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