我编写了一个用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个单词的匹配(但代码正在获取更长,更混乱)。
答案 0 :(得分:2)
传统尝试压缩公共前缀。实质上,您希望压缩常见后缀。最简单的方法是向后构建你的trie条目。
现在,这意味着您必须将字符串向后读入trie。