• <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>

            Tauruser

            Enjoy Every Day
            posts - 34, comments - 95, trackbacks - 0, articles - 5
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            查找字符串的哈希方法(zz)

            Posted on 2006-06-21 15:39 Tauruser 閱讀(2367) 評論(2)  編輯 收藏 引用

            ?

            // ?RS?Hash?Function
            unsigned? int ?RSHash( char ? * str)
            {
            ????????unsigned?
            int ?b? = ? 378551 ;
            ????????unsigned?
            int ?a? = ? 63689 ;
            ????????unsigned?
            int ?hash? = ? 0 ;

            ????????
            while ?( * str)
            ????????
            {
            ????????????????hash?
            = ?hash? * ?a? + ?( * str ++ );
            ????????????????a?
            *= ?b;
            ????????}


            ????????
            return ?(hash? & ? 0x7FFFFFFF );
            }


            // ?JS?Hash?Function
            unsigned? int ?JSHash( char ? * str)
            {
            ????????unsigned?
            int ?hash? = ? 1315423911 ;

            ????????
            while ?( * str)
            ????????
            {
            ????????????????hash?
            ^= ?((hash? << ? 5 )? + ?( * str ++ )? + ?(hash? >> ? 2 ));
            ????????}


            ????????
            return ?(hash? & ? 0x7FFFFFFF );
            }


            // ?P.?J.?Weinberger?Hash?Function
            unsigned? int ?PJWHash( char ? * str)
            {
            ????????unsigned?
            int ?BitsInUnignedInt? = ?(unsigned? int )( sizeof (unsigned? int )? *
            8 );
            ????????unsigned?
            int ?ThreeQuarters???? = ?(unsigned? int )((BitsInUnignedInt?? * ? 3 )
            ?
            / ? 4 );
            ????????unsigned?
            int ?OneEighth???????? = ?(unsigned? int )(BitsInUnignedInt? / ? 8 );

            ????????unsigned?
            int ?HighBits????????? = ?(unsigned? int )( 0xFFFFFFFF )? << ?(BitsInU
            nignedInt?
            - ?OneEighth);
            ????????unsigned?
            int ?hash????????????? = ? 0 ;
            ????????unsigned?
            int ?test????????????? = ? 0 ;

            ????????
            while ?( * str)
            ????????
            {
            ????????????????hash?
            = ?(hash? << ?OneEighth)? + ?( * str ++ );
            ????????????????
            if ?((test? = ?hash? & ?HighBits)? != ? 0 )
            ????????????????
            {
            ????????????????????????hash?
            = ?((hash? ^ ?(test? >> ?ThreeQuarters))? & ?( ~ HighBits)
            );
            ????????????????}

            ????????}


            ????????
            return ?(hash? & ? 0x7FFFFFFF );
            }


            // ?ELF?Hash?Function
            unsigned? int ?ELFHash( char ? * str)
            {
            ????????unsigned?
            int ?hash? = ? 0 ;
            ????????unsigned?
            int ?x???? = ? 0 ;

            ????????
            while ?( * str)
            ????????
            {
            ????????????????hash?
            = ?(hash? << ? 4 )? + ?( * str ++ );
            ????????????????
            if ?((x? = ?hash? & ? 0xF0000000L )? != ? 0 )
            ????????????????
            {
            ????????????????????????hash?
            ^= ?(x? >> ? 24 );
            ????????????????????????hash?
            &= ? ~ x;
            ????????????????}

            ????????}


            ????????
            return ?(hash? & ? 0x7FFFFFFF );
            }


            // ?BKDR?Hash?Function
            unsigned? int ?BKDRHash( char ? * str)
            {
            ????????unsigned?
            int ?seed? = ? 131 ;? // ?31?131?1313?13131?131313?etc..
            ????????unsigned? int ?hash? = ? 0 ;

            ????????
            while ?( * str)
            ????????
            {
            ????????????????hash?
            = ?hash? * ?seed? + ?( * str ++ );
            ????????}


            ????????
            return ?(hash? & ? 0x7FFFFFFF );
            }


            // ?SDBM?Hash?Function
            unsigned? int ?SDBMHash( char ? * str)
            {
            ????????unsigned?
            int ?hash? = ? 0 ;

            ????????
            while ?( * str)
            ????????
            {
            ????????????????hash?
            = ?( * str ++ )? + ?(hash? << ? 6 )? + ?(hash? << ? 16 )? - ?hash;
            ????????}


            ????????
            return ?(hash? & ? 0x7FFFFFFF );
            }


            // ?DJB?Hash?Function
            unsigned? int ?DJBHash( char ? * str)
            {
            ????????unsigned?
            int ?hash? = ? 5381 ;

            ????????
            while ?( * str)
            ????????
            {
            ????????????????hash?
            += ?(hash? << ? 5 )? + ?( * str ++ );
            ????????}


            ????????
            return ?(hash? & ? 0x7FFFFFFF );
            }


            // ?AP?Hash?Function
            unsigned? int ?APHash( char ? * str)
            {
            ????????unsigned?
            int ?hash? = ? 0 ;
            ????????
            int ?i;

            ????????
            for ?(i = 0 ;? * str;?i ++ )
            ????????
            {
            ????????????????
            if ?((i? & ? 1 )? == ? 0 )
            ????????????????
            {
            ????????????????????????hash?
            ^= ?((hash? << ? 7 )? ^ ?( * str ++ )? ^ ?(hash? >> ? 3 ));
            ????????????????}

            ????????????????
            else
            ????????????????
            {
            ????????????????????????hash?
            ^= ?( ~ ((hash? << ? 11 )? ^ ?( * str ++ )? ^ ?(hash? >> ? 5 )));
            ????????????????}

            ????????}


            ????????
            return ?(hash? & ? 0x7FFFFFFF );
            }

            比較經(jīng)典的字符串hash就這些了吧,"ELF Hash Function" <-這個比較常用..

            Feedback

            # re: 查找字符串的哈希方法(zz)  回復(fù)  更多評論   

            2007-10-05 17:04 by 秒大刀
            不錯,好東西
            非常感謝!

            # re: 查找字符串的哈希方法(zz)  回復(fù)  更多評論   

            2007-12-23 10:51 by 哈哈
            感謝~很好!

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲va久久久噜噜噜久久男同| 久久这里只有精品18| 国产精品久久久久影院嫩草| jizzjizz国产精品久久| 97精品伊人久久久大香线蕉| 久久久久久久久久久久中文字幕 | 久久久久亚洲AV成人网人人软件| 国产午夜久久影院| 国产精品va久久久久久久| 思思久久好好热精品国产| 日韩av无码久久精品免费| 亚洲一区二区三区日本久久九| 久久久久综合中文字幕| 久久人人爽爽爽人久久久| 青青久久精品国产免费看| 久久久久中文字幕| 久久无码中文字幕东京热| 久久综合狠狠综合久久激情 | 色欲综合久久躁天天躁蜜桃| 99久久伊人精品综合观看| 亚洲欧洲日产国码无码久久99| 久久国产高清一区二区三区| 日韩人妻无码一区二区三区久久| 久久久精品视频免费观看| 国产成人精品久久免费动漫| 中文字幕无码久久久| 青青草国产97免久久费观看| 免费国产99久久久香蕉| 国内精品久久久人妻中文字幕| 少妇久久久久久被弄高潮| 狠狠精品久久久无码中文字幕| 伊人久久综合热线大杳蕉下载| 久久精品亚洲日本波多野结衣 | 久久综合综合久久综合| 性做久久久久久久久久久| 久久久久一级精品亚洲国产成人综合AV区 | 天天综合久久一二三区| 99久久精品国产毛片| 国产精品久久影院| 色综合久久天天综合| 久久免费视频网站|