一江春水向東流

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

            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)  編輯  收藏 所屬分類: 算法及數據結構
          主站蜘蛛池模板: 邵阳县| 西盟| 清苑县| 松溪县| 山西省| 大余县| 阆中市| 新乐市| 斗六市| 清水县| 宜城市| 七台河市| 车致| 遂溪县| 伊宁县| 济南市| 河北区| 上饶市| 清涧县| 西丰县| 高安市| 湟中县| 柏乡县| 利津县| 平顶山市| 碌曲县| 于田县| 屯门区| 漾濞| 吐鲁番市| 吴旗县| 温宿县| 甘洛县| 谢通门县| 裕民县| 阿勒泰市| 锦屏县| 横峰县| 扎鲁特旗| 克拉玛依市| 拜泉县|