2010-04-04 12 views
10

ढूंढ रहे हैं मैं एक विशेष हैश-फ़ंक्शन ढूंढ रहा हूं। मान लीजिए कि मेरे पास तारों की एक बड़ी सूची है, अगर मैं उन्हें अपने हैश-मूल्यों से आदेश देता हूं तो उन्हें अर्धतापूर्वक अर्धतापूर्वक आदेश दिया जाना चाहिए।एक तेज हैश-फ़ंक्शन

सबसे महत्वपूर्ण बात यह है: यह बहुत तेज़ होना चाहिए। मैंने md5 और sha1 की कोशिश की है और वे बहुत सीपीयू पावर का उपयोग कर रहे हैं।

संघर्ष कोई समस्या नहीं है।

मैं जावास्क्रिप्ट का उपयोग कर रहा हूं, इसलिए इसे लागू करने के लिए बहुत जटिल नहीं होना चाहिए।

+0

यह भी देखें http://programmers.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed – rogerdpack

उत्तर

5

ऐसा लगता है कि आप हैश फ़ंक्शन में हैश फ़ंक्शन का उपयोग करना चाहते हैं, न कि डुप्लिकेट या छेड़छाड़ का पता लगाने के लिए इस्तेमाल किया गया सॉर्ट।

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

आप this, या this, या this से शुरू करने के लिए पढ़ सकते हैं।

3

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

ca ad-hoc 
el like 
es simple 
gt taking 
hh hash 
nc can 
ti implement 
uy you 
+1

यदि हैश टकराव से बचने का अच्छा काम नहीं करता है, तो टकराव के कारण हैशिंग के दौरान आपको प्राप्त होने वाली कोई भी गति खो जाएगी। चाल दोनों के बीच संतुलन खोजने के लिए है। –

+1

जूलियन ने स्पष्ट रूप से अपने प्रश्न में कहा कि संघर्ष/टकराव कोई समस्या नहीं है और मैं समझ सकता हूं कि क्यों। इस तरह की एक साधारण हैश एक गैर-स्पष्ट अर्ध-यादृच्छिक शब्द ऑर्डर प्रदान करेगी: यदि एकाधिक शब्दों में एक ही हैश मान होता है, तो शायद उन्हें आगे क्रमबद्ध करने की परवाह नहीं है और उन्हें आसानी से ले जाया जा सकता है क्योंकि वे बिना प्रदर्शन प्रदर्शन के आते हैं। जाहिर है, यह विशिष्ट हैश फ़ंक्शन सभी प्रकार के डेटा सेटों के साथ अच्छी तरह से काम नहीं करेगा, लेकिन आप कोने के मामलों के बारे में बात नहीं कर रहे हैं। –

3

Hsieh, Murmur, Bob Jenkin's मेरे मन में आता है।
nice page about hash functions जिसमें गुणवत्ता के लिए कुछ परीक्षण हैं और एक सरल एस-बॉक्स हैश भी है।

+0

लगता है कि SuperFastHash से दूर रहना सबसे अच्छा है। (ऊपर पहला लिंक) http://www.team5150.com/~andrew/blog/2007/03/breaking_superfasthash.html – Matt

+1

@ मैट वेल, उस पर आधारित, आपको किसी भी उत्तर में इस पृष्ठ पर उल्लिखित सभी हैंश से बचना चाहिए , क्योंकि वे क्रिप्टो हैंश नहीं हैं - बदले में, वे उदाहरण से तेज हैं एसएचए, और - जैसा कि ओपी ने पूछा - जेएस में थोड़ा प्रयास करके लागू किया जा सकता है। ;-)। कृपया क्रिप्टो बनाम "मानक" हैश के बीच का अंतर ध्यान दें: http://security.stackexchange.com/questions/11839/what-is-the-difference-between-a-hash-function-and-a- क्रिप्टोग्राफिक -हैश फंकशन –

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