2012-05-29 17 views
11

मैं हैश तालिका कार्यान्वयन में उपयोग के लिए अच्छे (यानी वर्दी के पास) वितरण के साथ एक उच्च स्पीड हैशिंग फ़ंक्शन की तलाश में हूं।हैश टेबल कार्यान्वयन के लिए हैशिंग एल्गोरिदम

हैश तालिका का उपयोग विशेष रूप से एक पूर्णांक कुंजी वाले मानों को संग्रहीत करने के लिए किया जाएगा।

क्या मैं केवल हैश के रूप में पूर्णांक के निचले कुछ बिट्स का उपयोग कर सकता हूं?

उदाहरण int कुंजी = n & 15; और उन्हें स्टोर करने के लिए 16 स्लॉट के साथ एक सरणी बनाएँ।

कोई सिफारिशें?

+12

एक परिपूर्ण हैश फ़ंक्शन जैसी कोई चीज़ नहीं है। हालांकि, अगर आप संबंधित स्रोत कोड के साथ कुछ एल्गोरिदम चाहते हैं, तो यहां देखें: http://partow.net/programming/hashfunctions/index.html –

+0

सबसे कम बिट्स लेना शायद सबसे बुरी चीज है। (लेकिन: यह सब आपके int कुंजी में आपके द्वारा अपेक्षित मानों की सीमा पर निर्भर करता है) ऊपरी बिट्स में भी मिश्रण करने का प्रयास करें, या बड़े पर्याप्त (विषम, प्राइम) संख्या के साथ गुणा करें। जानें कि इसकी क्या अपेक्षा करें और मापें। – wildplasser

+0

अपनी टिप्पणी को एक उत्तर के रूप में पोस्ट करें और मैं इसे स्वीकार करूंगा। –

उत्तर

3

आप यहाँ xxhash

देख सकते हैं आपका उल्लेख किया हैश फंक्शन बहुत तेजी से है, लेकिन यह भी बहुत खराब है। यदि आप "बेवकूफ" हैश फ़ंक्शन चाहते हैं तो आप मॉड्यूलस पर विचार कर सकते हैं।

उदाहरण:

int key = item % size_of_hash_table 
+2

"यह" बुरा क्यों है? –

0

ठीक है, कल रात मैं एक बहुमुखी हैश परीक्षण (सी में) जो कई शीर्ष बंदूक hashers और 38 विभिन्न कुंजियों को शामिल किया गया बनाया है।

आप सभी पर यह बेंचमार्क के लिए स्वागत है: http://www.overclock.net/t/1319572/benchmarking-the-fastest-hash-function/0_20#post_18495990

मैं खुलासा कैसे इंटेलबनाम एएमडी और इंटेल 12.1 संकलक बनाम माइक्रोसॉफ्ट 16 (VS2010) संकलक संयोजन से व्यवहार के लिए खुशी होगी आपकी मदद से।

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