尝试在C ++中有效地存储重复的子串

时间:2012-12-05 23:06:31

标签: c++ trie

我编写了一个用C ++实现基本Trie的程序,每个节点有26个子指针(用于英文字母),Node类看起来像这样:

class Node
{
public:
       Node* parent;
       Node* child[26];
       unsigned int number_of_children;
....
}

现在,可能有很多单词,如{snapple,dapple},{distract,attract}等,其中超过3个字母匹配。我想存储这些子词的不同条目(例如上面的例子 - apple,tract),让其他人指向它们(比如{sn-ptr_to_apple,d-ptr_to_apple},{dis-ptr_to_tract,at-ptr_to_tract} )。我认为最好在插入一个单词时自己处理,而不是在插入完成后执行此功能。

我需要一些帮助来设计它,目前我不是在考虑执行效率,而是代码/设计应该是紧凑的。目前,我访问一个节点并检查所有非空兄弟(通过遍历兄弟的子节点)与输入单词匹配,然后存储指针,以防有4个单词的匹配(但代码正在获取更长,更混乱)。

1 个答案:

答案 0 :(得分:2)

传统尝试压缩公共前缀。实质上,您希望压缩常见后缀。最简单的方法是向后构建你的trie条目。

现在,这意味着您必须将字符串向后读入trie。