• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            無我

            讓內心永遠燃燒著偉大的光明的精神之火!
            靈活的思考,嚴謹?shù)膶崿F(xiàn)
            豪邁的氣魄、頑強的意志和周全的思考

            hash函數(shù)——djb2、sdbm、lose lose

            本文內容轉自于http://www.cse.yorku.ca/~oz/hash.html。因為他對給出了幾個非常好的hash函數(shù),而其中的sdbm就是我們將剖析的eSNACC用的hash的原型。文章是英文的,但是通俗易懂,就摘錄在此了。

             

            Hash Functions

            A comprehensive collection of hash functions, a hash visualiser and some test results [see Mckenzie et al. Selecting a Hashing Algorithm, SP&E 20(2):209-224, Feb 1990] will be available someday. If you just want to have a good hash function, and cannot wait, djb2 is one of the best string hash functions i know. it has excellent distribution and speed on many different sets of keys and table sizes. you are not likely to do better with one of the "well known" functions such as PJW, K&R[1], etc. Also see tpop pp. 126 for graphing hash functions.


             

            djb2

            this algorithm (k=33) was first reported by dan bernstein many years ago in comp.lang.c. another version of this algorithm (now favored by bernstein) uses xor: hash(i) = hash(i - 1) * 33 ^ str[i]; the magic of number 33 (why it works better than many other constants, prime or not) has never been adequately explained.

                unsigned long
                hash(unsigned char *str)
                {
                    unsigned long hash = 5381;
                    int c;
            
                    while (c = *str++)
                        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
            
                    return hash;
                }
            


             

            sdbm

            this algorithm was created for sdbm (a public-domain reimplementation of ndbm) database library. it was found to do well in scrambling bits, causing better distribution of the keys and fewer splits. it also happens to be a good general hashing function with good distribution. the actual function is hash(i) = hash(i - 1) * 65599 + str[i]; what is included below is the faster version used in gawk. [there is even a faster, duff-device version] the magic constant 65599 was picked out of thin air while experimenting with different constants, and turns out to be a prime. this is one of the algorithms used in berkeley db (see sleepycat) and elsewhere.

                static unsigned long
                sdbm(str)
                unsigned char *str;
                {
                    unsigned long hash = 0;
                    int c;
            
                    while (c = *str++)
                        hash = c + (hash << 6) + (hash << 16) - hash;
            
                    return hash;
                }

            lose lose

            This hash function appeared in K&R (1st ed) but at least the reader was warned: "This is not the best possible algorithm, but it has the merit of extreme simplicity." This is an understatement; It is a terrible hashing algorithm, and it could have been much better without sacrificing its "extreme simplicity." [see the second edition!] Many C programmers use this function without actually testing it, or checking something like Knuth's Sorting and Searching, so it stuck. It is now found mixed with otherwise respectable code, eg. cnews. sigh. [see also: tpop]

                unsigned long
                hash(unsigned char *str)
                {
            	unsigned int hash = 0;
            	int c;
            
            	while (c = *str++)
            	    hash += c;
            
            	return hash;
                }
            

             

             

            posted on 2012-04-26 08:52 Tim 閱讀(2646) 評論(1)  編輯 收藏 引用 所屬分類: C/C++語言

            評論

            # re: hash函數(shù)——djb2、sdbm、lose lose[未登錄] 2012-04-27 09:35 Tina

            頂!  回復  更多評論   

            <2012年4月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            導航

            統(tǒng)計

            公告

            本博客原創(chuàng)文章,歡迎轉載和交流。不過請注明以下信息:
            作者:TimWu
            郵箱:timfly@yeah.net
            來源:m.shnenglu.com/Tim
            感謝您對我的支持!

            留言簿(9)

            隨筆分類(173)

            IT

            Life

            搜索

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            日日躁夜夜躁狠狠久久AV| 94久久国产乱子伦精品免费| 色婷婷噜噜久久国产精品12p| 国内精品久久久久影院网站| 婷婷久久综合九色综合九七| 久久久精品人妻一区二区三区蜜桃| 久久精品国产亚洲沈樵| 欧美久久亚洲精品| 国内精品久久久久伊人av| 久久精品国产亚洲Aⅴ蜜臀色欲| 久久久久久久精品成人热色戒| 午夜不卡888久久| 国内精品人妻无码久久久影院| 久久中文字幕无码专区| 精品国产一区二区三区久久| 人妻系列无码专区久久五月天| 久久精品人成免费| 一本久久免费视频| 久久亚洲电影| 精品人妻伦九区久久AAA片69 | 亚洲综合伊人久久大杳蕉| 国产99久久久国产精品~~牛| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 亚洲七七久久精品中文国产| 99re久久精品国产首页2020| 亚洲国产美女精品久久久久∴| 亚洲&#228;v永久无码精品天堂久久| 国产精品毛片久久久久久久| 亚洲日本va中文字幕久久| 性高朝久久久久久久久久| 色欲综合久久躁天天躁| 精品久久久久久国产牛牛app| 91久久九九无码成人网站| 久久精品国产99国产精品| 91久久九九无码成人网站| 久久久久久毛片免费看| 久久综合色之久久综合| 久久伊人中文无码| 狠狠色丁香婷婷久久综合五月| 国产毛片欧美毛片久久久| 亚洲AV无码久久精品色欲|