• <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女| 久久综合丁香激情久久| 久久精品视屏| 久久人人添人人爽添人人片牛牛 | 精品综合久久久久久97| 青草国产精品久久久久久| 久久99精品久久久久久| 亚洲午夜精品久久久久久app| 狠狠色丁香久久婷婷综| 久久久久亚洲AV综合波多野结衣| 日产精品久久久一区二区| 久久精品成人欧美大片| 久久久久亚洲av无码专区喷水| 欧美麻豆久久久久久中文| 99久久99久久| 久久中文字幕人妻丝袜| 久久久中文字幕日本| 曰曰摸天天摸人人看久久久| 一本久久a久久精品亚洲| 久久亚洲色一区二区三区| 日本一区精品久久久久影院| 囯产极品美女高潮无套久久久| 色婷婷久久综合中文久久一本| 91久久精品视频| 欧美综合天天夜夜久久| 国产精品免费福利久久| 日韩精品久久无码人妻中文字幕| 亚洲国产成人精品女人久久久| 久久久久国产日韩精品网站| 久久综合久久综合久久| 久久国产免费观看精品| 国产精品久久久久久影院 | 久久一本综合| 久久精品国产只有精品66| 国产一区二区三区久久| a级成人毛片久久| 久久青草国产手机看片福利盒子| AV狠狠色丁香婷婷综合久久| 精品九九久久国内精品| 国内精品伊人久久久久影院对白| 色成年激情久久综合|