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

Trie to store duplicate substrings efficiently in C++

本文关键字:字符串 存储 有效地 C++      更新时间:2023-10-16

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

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

现在,可能有许多单词,如{snapple、dapple}、{distinct、吸引}等,其中有3个以上的字母匹配。我想存储这些子词的不同条目(就像上面的例子中的-apple,tract),并让其他人指向它们(比如{s-n-ptr_to_apple,d-ptr_to_apple},{d-I-s-ptr_to_tract,a-t-ptr__tract})。我认为最好在插入单词时处理这个问题,而不是在插入完成后由一个函数来执行。

我需要一些设计方面的帮助,目前我不考虑执行效率,相反,代码/设计应该紧凑。目前,我访问一个节点,检查所有非空的兄弟姐妹(通过遍历兄弟姐妹的子节点)是否与输入单词匹配,然后存储指针,以防有4个单词匹配(但代码越来越长,越来越模糊)。

传统的尝试压缩常用前缀。从本质上讲,您希望压缩常用后缀。最简单的方法是向后构建trie条目。

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