一江春水向東流

          做一個有思想的人,期待與每一位熱愛思考的人交流,您的關注是對我最大的支持。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks
          // ?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" <-這個比較常用..?
          posted on 2008-04-07 19:57 allic 閱讀(1751) 評論(0)  編輯  收藏 所屬分類: 算法及數據結構
          主站蜘蛛池模板: 德阳市| 波密县| 永安市| 望江县| 娱乐| 临泽县| 巴彦淖尔市| 准格尔旗| 九江县| 昭觉县| 马山县| 长汀县| 沅江市| 古丈县| 安阳县| 新田县| 肇东市| 苍南县| 沙雅县| 德保县| 古交市| 日土县| 尤溪县| 汶川县| 仪征市| 岳阳县| 特克斯县| 仙居县| 丹江口市| 乳源| 阿拉尔市| 嵩明县| 昂仁县| 乌拉特后旗| 濮阳市| 尉氏县| 崇阳县| 开化县| 辽宁省| 鞍山市| 柏乡县|