हैश और डिक्शनरी में क्या अंतर है?


46

बीच क्या अंतर है Hashऔर Dictionary?

स्क्रिप्टिंग पृष्ठभूमि से आने पर, मुझे लगता है कि वे समान हैं, लेकिन मैं सटीक अंतरों का पता लगाना चाहता था। Googling ने मेरी बहुत मदद नहीं की।

जवाबों:


92

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

Dictionaryइंटरफ़ेस (= ADT ) का "सही" नाम है , यानी एक साहचर्य कंटेनर जो (आमतौर पर विशिष्ट) कुंजी को मैप करता है (जरूरी नहीं कि अद्वितीय) मान।

एक हैश तालिका ऐसे शब्दकोश का एक संभावित कार्यान्वयन है जो काफी अच्छी पहुंच विशेषताओं (रनटाइम के संदर्भ में) प्रदान करता है और इसलिए अक्सर डिफ़ॉल्ट कार्यान्वयन होता है।

इस तरह के कार्यान्वयन के दो महत्वपूर्ण गुण हैं:

  1. चाबियों को हैज़ेबल और समानता तुलनीय होना चाहिए ।
  2. प्रविष्टियाँ शब्दकोश में किसी विशेष क्रम में नहीं दिखाई देती हैं।

(कुंजी के लिए हैशबल होने का मतलब है कि हम एक कुंजी से एक संख्यात्मक मान की गणना कर सकते हैं जो बाद में एक सरणी में एक सूचकांक के रूप में उपयोग किया जाता है।)

शब्दकोश डेटा संरचना के वैकल्पिक कार्यान्वयन मौजूद हैं जो कुंजियों पर एक आदेश देते हैं - इसे अक्सर एक सॉर्ट किया गया शब्दकोश कहा जाता है (और आमतौर पर एक खोज ट्री के संदर्भ में लागू किया जाता है, हालांकि अन्य कुशल कार्यान्वयन मौजूद हैं)।


संक्षेप में: एक शब्दकोश एक ADT है जो मूल्यों की कुंजी को मैप करता है। इस एडीटी के कई संभावित कार्यान्वयन हैं, जिनमें से हैश तालिका एक है। Hashएक मिथ्या नाम है, लेकिन संदर्भ में यह एक शब्दकोश के बराबर है जो हैश टेबल के संदर्भ में लागू किया गया है।


4
C ++ में एक उदाहरण देने के लिए, मानक एसोसिएटिव कंटेनर टेम्प्लेट को हैश के रूप में लागू नहीं किया जा सकता है, हालांकि अगले मानक में प्रभावी रूप से हैव टेबल हैं। उन्हें unordered_mapयह दिखाने के लिए बुलाया जाता है कि वे जो करते हैं, उसके बजाय वे क्या करते हैं।
डेविड थॉर्नले

6
"सही" किस अधिकार के अनुसार? कुछ भाषाओं में, जैसे कि रूबी और पर्ल, आधिकारिक - इन संरचनाओं के लिए "सही" - पढ़ें "हैश" है।
नं।

11
@ क्या: मेरे उद्धरण का उपयोग नोटिस। इसके अलावा, मैं है क्यों नाम बुरी तरह से चुना जाता है बताया गया है, मुझे नहीं है? इसलिए यदि आपको किसी प्राधिकरण की आवश्यकता है तो मैं कहूंगा कि यह सैद्धांतिक कंप्यूटर विज्ञान पुलिस के अधिकार से है।
कोनराड रुडोल्फ

9
दिलचस्प बात यह है कि रूबी 1.9 में, Hashहैश टेबल के साथ क्लास को लागू करना वास्तव में असंभव है , क्योंकि रूबी 1.9 Hashएस इनसर्शन ऑर्डर को संरक्षित करता है जबकि हैश टेबल नहीं करता है। इसलिए, रूबी 1.9 में, नाम Hashकिसी भी अधिक कार्यान्वयन को प्रतिबिंबित नहीं करता है।
जोर्ग डब्ल्यू मित्तग

7
@hippietrail तुम गलत हो - पहली, उन हैं उद्देश्य विवरण। आखिरकार, मैं अर्हता प्राप्त करता हूं कि नामकरण खराब क्यों है और एक मिथ्या नाम (नीचे देखें)। "बहुत आलसी" मेरे हिस्से पर कलात्मक लाइसेंस है, लेकिन यह बात बनी हुई है कि नाम को छोटा करने का कारण आंतरिक है, यानी नाम को छोटा करने के अलावा यहां एक संक्षिप्त नाम का उपयोग करने का कोई कारण नहीं है। और आप "शब्दकोश" के बारे में गलत हैं: यह केवल डेटा संरचना का आधिकारिक नाम है। "डिक्शनरी" की आपकी परिभाषा कंप्यूटर विज्ञान के संदर्भ में गलत है, और नाम दशकों से पायथन से मिलता है।
कोनराड रुडोल्फ

8

"शब्दकोश" अवधारणा का नाम है। एक हैशटेबल एक संभावित कार्यान्वयन है।


1
हैश भी एक एडीटी है। हैशटेबल एक हैश का एक कार्यान्वयन है
साईराम

3
@ साईराम मुझे लगता है कि 'हैश' के लिए हैश तालिका के बजाय हैश फ़ंक्शन का मतलब अधिक सामान्य है।
जे.के.

@jk वास्तव में "हैश" कुछ इनपुट के लिए "हैश फ़ंक्शन / एल्गोरिथ्म" लागू करने का परिणाम है। एक "हैश टेबल" या "हैश मैप" omehoe किसी वस्तु (किसी सामान्य रूप में वस्तु, जो OOP तक सीमित नहीं है) से संबंधित है और धोने योग्य वस्तु है
johannes

ऐसी भाषाएं हैं जो 'हैश' का उपयोग केवल हैश फ़ंक्शन ऑपरेशन के बजाय एक शब्दकोश-प्रकार की संरचना को संदर्भित करने के लिए करती हैं। उदाहरण के लिए रूबी
सीन बर्टन

7

एक शब्दकोश सामूहिक शब्द है जो किसी भी डेटा संरचना कार्यान्वयन के लिए दिया जाता है जिसका उपयोग तेजी से देखने / सम्मिलन के लिए किया जाता है। यह विभिन्न डेटा संरचनाओं जैसे हैश टेबल, स्किप लिस्ट, आरबी ट्री इत्यादि का उपयोग करके प्राप्त / कार्यान्वित किया जा सकता है। एक हैश टेबल एक विशिष्ट डेटा संरचना है जो शब्दकोश को लागू करने सहित कई उद्देश्यों के लिए उपयोगी है।


हैश भी एक एडीटी है। क्या हैश और शब्दकोश एडीटी के बीच कोई विशिष्ट अंतर है?
साईराम

2
@ साईराम: नहीं, एक हैश एक निश्चित प्रकार के एल्गोरिथ्म (हैश फ़ंक्शन) का आउटपुट है।

5

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

अर्थात (KEY => VALUE)

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

अर्थात KEY => HASH FUNCTION => VALUE

मुझे लगता है कि एक प्रत्यक्ष है जबकि दूसरा नहीं है। हैश फ़ंक्शंस या तो सही नहीं हो सकते हैं और कभी-कभी गलत मान संदर्भित करने वाला एक सूचकांक प्रदान कर सकते हैं। लेकिन इसे सुधारा जा सकता है।

देखने के लिए सबसे अच्छी जगह: विकिपीडिया ( साहचर्य सरणी और हैश तालिका )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.