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


            人妻久久久一区二区三区| 久久性生大片免费观看性| 伊人久久无码中文字幕| 久久久久99这里有精品10| 91麻豆国产精品91久久久| 亚洲国产精品无码成人片久久| 久久久久亚洲AV无码永不| 久久精品草草草| 久久人人爽人人爽人人片AV不| 伊人久久大香线蕉av一区| 久久亚洲欧美日本精品| 综合久久精品色| 91久久香蕉国产熟女线看| 色综合久久夜色精品国产| 成人综合伊人五月婷久久| 久久婷婷五月综合色99啪ak| 久久亚洲AV成人无码国产| 久久国产精品一区| 成人国内精品久久久久一区| 久久综合亚洲色HEZYO国产| 国产精品久久成人影院| 伊人精品久久久久7777| 91精品国产综合久久四虎久久无码一级| 欧美午夜A∨大片久久 | 国产精品VIDEOSSEX久久发布| 久久久www免费人成精品| 久久国产精品免费一区二区三区| 久久综合给合久久狠狠狠97色| 亚洲欧美日韩精品久久亚洲区| 亚洲国产成人久久精品动漫| 久久久久久毛片免费播放| 久久久久亚洲AV成人网人人网站| 久久播电影网| 久久久无码精品亚洲日韩软件| 久久精品国内一区二区三区| 国产成人久久精品一区二区三区| 久久久久亚洲av综合波多野结衣| 国内精品伊人久久久影院| 日韩欧美亚洲国产精品字幕久久久 | 精品熟女少妇AV免费久久| 久久人人爽人人爽人人片AV东京热 |