1

我编写了一个程序来用 C++ 实现一个基本的 Trie,每个节点都有 26 个子指针(用于英文字母),Node 类如下所示:

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

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

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

4

1 回答 1

2

传统的尝试压缩常见的前缀。本质上,您想要压缩常见的后缀。最简单的方法是向后构建您的 trie 条目。

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

于 2012-12-06T00:46:15.490 回答