構造 字尾陣列求逆

2021-06-04 18:36:45 字數 634 閱讀 2619

根據sa陣列反求原陣列,只能26小寫字母。

有了sa,自然有了rank,從原陣列最後的往前考慮,我們盡量要將原陣列用小的字符集表示,因為只有26個字母可以表示,那麼排名比當前列舉的小一位的的字串,如果第二位比其小的話,那麼排名比當前列舉的小一位的的字串的首位可與其首位相同,同樣的向比它大的考慮一遍則可使字符集盡量小。

#include #include #include #include const int oo=1073741819;

int n,i,a[500005],rk[500006],sa[500006],min,s;

char ch[500005];

void init()

{ int i,k;

scanf("%d\n",&n);

for (i=1;i<=n;i++) scanf("%d",&sa[i]),rk[sa[i]]=i;

k=rk[n],a[n]=0;

for (i=k;i>=2;i--)

if (rk[sa[i-1]+1]rk[sa[i]+1]) a[sa[i+1]]=a[sa[i]];else a[sa[i+1]]=a[sa[i]]+1;

min=oo;

for (i=1;i<=n;i++)

if (a[i]

求字尾式 逆波蘭式 的步驟

原表示式 a b c d e f 為表示式結束符號 字尾式 abcde f x 為運算子定義優先順序 1 0 1 1 2 2 3 從原表示式求字尾式的規則為 1.設定運算子棧 2.假設表示式的結束符為 我們需要預設運算子棧底元素為 3.掃瞄表示式,若當前字元是運算元,則直接傳送給字尾表示式 4.若當...

基於XML字尾陣列構造演算法

基於 xml字尾陣列構造演算法 1 引言 xml extensible markup language 是由w3c開發的乙個標準,xml 1.0是全球接受的規範。xml文件是乙個既包含資料,又包含描述資料結構標記的純文字文件。任何兩個要交換xml資料的應用程式都能進行交換,與平台或程式語言無關。因此...

字尾陣列倍增構造演算法說解

字尾陣列,作為一種高效的字串處理資料結構,沒有雜湊演算法的隨機性,也沒有 kmp 演算法的侷限性,是作為一種較為全面而程式設計思想不甚複雜的資料結構加以應用。字尾陣列應用最為廣泛的一種構建方法是倍增構造,時間複雜度為 o nlogn 其中 n 為待處理字串的長度。我們不妨設待處理的字串儲存在 s 1...