• <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 哈哈
            感謝~很好!
            亚洲午夜无码久久久久| 思思久久精品在热线热| 久久国产精品久久久| 青青草原1769久久免费播放| 精品国产婷婷久久久| 欧美日韩成人精品久久久免费看| 久久久国产打桩机| 国产精品久久久久久久| 亚洲人成网站999久久久综合| 久久精品a亚洲国产v高清不卡| 精品久久久久久久久久久久久久久 | 久久久久久国产精品美女| 2021久久精品免费观看| 四虎国产精品免费久久5151| 久久久久亚洲精品日久生情| 国产激情久久久久影院老熟女免费 | 91久久精品国产成人久久| 东方aⅴ免费观看久久av| 99久久人人爽亚洲精品美女| 亚洲av伊人久久综合密臀性色| 久久99久久无码毛片一区二区| 久久久久亚洲精品天堂| 久久久久高潮综合影院| 人人狠狠综合久久亚洲| 国产高潮久久免费观看| 成人久久精品一区二区三区 | 亚洲国产成人精品无码久久久久久综合| 亚洲午夜久久久久久久久久 | 久久久中文字幕日本| 久久久久久久尹人综合网亚洲| 影音先锋女人AV鲁色资源网久久| 欧美性猛交xxxx免费看久久久| 成人a毛片久久免费播放| 99国产精品久久久久久久成人热| 欧美大香线蕉线伊人久久| 一本色道久久88—综合亚洲精品| 色青青草原桃花久久综合| 热久久最新网站获取| 亚洲中文久久精品无码| AV无码久久久久不卡网站下载| 国产精品99久久久久久人|