• <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 已棄。

            后綴數(shù)組

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

            理論就不多講了,

            我的實(shí)現(xiàn):


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

            国产成人无码精品久久久久免费| 精品国产青草久久久久福利| 狠狠久久综合伊人不卡| 久久嫩草影院免费看夜色| 中文精品99久久国产| 久久久久99精品成人片欧美| 久久综合久久综合九色| 久久se精品一区精品二区| www亚洲欲色成人久久精品| 久久久久国产精品三级网| 久久久久人妻精品一区二区三区| 久久91亚洲人成电影网站| yy6080久久| 性做久久久久久久久浪潮| 性做久久久久久免费观看| 中文字幕成人精品久久不卡| 久久99精品国产自在现线小黄鸭| 伊人久久大香线焦AV综合影院| 麻豆av久久av盛宴av| 中文字幕乱码人妻无码久久| 狼狼综合久久久久综合网| 久久99精品久久久久久久不卡| 久久er国产精品免费观看2| 日本道色综合久久影院| 亚洲成人精品久久| 久久国产三级无码一区二区| 日本高清无卡码一区二区久久| 久久久九九有精品国产| 久久夜色精品国产亚洲| 久久久精品一区二区三区| 最新久久免费视频| 国产亚洲美女精品久久久| 国产91色综合久久免费| 色综合久久无码中文字幕| 亚洲成av人片不卡无码久久| 99久久精品国产一区二区| 欧美久久综合性欧美| 久久综合欧美成人| 日韩一区二区久久久久久| 99久久99久久精品国产片| 亚洲午夜久久久精品影院 |