यदि आप इससे दूर हो सकते हैं, तो आपको हमेशा एक बाइनरी खोज पेड़ पर हैश पसंद करना चाहिए। पेड़ों की तुलना में हैश की उच्च मेमोरी ओवरहेड है, लेकिन वे जो भी मेमोरी उपयोग कर रहे हैं उन्हें एक बड़े ब्लॉक में आवंटित किया जा सकता है। पेड़ों के लिए, प्रत्येक नोड को जोड़ने के लिए एक अलग आवंटन की आवश्यकता होती है जो उच्च विखंडन का कारण बनती है और प्रदर्शन के लिए खराब होती है। 1000 अलग-अलग फाइलों से 1 बाइट से 1 फ़ाइल से 1000 बाइट्स को पढ़ने के तरीके के समान ही।
मामले को ऑर्डर करते समय हैशिस काम नहीं करता है। उदाहरण के लिए, मान लें कि आप एक मेमोरी आवंटक लिख रहे हैं और आप डेटा संरचना में स्मृति के मुक्त ब्लॉक स्टोर करते हैं। कुंजी ब्लॉक के आकार हैं और मान उनके लिए पॉइंटर्स हैं।
मेमोरी के लिए अनुरोध इस डेटा संरचना को देखकर और छोटे (ऑर्डर करने का तात्पर्य है!) ब्लॉक को अनुरोध को संतुष्ट करने में शामिल है। उदाहरण के लिए यदि आपके पास कुंजी 10, 20, 30 के साथ ब्लॉक हैं और 20 बाइट्स मेमोरी के लिए अनुरोध आता है, तो आप दूसरा ब्लॉक चुनते हैं। एक हैशप आसानी से ऐसा कर सकता है।
लेकिन अगर अनुरोध 22 बाइट्स के लिए है तो क्या होगा? चूंकि मूल्य 20 के साथ कोई कुंजी नहीं है, इसलिए आपको संपूर्ण हैमपैप को सही कुंजी (30) ढूंढने के लिए फिर से करना है जो ओ (एन) ऑपरेशन है। लेकिन अगर आपने एक पेड़ का इस्तेमाल किया था, तो "किसी दिए गए कुंजी से छोटी छोटी कुंजी ढूंढें" एक ओ (लॉग एन) ऑपरेशन है।
स्रोत
2016-11-04 11:53:03
[बाइनरी पेड़ बनाम लिंक्ड लिस्ट बनाम हैश टेबल्स] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/371136/binary-trees-vs-linked-lists-vs-hash-tables) –