C++ में हैश टेबल

C Mem Haisa Tebala



हैश टेबल प्रोग्रामिंग में 'हैस्प मैप' शब्द के लिए भी प्रसिद्ध है। C++ प्रोग्रामिंग भाषा में, हैश टेबल स्वाभाविक रूप से एक डेटा संरचना है जिसका उपयोग ज्यादातर एरे की कुंजियों और उनके मानों को जोड़े में संग्रहीत करने के लिए किया जाता है। इंडेक्स को स्लॉट की एक सरणी में गणना करने के लिए एक हैश एल्गोरिदम का उपयोग किया जाना चाहिए जहां मान संग्रहीत होते हैं, और प्रत्येक कुंजी अलग होनी चाहिए। तत्वों को उनके विशिष्ट मूल्यों के आधार पर जोड़ने, हटाने और पुनः प्राप्त करने के लिए एक हैश तालिका पर भरोसा किया जाता है। इस लेख में, हम उचित उदाहरणों की सहायता से हैश टेबल अवधारणा को समझेंगे।

हैश फंकशन

इस अनुभाग में, हम हैश फ़ंक्शन के बारे में चर्चा करेंगे जो डेटा संरचना में डेटा आइटम की संबंधित कुंजी के हैश कोड को निष्पादित करने में मदद करता है जैसा कि निम्नलिखित में बताया गया है:

Int hashItem ( int यहाँ चाबी )
{
वापस करना चाबी % तालिका का आकार ;
}

किसी ऐरे के इंडेक्स को निष्पादित करने की प्रक्रिया को हैशिंग कहा जाता है। कभी-कभी, समान कुंजी का उपयोग करके समान सूचकांक उत्पन्न करने के लिए एक ही प्रकार का कोड निष्पादित किया जाता है जिसे टकराव कहा जाता है जिसे विभिन्न चेनिंग (लिंक्ड सूची निर्माण) और ओपन एड्रेसिंग रणनीतियों के कार्यान्वयन के माध्यम से नियंत्रित किया जाता है।







C++ में हैश टेबल का कार्य करना

वास्तविक मानों के संकेतक हैश तालिका में रखे जाते हैं। यह किसी सरणी के सूचकांक को खोजने के लिए एक कुंजी का उपयोग करता है, जिस पर कुंजी के विरुद्ध मानों को किसी सरणी में वांछित स्थान पर संग्रहीत करने की आवश्यकता होती है। जैसा कि निम्नलिखित में बताया गया है, हमने आकार 10 वाली हैश तालिका ली:



0 1 2 3 4 5 6 7 8 9

आइए हम यादृच्छिक रूप से विभिन्न कुंजियों के विरुद्ध कोई भी डेटा लें और केवल सूचकांक की गणना करके इन कुंजियों को हैश तालिका में संग्रहीत करें। तो, डेटा को हैश फ़ंक्शन की सहायता से परिकलित सूचकांक में कुंजियों के विरुद्ध संग्रहीत किया जाता है। मान लीजिए हम एक डेटा लेते हैं = {14,25,42,55,63,84} और कुंजियाँ =[15,9,5,25,66,75]।



हैश फ़ंक्शन का उपयोग करके इन डेटा के सूचकांक की गणना करें। सूचकांक मान निम्नलिखित में उल्लिखित है:





चाबी पंद्रह 9 29 43 66 71
सूचकांक की गणना करें 15%10 = 5 9%10=0 29%10=9 43%10=3 66%10=6 71%10=1
डेटा 14 25 42 55 63 84

किसी सरणी का सूचकांक बनाने के बाद, पहले बताए अनुसार दिए गए सरणी के सटीक सूचकांक पर कुंजी के सामने डेटा रखें।

25 84 55 14 63 42
0 1 2 3 4 5 6 7 8 9

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



अब, आइए उचित उदाहरणों की सहायता से विभिन्न कार्यान्वयन तकनीकों पर चर्चा करें।

उदाहरण: ओपन हैशिंग तकनीक का उपयोग करके हैश तालिका में डेटा जोड़ें

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

#शामिल करें
#शामिल <सूची>
कक्षा हैश तालिका {
निजी :
स्थिर कॉन्स्ट int यहाँ तालिका का आकार = 10 ;
कक्षा :: सूची < int यहाँ > टेबलहैस [ तालिका का आकार ] ;
int यहाँ हैशफनक ( int यहाँ चाबी ) {
वापस करना चाबी % तालिका का आकार ;
}
जनता :
खालीपन डालना ( int यहाँ चाबी ) {
int यहाँ अनुक्रमणिका = हैशफनक ( चाबी ) ;
टेबलहैस [ अनुक्रमणिका ] . वापस धक्का देना ( चाबी ) ;
}
खालीपन दृश्य तालिका ( ) {
के लिए ( int यहाँ मैं = 0 ; मैं < तालिका का आकार ; ++ मैं ) {
कक्षा :: अदालत << '[' << मैं << ']' ;
के लिए ( ऑटो यह = टेबलहैस [ मैं ] . शुरू ( ) ; यह ! = टेबलहैस [ मैं ] . अंत ( ) ; ++ यह ) {
कक्षा :: अदालत << ' -> ' << * यह ;
}
कक्षा :: अदालत << कक्षा :: अंतः ;
}
}
} ;
int यहाँ मुख्य ( ) {
हैशटेबल में टेबल है ;
हैटेबल. डालना ( पंद्रह ) ;
हैटेबल. डालना ( 33 ) ;
हैटेबल. डालना ( 23 ) ;
हैटेबल. डालना ( 65 ) ;
हैटेबल. डालना ( 3 ) ;
हैटेबल. दृश्य तालिका ( ) ;
वापस करना 0 ;
}

यह एक बहुत ही दिलचस्प उदाहरण है: हम एक लिंक्ड सूची बनाते हैं और डेटा को हैश तालिका में सम्मिलित करते हैं। सबसे पहले, हम प्रोग्राम की शुरुआत में लाइब्रेरीज़ को परिभाषित करते हैं। < सूची > लाइब्रेरी का उपयोग लिंक्ड सूची कार्यान्वयन के लिए किया जाता है। उसके बाद, हम 'हैशटेबल' नाम से एक क्लास बनाते हैं और 'प्राइवेट:' कीवर्ड का उपयोग करके क्लास के निजी गुणों जैसे टेबल साइज और टेबल ऐरे का निर्माण करते हैं। याद रखें कि निजी विशेषताएँ कक्षा के बाहर प्रयोग योग्य नहीं हैं। यहां, हम तालिका का आकार '10' लेते हैं। हम इसका उपयोग करके हैश विधि आरंभ करते हैं और हैश तालिका के सूचकांक की गणना करते हैं। हैश फ़ंक्शन में, हम हैश तालिका की कुंजी और आकार पास करते हैं।

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

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

इस कोड का आउटपुट निम्नलिखित में संलग्न है:

जैसा कि हम देख सकते हैं, C++ में लिंक की गई सूची का उपयोग करके हैश तालिका सफलतापूर्वक बनाई गई है। समान सूचकांक की टक्कर से बचने के लिए ओपन चेनिंग का उपयोग किया जाता है।

निष्कर्ष

अंततः, हमने निष्कर्ष निकाला कि बड़ी मात्रा में डेटा को कुशलतापूर्वक संभालने के लिए मूल्य जोड़े के साथ कुंजियाँ संग्रहीत करने और प्राप्त करने के लिए हैश तालिका सबसे उभरती हुई तकनीक है। हैश टेबल में टकराव की संभावना बहुत अधिक होती है, जिससे डेटा और उसका भंडारण नष्ट हो जाता है। हम हैश टेबल प्रबंधन की विभिन्न तकनीकों का उपयोग करके इस टकराव पर काबू पा सकते हैं। C++ में हैश तालिका विकसित करके, डेवलपर्स हैश तालिका में डेटा संग्रहीत करने के लिए सर्वोत्तम उपयुक्त तकनीक का उपयोग करके प्रदर्शन बढ़ा सकते हैं। हमें उम्मीद है कि यह लेख हैश तालिका को समझने में आपकी मदद करेगा।