青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

無我

讓內心永遠燃燒著偉大的光明的精神之火!
靈活的思考,嚴謹的實現
豪邁的氣魄、頑強的意志和周全的思考

hash函數——djb2、sdbm、lose lose

本文內容轉自于http://www.cse.yorku.ca/~oz/hash.html。因為他對給出了幾個非常好的hash函數,而其中的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 閱讀(2691) 評論(1)  編輯 收藏 引用 所屬分類: C/C++語言

評論

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

頂!  回復  更多評論   

<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

導航

統(tǒng)計

公告

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

留言簿(9)

隨筆分類(173)

IT

Life

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品午夜| 亚洲第一福利社区| 亚洲一级在线| 国产精品久久久久久久第一福利| 一本久道久久久| 亚洲人妖在线| 国产精品另类一区| 久久精品一区二区三区不卡| 午夜精品久久久久久久蜜桃app| 国产精品欧美在线| 久久久久国色av免费观看性色| 久久成人精品电影| 亚洲国产欧美一区二区三区同亚洲| 亚洲风情在线资源站| 欧美日韩国产美| 久久黄色网页| 欧美成人r级一区二区三区| 亚洲精品中文字幕在线| 99在线精品视频| 国产在线成人| 亚洲精品一区二区三区在线观看| 国产精品九九久久久久久久| 久久精品女人的天堂av| 免费短视频成人日韩| 在线视频精品一| 久久国产一区二区三区| 亚洲人成绝费网站色www| 一区二区欧美在线| 精品成人a区在线观看| 亚洲精品在线观看免费| 国产乱肥老妇国产一区二| 免费欧美网站| 国产精品国产三级国产aⅴ无密码| 久久女同精品一区二区| 欧美精品电影| 久久夜色精品国产亚洲aⅴ| 欧美国产欧美亚洲国产日韩mv天天看完整 | 另类国产ts人妖高潮视频| 9人人澡人人爽人人精品| 欧美亚洲免费在线| 一道本一区二区| 久久综合久久久久88| 亚洲专区一区| 欧美国产精品久久| 久久久噜噜噜久久久| 欧美午夜片在线观看| 欧美激情精品久久久六区热门 | 久久久久久一区二区| 亚洲专区一区二区三区| 免费视频一区| 老司机精品视频网站| 国产精品日韩精品欧美在线| 91久久在线| 亚洲大胆在线| 欧美在线999| 新狼窝色av性久久久久久| 欧美日韩国产电影| 亚洲高清视频的网址| 在线日韩一区二区| 久久久www成人免费无遮挡大片| 午夜精品视频在线观看| 欧美日韩国产另类不卡| 亚洲区一区二区三区| 亚洲国产精品久久久久婷婷884| 欧美在线视频免费| 久久精品国产清自在天天线 | 欧美激情免费在线| 嫩草国产精品入口| 在线观看日韩av电影| 久久国产精品毛片| 久久只精品国产| 在线观看国产一区二区| 久久露脸国产精品| 久热re这里精品视频在线6| 国产一区二区三区四区五区美女 | 午夜视黄欧洲亚洲| 欧美淫片网站| 好吊色欧美一区二区三区视频| 欧美一区=区| 欧美aⅴ一区二区三区视频| 在线观看视频欧美| 蜜桃av综合| 亚洲区国产区| 亚洲欧洲99久久| 国产欧美日韩综合| 久久久国产91| 亚洲激情另类| 欧美一级视频一区二区| 国产日韩亚洲欧美精品| 久久爱www| 亚洲国产另类久久精品| 亚洲一区二区三区四区在线观看 | 亚洲国产精品视频| 欧美国产精品| 亚洲午夜极品| 久久综合激情| av成人动漫| 国产欧美日韩三区| 久久亚洲捆绑美女| 一本色道久久综合一区| 久久久久免费视频| 亚洲精品人人| 国产精品麻豆成人av电影艾秋| 亚洲欧美综合v| 亚洲第一二三四五区| 香蕉国产精品偷在线观看不卡| 精品动漫3d一区二区三区免费版 | 欧美一区三区三区高中清蜜桃 | 久久久www成人免费毛片麻豆| 亚洲承认在线| 国产精品欧美日韩| 欧美电影电视剧在线观看| 亚洲一级片在线看| 亚洲国产一区二区三区a毛片| 欧美一级午夜免费电影| 日韩亚洲精品在线| 黄色日韩网站| 国产精品老牛| 欧美日韩在线观看一区二区三区 | 亚洲欧美日韩综合| 亚洲国产精品一区二区久| 欧美在线黄色| 亚洲天堂av高清| 亚洲国产欧美日韩| 国产主播一区二区三区四区| 欧美日韩亚洲综合一区| 久热精品视频在线观看| 午夜精品一区二区三区四区| 日韩亚洲欧美一区| 亚洲国产婷婷香蕉久久久久久| 久久久久高清| 久久黄色级2电影| 亚洲欧美中文在线视频| 国产精品99久久久久久久久| 亚洲高清视频一区二区| 国产亚洲欧美日韩在线一区| 国产精品久久久久久久第一福利| 欧美激情a∨在线视频播放| 久久综合999| 久久久蜜臀国产一区二区| 午夜一区二区三区不卡视频| 亚洲伊人伊色伊影伊综合网| 一本久久知道综合久久| 99国产一区| 在线性视频日韩欧美| 99视频有精品| 亚洲图片欧美午夜| 亚洲一区二区在线免费观看视频| 在线午夜精品| 亚洲在线中文字幕| 亚洲综合电影一区二区三区| 亚洲欧美清纯在线制服| 欧美亚洲免费高清在线观看| 欧美在线影院| 久久青草久久| 欧美激情小视频| 欧美视频在线一区| 国产精品久久久久久亚洲毛片| 欧美午夜在线一二页| 国产精品日韩在线一区| 国产九区一区在线| 伊人春色精品| 日韩视频不卡| 亚洲视频在线一区| 久久9热精品视频| 久久婷婷国产麻豆91天堂| 免费在线看成人av| 91久久精品美女高潮| 一区二区激情小说| 欧美一区二区高清在线观看| 久久久亚洲国产天美传媒修理工 | 国产精品卡一卡二卡三| 国产一区二区精品久久| 亚洲第一伊人| 亚洲欧美视频在线观看视频| 久久久综合激的五月天| 亚洲大片免费看| 亚洲影院一区| 蜜臀va亚洲va欧美va天堂| 欧美日韩国产三区| 国产真实乱偷精品视频免| 亚洲伦理在线| 欧美自拍偷拍| 91久久久在线| 久久精品国产77777蜜臀| 欧美国产日本| 国产香蕉97碰碰久久人人| 91久久精品国产91久久性色| 亚洲欧美国产高清va在线播| 免费在线成人av| 国产精品99久久99久久久二8| 久久一区亚洲| 国产欧美一区二区色老头| 亚洲日本免费| 久久亚洲色图| 亚洲一区精品电影| 欧美激情第五页| 一区精品久久| 欧美在线视频日韩| 亚洲美女视频网|