• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            查找字符串的哈希方法(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 );
            }

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

            Feedback

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

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

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

            2007-12-23 10:51 by 哈哈
            感謝~很好!
            久久天天躁狠狠躁夜夜2020| 久久国产成人亚洲精品影院| 久久无码AV一区二区三区| 蜜桃麻豆www久久国产精品| 亚洲国产香蕉人人爽成AV片久久| 亚洲伊人久久成综合人影院 | 日韩久久久久久中文人妻| 亚洲va久久久噜噜噜久久狠狠 | 久久丫精品国产亚洲av| 久久久精品午夜免费不卡| 亚洲va久久久久| 精品人妻久久久久久888| 亚洲国产婷婷香蕉久久久久久| 99久久99这里只有免费的精品| 人妻无码精品久久亚瑟影视| 国产精品一久久香蕉国产线看观看 | 成人综合久久精品色婷婷| 99久久99这里只有免费费精品| 久久久久久一区国产精品| 久久国产色AV免费看| 亚洲欧洲精品成人久久曰影片| 久久这里只精品国产99热| 久久天天躁狠狠躁夜夜不卡| 久久99精品国产麻豆婷婷| 国产精品美女久久久m| 亚洲精品无码久久久久| 国产精品中文久久久久久久| 国产精品成人99久久久久| 久久精品国产免费一区| 国产亚洲婷婷香蕉久久精品| 久久免费高清视频| 久久综合九色综合久99| 久久综合鬼色88久久精品综合自在自线噜噜 | 国产叼嘿久久精品久久| 久久夜色精品国产欧美乱| 国产成人精品免费久久久久| 国产精品免费看久久久| 日韩欧美亚洲综合久久影院d3| 精品久久久久久久| 久久久久久青草大香综合精品| 久久人人爽人爽人人爽av |