给定一组单词,如何计算特里节点的数量

时间:2018-08-26 23:39:44

标签: string math data-structures 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组成。因此,从本质上讲,我们可以生成nL的(单词)数量,例如100,000,各种长度。它们在某些情况下会重叠,因此在最后的Trie中占用的字节数将不仅仅是100,000 x(平均长度)。而是占总数的一小部分。

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

1 个答案:

答案 0 :(得分:1)

我认为输入数据的差异可能太大,因此您将不得不对其进行扫描以找出答案。如果您可以先对输入数据进行排序,则实际上不必构造尝试:给定排序后的输入,您只需对扫描的每一行中的最后一个公共字母中的新字母进行计数即可。除了记住最后一个字符串,不需要任何分配,而且您可以在一次扫描中找到正确的答案。

以您的示例为例,处理排序列表:

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

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