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

            coreBugZJ

            此 blog 已棄。

            后綴數組

            處理字符串的有力武器。。。

            理論就不多講了,

            我的實現:


              1 // txt[ 0..n ), txt[ 0..n-1 ] > 0, txt[ n ] == 0
              2 
              3 // sa[ 1..n ] = [ 0..n-1 ], sa[ 0 ] = n
              4 
              5 // rk[ 0..n-1 ] = [ 1..n ], rk[ n ] = 0
              6 
              7 
              8 
              9 void Da( const unsigned int * txt, int * pn, int * sa, int * rk, int * ht, int * tot, int totSize ) {
             10 
             11         int *= rk, *= ht, *txy, lastRk = totSize - 1, i, j, len, n;
             12 
             13 
             14 
             15         for( i = 0; i <= lastRk; ++i ){
             16 
             17                 tot[ i ] = 0;
             18 
             19         }
             20 
             21         for( n = 0; txt[ n ]; ++n ){
             22 
             23                 ++tot[ txt[ n ] ];
             24 
             25         }
             26 
             27         ++tot[ txt[ *pn = n ] ];
             28 
             29         for( i = 1; i <= lastRk; ++i ){
             30 
             31                 tot[ i ] += tot[ i - 1 ];
             32 
             33         }
             34 
             35         for( i = n; i >= 0--i ){
             36 
             37                 sa[ --tot[ txt[ i ] ] ] = i;
             38 
             39         }
             40 
             41         x[ sa[ 0 ] ] = lastRk = 0;
             42 
             43         for( i = 1; i <= n; ++i ){
             44 
             45                 if( txt[ sa[ i - 1 ] ] != txt[ sa[ i ] ] ){
             46 
             47                         ++lastRk;
             48 
             49                 }
             50 
             51                 x[ sa[ i ] ] = lastRk;
             52 
             53         }
             54 
             55 
             56 
             57         for( len = 1; lastRk < n; len <<= 1 ){
             58 
             59                 j = -1;
             60 
             61                 for( i = n - len + 1; i <= n; ++i ){
             62 
             63                         y[ ++j ] = i;
             64 
             65                 }
             66 
             67                 for( i = 0; i <= n; ++i ){
             68 
             69                         if( sa[ i ] >= len ){
             70 
             71                                 y[ ++j ] = sa[ i ] - len;
             72 
             73                         }
             74 
             75                 }
             76 
             77 
             78 
             79                 for( i = 0; i <= lastRk; ++i ){
             80 
             81                         tot[ i ] = 0;
             82 
             83                 }
             84 
             85                 for( i = 0; i <= n; ++i ){
             86 
             87                         ++tot[ x[ y[ i ] ] ];
             88 
             89                 }
             90 
             91                 for( i = 1; i <= lastRk; ++i ){
             92 
             93                         tot[ i ] += tot[ i - 1 ];
             94 
             95                 }
             96 
             97                 for( i = n; i >= 0--i ){
             98 
             99                         sa[ --tot[ x[ y[ i ] ] ] ] = y[ i ];
            100 
            101                 }
            102 
            103 
            104 
            105                 txy = x;
            106 
            107                 x   = y;
            108 
            109                 y   = txy;
            110 
            111                 x[ sa[ 0 ] ] = lastRk = 0;
            112 
            113                 for( i = 1; i <= n; ++i ){
            114 
            115                         x[ sa[ i ] ] = ( ( y[ sa[ i - 1 ] ] == y[ sa[ i ] ] ) && 
            116 
            117                                          ( y[ sa[ i - 1 ] + len ] == y[ sa[ i ] + len ] )
            118 
            119                                        ) ? lastRk : ++lastRk;
            120 
            121                 }
            122 
            123         }
            124 
            125 
            126 
            127         for( i = 0; i <= n; ++i ){
            128 
            129                 rk[ i ] = x[ i ];
            130 
            131         }
            132 
            133 
            134 
            135         for( ht[ 0 ] = len = i = 0; i < n; ++i ){
            136 
            137                 if( len > 0 ){
            138 
            139                         --len;
            140 
            141                 }
            142 
            143                 j = sa[ rk[ i ] - 1 ];
            144 
            145                 while( txt[ i + len ] == txt[ j + len ] ){
            146 
            147                         ++len;
            148 
            149                 }
            150 
            151                 ht[ rk[ i ] ] = len;
            152 
            153         }
            154 
            155         return;
            156 
            157 }
            158 


            posted on 2011-03-20 19:12 coreBugZJ 閱讀(1308) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm

            久久精品a亚洲国产v高清不卡| 久久久久久无码Av成人影院| 欧美性大战久久久久久| 久久久久久久久久久久久久| 久久99国产精品尤物| 国产农村妇女毛片精品久久| 亚洲精品成人网久久久久久| 久久人人爽人人爽人人片AV不 | 久久青青草原精品影院| 无码任你躁久久久久久久| 精品国产一区二区三区久久久狼| 国产香蕉97碰碰久久人人| 日本强好片久久久久久AAA| 久久久WWW成人| 国产精品久久久久久福利69堂| 久久精品中文字幕第23页| 高清免费久久午夜精品| 亚洲国产欧洲综合997久久| 久久久久国产视频电影| 日本久久久久久中文字幕| 精品国产乱码久久久久久呢 | 久久精品国产亚洲AV高清热| 久久毛片免费看一区二区三区| 丰满少妇高潮惨叫久久久| 久久午夜无码鲁丝片秋霞| 久久影视综合亚洲| 久久精品国产亚洲av瑜伽| 99久久精品费精品国产| 精品国产91久久久久久久 | 91亚洲国产成人久久精品| 久久精品国产亚洲av麻豆小说 | 久久久久久久久久久免费精品| 久久久久四虎国产精品| 国产精品一久久香蕉国产线看| 伊人久久大香线蕉av一区| 久久99久国产麻精品66| 中文字幕日本人妻久久久免费| 亚洲国产美女精品久久久久∴| 亚洲精品乱码久久久久久按摩 | 97超级碰碰碰碰久久久久| 99久久免费国产精品|