一江春水向東流

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            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 );
          }

          比較經(jīng)典的字符串hash就這些了吧,"ELF Hash Function" <-這個比較常用..?
          posted on 2008-04-07 19:57 allic 閱讀(1756) 評論(0)  編輯  收藏 所屬分類: 算法及數(shù)據(jù)結(jié)構(gòu)
          主站蜘蛛池模板: 莱阳市| 张北县| 阳朔县| 紫云| 高密市| 长海县| 昌平区| 金坛市| 印江| 肥西县| 东安县| 会昌县| 安塞县| 灯塔市| 华安县| 伊川县| 庆城县| 江津市| 永川市| 南充市| 遂宁市| 汨罗市| 龙川县| 公安县| 朝阳县| 江孜县| 大足县| 上犹县| 基隆市| 大冶市| 建宁县| 霍林郭勒市| 海阳市| 海晏县| 呼伦贝尔市| 原阳县| 八宿县| 麟游县| 海安县| 南京市| 阜阳市|