字尾陣列的實現

2021-07-23 21:23:12 字數 1049 閱讀 8354

字尾陣列是處理字串的有力工具。字尾陣列是字尾樹的乙個非常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也並不遜色,而且它比字尾樹所占用的記憶體空間小很多。1

上邊參考的文章中,字尾陣列原理講解的很清楚,但是**實現簡直就是一鍋粥,不知所云。因此我自己實現了一下,原理的話就請參考這篇文章了。

在實現階段,我沒有過多的考慮演算法的效能,也沒有參考該文章所說的2倍增演算法,主要使用了c++容器的一些特性。 

實現步驟如下:

**片段如下:

#include#include#includeusing namespace std;

//字典序比較兩個字串,iter_1 > iter_2 ->return true

bool cmp(string::iterator iter_1, string::iterator iter_2,string::iterator end)

else }

//求出來某個字尾陣列suf的排名

int rank(string str, unsigned suf)

else if ( cmp(str.begin() + suf, iter, str.end()) )

}return rank;

}//建立乙個排名陣列

void set_suffix_rank_array(string str, int suff_rank,unsigned len)

}//建立字尾陣列

void set_suffix_array(int suff_rank, int suff_array, unsigned len)

}//依次將排名相近的兩個字尾陣列從前向後計數(有相同字首)

void set_height_array(string str,int suff_rank, int suff_array,int height, unsigned len)

} cout 不知道是我不會用還是因為csdn的markdown編輯器本身就有問題呢,看著好醜lol

python實現字尾陣列排序

sa i 表示排名為i的字尾的起始字元下標為sa i def build sa s,n,m,c,sa,x,y for i in range 0,n x i s i c ord x i 1 for i in range 1,m c i c i 1 for i in range n 1,1,1 c or...

字尾陣列的基數排序實現

注 不懂基數排序的看這裡 基數排序 基數排序的時間複雜度是 題目 落谷p3809 模板 字尾陣列 c 實現 include using namespace std define infy 0x3f3f3f3f define lowbit x x x define e exp 1 define pi ...

字尾樹 字尾陣列

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