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