2012-03-14 68 views
2

我要去實現後綴樹給定的字符串,我想應該delcared這樣後綴樹構造

struct suffix 
{ 

char letter; 
suffix * left,*right; 

}; 
suffix *insert(suffix *node,char *s){ 

} 

//我在這裏要構建樹子的所有出現和人物 但不知道如何使用左邊和右邊的部分,這棵樹是按照二進制搜索樹的字符嚴格排序排列和排列的嗎?或者?請幫助我,我不想在網上使用一些代碼,我需要實現它,所以請給我的一些提示,一些小代碼

回答

4

看一看Wikipedia description

Suffix tree

注意,首先,一個後綴樹不是二叉樹讓你實施綱要是根本性的缺陷。

接下來,僅存儲每個節點/分支的單個字符是不夠的;後綴樹分支表示子串,其可以比單個字符長。通常在字符串中存儲子字符串的開始和結束索引,而不是字符串本身;否則後綴樹會消耗大量不必要的內存。

最後,don’t use pointers在這裏。他們什麼都不買,只會造成麻煩。改爲使用類似boost::container::vector<suffix>的東西(我建議使用std::vector<suffix>,但不幸的是standard library containers cannot deal with incomplete types)。

+0

因此,這意味着我應該在插入方法中使用循環?一個循環用於整個字符串,另一個循環用於查看所有後續子字符串並將其添加到節點? – 2012-03-14 14:33:55

+0

@dato那麼你肯定不會繞過一個循環。 – 2012-03-14 14:41:10

+0

對不起回覆,因爲我不在家,當我創建向量我無法訪問爲什麼結構的內容?例如在結構後綴我聲明字符串s,我如何訪問此字符串? – 2012-03-14 14:47:58

4

維基百科是一個開始。

但實際上這樣做是要了解後綴樹構造算法,Weiner或Ukkonen算法。

的Ukkonen算法比較簡單: http://europa.zbh.uni-hamburg.de/pubs/pdf/GieKur1997.pdf

而且這個環節少的學術和更實用: http://www.cise.ufl.edu/~sahni/dsaaj/enrich/c16/suffix.htm

嘗試開始瞭解的算法。

之後,祝你好運,這是最棘手的數據結構之一。唯一最糟糕的是後綴樹的壓縮和優化版本。

但是所有優秀的程序員都喜歡大挑戰。