• <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 閱讀(1302) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm

            2020国产成人久久精品| 久久国产视频网| 伊人久久大香线蕉综合5g| 久久99国产精品久久| 99久久中文字幕| 欧美一区二区精品久久| 色综合久久最新中文字幕| 久久天堂电影网| 激情综合色综合久久综合| 精品久久久久中文字| 久久久久99精品成人片| 久久天天躁狠狠躁夜夜2020老熟妇| 99热都是精品久久久久久| 久久精品国产99久久香蕉| 久久久久一本毛久久久| 久久久国产视频| 欧美喷潮久久久XXXXx| a级成人毛片久久| 精品免费久久久久国产一区| 久久中文精品无码中文字幕| 伊人久久大香线蕉AV一区二区| 亚洲中文久久精品无码| 久久国产精品久久国产精品| 久久人人爽人爽人人爽av| 久久精品一本到99热免费| 国产欧美一区二区久久| 色综合久久久久综合99| 久久精品国产亚洲77777| 青青青青久久精品国产| 久久人人爽人人爽人人片AV高清| 久久久久亚洲AV无码专区体验 | 久久线看观看精品香蕉国产| 久久久久99精品成人片三人毛片| 久久精品国产亚洲αv忘忧草 | 午夜精品久久久久9999高清| 男女久久久国产一区二区三区| 久久狠狠一本精品综合网| 久久久久AV综合网成人| 色偷偷88欧美精品久久久| 精品综合久久久久久97超人| 久久久黄色大片|