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


            伊人久久大香线蕉AV一区二区| 99国产精品久久| 青青青青久久精品国产h久久精品五福影院1421 | 国产精品久久久久久久久| 亚洲国产另类久久久精品黑人| 99久久精品日本一区二区免费| 久久九九全国免费| 国产精品一区二区久久精品涩爱| 久久国产精品77777| 久久久精品视频免费观看| 久久棈精品久久久久久噜噜| 国产精品99久久久久久www| 香蕉久久久久久狠狠色| 久久九九青青国产精品| 伊人久久大香线蕉综合Av| 国产精品中文久久久久久久| 国产成人久久激情91| 亚洲欧洲日产国码无码久久99| 久久中文精品无码中文字幕| 久久精品国产亚洲AV无码娇色| 亚洲国产精品一区二区久久hs| 久久91精品综合国产首页| 久久99精品久久久久久秒播 | a级成人毛片久久| 亚洲国产欧美国产综合久久| 99精品久久精品一区二区| 亚洲va久久久噜噜噜久久| 无码人妻久久久一区二区三区| 亚洲精品乱码久久久久久自慰| 亚洲国产成人久久精品99 | 国产精品一区二区久久精品涩爱| 99久久精品免费| 精产国品久久一二三产区区别| 久久精品www人人爽人人| 久久精品国产一区二区三区日韩| 天天影视色香欲综合久久| 97精品国产97久久久久久免费| 国产精品99精品久久免费| 国产精品无码久久四虎| 91精品国产高清久久久久久io| 久久亚洲国产精品五月天婷|