बुनियादी सिद्धांत है:
- खाली सरणी सेट करें।
- हैश कोड प्राप्त करें।
- री-हैश हैश सरणी के आकार को फिट करने के लिए है (उदाहरण के लिए यदि सरणी आकार में 31 आइटम है, तो हम
hash % 31
कर सकते हैं) और इसे इंडेक्स के रूप में उपयोग करें।
पुनर्प्राप्ति तब सूचकांक को खोजने के मामले में है, अगर वह वहां है तो कुंजी प्राप्त करना, और उस आइटम पर Equals
पर कॉल करना।
यहां स्पष्ट मुद्दा यह है कि यदि एक ही सूचकांक में दो आइटम हैं तो क्या करना है। एक दृष्टिकोण यह है कि आप कुंजी-मूल्य जोड़ी के बजाय सरणी में एक सूची या समान संग्रह करते हैं, दूसरा एक अलग इंडेक्स में "reprobing" है। दोनों दृष्टिकोणों के फायदे और नुकसान हैं, और माइक्रोसॉफ्ट
एक सूची reprobing का उपयोग करें।
एक निश्चित आकार के ऊपर, प्रतिरक्षा की मात्रा (या संग्रहीत सूचियों का आकार यदि आप उस दृष्टिकोण को लेते हैं) बहुत बड़ा हो जाता है और निकट-ओ (1) व्यवहार खो जाता है, जिस बिंदु पर तालिका का आकार बदल जाता है इसे सुधारने के लिए।
जाहिर है, हालांकि, एक बहुत गरीब हैश एल्गोरिथ्म इस नष्ट कर सकते हैं, तो आप इस अपने आप से वस्तुओं की एक शब्दकोश का निर्माण करके जहां hashCode विधि निम्नलिखित है प्रदर्शित कर सकते हैं:
public override int GetHashCode()
{
return 0;
}
यह वैध है, लेकिन भयानक है, और अपने पास-ओ (1) हे में व्यवहार (एन) (और बुरे के रूप में भी हे (एन) चला जाता है बदल जाता है।
अन्य विवरण और अनुकूलन के बहुत सारे हैं, लेकिन इसके बाद के संस्करण बुनियादी सिद्धांत है।
संपादित करें:
संयोग से, यदि आपके पास एक आदर्श हैश है (आप सभी संभावित मूल्यों को जानते हैं, और एक हैश विधि है जो प्रत्येक ऐसे मान को एक छोटी सी सीमा में एक अद्वितीय हैश देता है) तो अधिक सामान्य के साथ होने वाले पुनर्विचार के मुद्दों से बचना संभव है। उद्देश्य हैश-टेबल, और केवल हैश को एक सरणी में एक इंडेक्स के रूप में मानें। यह ओ (1) व्यवहार, और न्यूनतम स्मृति उपयोग दोनों देता है, लेकिन केवल तब लागू होता है जब सभी संभावित मान एक छोटी सी सीमा में होते हैं।
स्रोत
2011-03-21 15:39:42
बहुत सरल: यह अवधारणा पर निर्भर करता है कि, हर बार दो वस्तुओं की तुलना करने के लिए, आप बस अपने "फिंगरप्रिंट" की तुलना कर सकते हैं, जो कि बहुत तेज है। केवल अगर टकराव होता है तो आपको वास्तव में वस्तुओं की तुलना करने की आवश्यकता होती है, इसलिए गति। – Mehrdad