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

            AV色综合久久天堂AV色综合在| 久久国产免费直播| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 99久久婷婷免费国产综合精品| 久久香蕉一级毛片| 一级女性全黄久久生活片免费| 久久精品国产亚洲AV大全| 久久天天日天天操综合伊人av| 精品久久人人爽天天玩人人妻| 99久久99久久精品国产| 色偷偷偷久久伊人大杳蕉| 久久久久久国产精品美女| 亚洲中文字幕无码久久2020 | 狠狠综合久久综合88亚洲| 久久精品国产91久久综合麻豆自制| 久久91精品国产91久| 久久96国产精品久久久| 久久九九兔免费精品6| 久久国产精品偷99| 久久精品国产免费| 人人狠狠综合久久88成人| 久久精品中文字幕大胸| 久久精品女人天堂AV麻| 久久噜噜电影你懂的| 奇米影视7777久久精品| 国内精品久久久久影院老司| 久久久久久久亚洲精品| 国产精品美女久久久久AV福利| 久久人人爽人人爽人人片av高请 | 一本久久a久久精品亚洲| 久久久久久国产a免费观看黄色大片 | 丁香五月综合久久激情| 久久精品www| 精品久久人人爽天天玩人人妻| 精品国产乱码久久久久久郑州公司| 久久人妻无码中文字幕| 久久天天躁狠狠躁夜夜avapp| 亚洲国产成人精品91久久久 | 99久久国产综合精品麻豆| 久久精品欧美日韩精品| 99久久精品午夜一区二区|