String 在给定一组单词的情况下,如何计算trie中的节点数

String 在给定一组单词的情况下,如何计算trie中的节点数,string,math,data-structures,trie,String,Math,Data Structures,Trie,想知道是否有一种通用算法或技术来计算一个trie中有多少节点(以及多少字节) 假设有一个trie是这样开始的: a t p h e p e i l s r i s e e r ape apps apple the their there this 然后想象有一本包含数千个单词的大词典。每个单词由一组字母组成,这些字母来自字母表a。所以本质上我们可以生成不同长度的n个L(单词),比如100000个。它们在某

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

假设有一个trie是这样开始的:

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

ape
apps
apple
the
their
there
this
然后想象有一本包含数千个单词的大词典。每个单词由一组字母组成,这些字母来自字母表
a
。所以本质上我们可以生成不同长度的
n
L
(单词),比如100000个。它们在某些情况下会重叠,因此在最终trie中占用的字节数将不仅仅是100000 x(平均长度)之类的东西。相反,它将是总数的一小部分


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

我认为这可能会在输入数据上变化太大,因此您必须扫描数据才能得出答案。如果可以首先对输入数据进行排序,则实际上不必构造trytes:给定已排序的输入,您只需从扫描的每一行的最后一个常用字母中计算新字母。除了记住最后一个字符串之外,不需要任何分配,您可以在一次扫描中找到正确的答案

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

  • “猿”-三个新字母
  • “应用程序”-回到常用的“p”,然后两个新字母=5
  • “apple”-返回第二个“p”,这是最后一个常用字母,然后两个新字母=7
  • “the”-没有共同点,所以回到开头,三个字母=10
  • “他们”-两个新字母=12
  • “那里”-后面两个,两个新=14
  • “此”-后三个,两个新=16
  • 它与具有16个节点的图表相匹配