2012-03-14 50 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

尝试开始了解的算法。

之后,祝你好运,这是最棘手的数据结构之一。唯一最糟糕的是后缀树的压缩和优化版本。

但是所有优秀的程序员都喜欢大挑战。