2010-04-07 14 views
17

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

उत्तर

30

सबसे पहले आप शायद पढ़ा shoud:

आमतौर पर वे अधिक

आप पा सकते हैं यह उपयोगी खोज पेड़ आदि से आइटम पुनर्प्राप्त करने में कुशल हैं यह article

जब आप सूचियों का उपयोग करते हैं और आप एक विशेष आइटम की तलाश में हैं तो आपको सामान्य सूची में सामान्य रूप से पुन: प्रयास करना होगा। जब आपके पास बड़ी सूचियां हों तो यह बहुत महंगा है।
एक हैशटेबल बहुत तेज़ हो सकता है, सर्वोत्तम परिस्थितियों में आपको वह वस्तु मिल जाएगी जो आप केवल एक एक्सेस के साथ देख रहे हैं।
यह कैसे काम कर रहा है? एक शब्दकोश की तरह ... जब आप एक शब्दकोश में "हैशटेबल" शब्द की तलाश में हैं, तो आप 'ए' के ​​तहत पहले शब्द से शुरू नहीं कर रहे हैं। लेकिन आप सीधे 'एच' पत्र पर सीधे जाते हैं। फिर 'हा', 'है' और इतने पर, जब तक आपको अपना शब्द नहीं मिला। आप अपनी खोज तेज करने के लिए अपने शब्दकोश के भीतर एक इंडेक्स का उपयोग कर रहे हैं।
एक हैशटेबल मूल रूप से वही करता है। प्रत्येक आइटम को एक अद्वितीय अनुक्रमणिका मिलती है (तथाकथित hash)। आप लुकअप के लिए इस हैश का उपयोग करते हैं। हैश एक सामान्य लिंक्ड सूची में एक सूचकांक हो सकता है। उदाहरण के लिए आपका हैश 2130 जैसा नंबर हो सकता है जिसका अर्थ है कि आपको अपनी सूची में 2130 स्थिति देखना चाहिए। एक सामान्य सूची में एक ज्ञात सूचकांक पर एक लुकअप बहुत आसान और तेज़ है।
पूरे दृष्टिकोण की समस्या तथाकथित hash function है जो प्रत्येक आइटम को इस सूचकांक को असाइन करती है। जब आप किसी आइटम की तलाश में हैं तो आपको पहले से ही इंडेक्स की गणना करने में सक्षम होना चाहिए। एक वास्तविक शब्दकोश की तरह, जहां आप देखते हैं कि 'हैशटेबल' शब्द 'एच' से शुरू होता है और इसलिए आप अनुमानित स्थिति जानते हैं।
एक अच्छा हैश फ़ंक्शन हैशकोड प्रदान करता है जो सभी संभावित हैशकोड की जगह पर समान रूप से विघटित होते हैं। और निश्चित रूप से यह collisions से बचने की कोशिश करता है। एक टकराव तब होता है जब दो अलग-अलग आइटम एक ही हैशकोड प्राप्त करते हैं।
उदाहरण के लिए सी # में प्रत्येक ऑब्जेक्ट में GetHashcode() विधि है जो इसके लिए हैश प्रदान करता है (आवश्यक नहीं है)। इसका उपयोग आपके शब्दकोश में लुकअप और सॉर्टिंग के लिए किया जा सकता है।

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

+0

एक अच्छी तरह से समझाया गया जवाब –

+0

आपका क्या मतलब है "आपको (टकराव) सही ढंग से संभालना चाहिए"? जैसा कि मुझे पता है, हमें केवल अच्छे हैश फ़ंक्शंस (बेहतर प्रदर्शन के लिए) लिखकर टकराव को कम करने की कोशिश करनी चाहिए। लेकिन, "टकराव को संभालने" की कोई ज़रूरत नहीं है। यदि हैश टकराता है, तो यह बराबर तुलना करके जांच के अगले स्तर का सहारा लेगा। – Teddy

+0

@ टेडी: हैश फ़ंक्शन बस हैशिंग करें। कोई "अगला स्तर" नहीं है। "टकराव की देखभाल" के द्वारा मेरा यही मतलब था। जब एक से अधिक मैच होते हैं, तो आपको उदा। बराबर तुलना – tanascius

9

असल में, एक हैश मैप आपको पहचानकर्ताओं के साथ आइटम स्टोर करने की अनुमति देता है। वे एक टेबल प्रारूप में संग्रहित होते हैं जिसमें पहचानकर्ता को हैशिंग एल्गोरिदम का उपयोग करके धोया जाता है। http://www.relisoft.com/book/lang/pointer/8hash.html

आशा है कि यह मदद करता है,

क्रिस

5

हैशिंग (गैरक्रिप्टोग्राफिक भावना में) इनपुट लेने के लिए एक कंबल शब्द है और उसके बाद इसे पहचानने के लिए आउटपुट का उत्पादन होता है। हैश का एक तुच्छ उदाहरण एक स्ट्रिंग के पत्र का योग है, यानी जोड़ रहा है:

f(abc) = 6 

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

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

एक सूची में, तुलना में, आपको अपनी मांग की वस्तु को खोजने के लिए सूची में से किसी एक तरीके से खोजना होगा। यह हैशटेबल के पीछे की ओर भी प्रतिनिधित्व करता है, जो कि कुंजी को जानने के बिना किसी ऑब्जेक्ट को ढूंढना बहुत जटिल है, क्योंकि तालिका में ऑब्जेक्ट को संग्रहीत किया जाता है, उसके मूल्य पर कोई प्रासंगिकता नहीं होती है और न ही जब इसे इनपुट किया जाता है।

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

यह निश्चित रूप से एक बहुत ही सरल स्पष्टीकरण है, इसलिए मेरा सुझाव है कि आप इस बिंदु से गहराई से पढ़ लें। मुझे आशा है कि मैंने कोई मूर्खतापूर्ण गलती नहीं की है। =)

0

हैशमैप का उपयोग मुख्य मूल्य जोड़े में डेटा संग्रहीत करने के लिए किया जाता है। हम किसी एप्लिकेशन में ऑब्जेक्ट्स को संग्रहीत करने के लिए हैशैप का उपयोग कर सकते हैं और मूल्यों को संग्रहीत करने, अपडेट करने, हटाने के लिए उसी एप्लिकेशन में इसका उपयोग कर सकते हैं। हैशमैप कुंजी और मान एक बाल्टी में एक विशिष्ट प्रविष्टि में संग्रहीत होते हैं, यह प्रविष्टि स्थान हैशकोड फ़ंक्शन का उपयोग करके निर्धारित किया जाता है। यह हैशकोड फ़ंक्शन हैश निर्धारित करता है जहां मान संग्रहीत किया जाता है। हैशैप कार्यों का विस्तृत विवरण इस वीडियो में वर्णित है: https://youtu.be/iqYC1odZSNo

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

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