用于实现Trie的简洁数据结构

问题描述

我正在尝试实现以下论文中提到的节省空间的Trie数据结构。(完成Trie)

Space-Efficient Data Structures for Top-k Completion

通过以上参考,我在制作数据结构时遵循了以下步骤。
1)我用1000个单词创建了Trie树(未压缩)。
2)然后我按级别顺序遍历树并创建了几个向量。

  • vector< bitset<5> > noOfChildren;
    特定节点有多少个子节点。一个节点可以有(0到26个子节点),因此可以用5位表示。

  • vector< bitset<5> > charsInBits;
    特定节点的字符将转换为5位。

  • vector< int> startPosition
    它是向量noOfChildren的前缀和。给出特定节点的第一个子节点的索引。

  • vector<bitset<1> > leafNode
    它存储该节点是否为叶节点。 0代表没有叶子,1代表叶子。

    现在我将所有这些向量数据存储在不同的文件中。(。txt)

(上面的过程是一次过程。)

现在,当我运行程序时,我将从(.txt)文件提取所有数据到各自的向量中。
然后,我处理所有这些向量并成功遍历Trie树。

我有几个问题

  1. 这是紧凑的Trie表示形式,因为我还没有在内存中存储Trie节点地址?

  2. 我存储上述向量数据的文件比给我的实际1000字文件大小更大。所以我很困惑是否压缩了Trie。

  3. 我的程序给我1000多个字“细分错误”。它甚至不创建Trie树。为什么会这样?

    注意:

    • 我已经在程序中实现了上述逻辑,并且我的程序可以完美地运行1000个单词。
    • 我还没有完全执行上述研究论文中所说的话。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)