【问题标题】:How to calculate the number of nodes in a trie, given a set of words给定一组单词,如何计算 trie 中的节点数
【发布时间】:2018-08-26 23:39:44
【问题描述】:

想知道是否有一种通用算法或技术来计算一个 trie 中有多少节点(以及多少字节)。

假设有一个这样开始的尝试:

   a        t
   p        h
e  p        e  i
   l  s  r  i  s
   e     e  r

ape
apps
apple
the
their
there
this

然后想象有一个包含数千个单词的大型字典。每个单词由一组字母 L 组成,来自字母表 A。所以基本上我们可以生成n 数量的L(单词),比如100,000,各种长度。它们在某些情况下会重叠,因此它在最终尝试中占用的字节数不仅仅是 100,000 x(平均长度)之类的东西。相反,它将是总数的一部分。

我想知道如何计算这个。如果您需要实际生成数据然后对其进行测量,或者如果有一种数学技术可以快速对其进行近似建模。

【问题讨论】:

    标签: string math data-structures trie


    【解决方案1】:

    我认为这对输入数据的影响可能太大,因此您必须对其进行扫描才能得出答案。如果您可以首先对输入数据进行排序,您实际上不必构建尝试:给定已排序的输入,您只需从扫描的每一行的最后一个常见字母中计算新字母。除了记住最后一个字符串,无需任何分配,一次扫描即可找到正确答案。

    以你的例子,处理排序列表:

    1. “猿” - 三个新字母
    2. “apps” - 回到常见的“p”,然后两个新字母 = 5 到目前为止
    3. “apple” - 回到第二个“p”,即最后一个普通字母,然后是两个新字母 = 7
    4. “the”——没有共同点所以回到开头三个字母=10
    5. “他们的” - 两个新字母 = 12
    6. “那里” - 后两个,两个新 = 14
    7. “this” - 后三,二新 = 16

    与您的具有 16 个节点的图表相匹配。

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 2016-06-23
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多