【发布时间】:2015-05-31 15:09:23
【问题描述】:
假设我们有一个从英语词典中 A-Z 的所有词典单词的列表。
我要对这些单词列表执行三个案例:
1) 找出“以”特定片段的所有单词
eg: If my fragment is 'car', word 'card' should be returned
2) 找出所有“包含”片段作为子字符串的单词
eg: If my fragment is 'ace', word 'facebook' should be returned
3) 找出所有以“结尾”特定片段的单词
eg: If my fragment is 'age', word 'image' should be returned
在互联网上进行了一些搜索后,我发现 1) 可以通过 trie/压缩的 trie 来完成,3) 可以通过后缀树来完成。
我不确定如何实现 2)。 另外有没有更好的场景可以处理所有这三种情况?因为同时维护前缀和后缀树可能是一项内存密集型任务。
如果有其他需要注意的地方,请告诉我。
提前致谢。
PS:我将使用 C++ 来实现这一点
编辑 1:暂时我在此处的巨大帮助下构建了一个后缀树。
Single Word Suffix Tree Generation in C Language
在这里,我需要为整个英语词典单词构建一个后缀树。所以我应该创建一个
a) 为每个单词单独的后缀树 OR
b) 为所有单词创建一个通用后缀树。
我不确定如何在 a) 情况下进行子字符串匹配时跟踪每个单词的单个树
任何指针?
【问题讨论】:
-
1) 和 3) 是 2) 的子情况(即前缀和后缀都是子字符串)。所以你真正需要解决的是2),这当然是最难的一个:-)
标签: c++ trie suffix-tree prefix-tree