字尾陣列 heigh

2021-07-25 05:59:01 字數 949 閱讀 4500

字首陣列:height陣列,height[i]=suffix(sa[i-1])和suffix(sa[i])的最長公共字首,也就是排名相鄰的兩個字尾的最長公共字首

它有以下兩個性質:

1:對於i和j,假設有rank[ i ]最小值

2:定義h[i]=height[rank[i]],也就是suffix(i)和在它前一名的字尾的最長公共字首。那我們有h[i]≥h[i-1]-1。

證明:設suffix(k)是排在suffix(i-1)前一名的字尾,則它們的最長公共字首是h[i-1]。那麼suffix(k+1)將排在suffix(i)的前面(這裡要求h[i-1]>1。如果h[i-1]≤1,原式右邊小於等於0,顯然成立)並且suffix(k+1)和suffix(i)的最長公共字首是h[i-1]-1,所以suffix(i)和在它前一名的字尾的最長公共字首至少是h[i-1]-1。

如圖,因為suffix(i)與suffix(i-1)排名不一定相鄰,又因為排名相鄰的兩個字尾擁有的字首是最多的(即多於h[i]),所以h[i]一定會大於等於h[i-1]-1。

按照h[1],h[2],……,h[n]的順序計算,並利用h陣列的性質,時間複雜度可以降為o(n)。

**:

void get_height(int n)  

}

推薦:《字尾陣列—sa與rank》

字尾樹 字尾陣列

在字串處理當中,字尾樹和字尾陣列都是非常有力的工具,其中字尾樹大家了解得比較多,關於字尾陣列則很少見於國內的資料。其實字尾陣列是字尾樹的乙個非 常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽 中字尾...

字尾樹 字尾陣列

我們考慮將乙個串的所有字尾插入乙個trie中,得到的trie就是字尾trie。我們可以發現,樹上有分叉或者是字尾節點的點的個數是o l en o len o len 個,這個後面解釋,於是把沒有分支並且不是字尾節點的點壓縮到一起,就變成了字尾樹。不難發現,字尾樹可以表示該字串的所有子串。下面分析一下...

字尾陣列入門,字尾陣列模板整理

我自己懶得寫,就是想寫個部落格儲存下大佬的部落格位址 點這模板題 大佬的模板 include include include include include include include include include include include define inf 0x3f3f3f3f d...