后缀树中的最大和最小节点数

时间:2012-11-15 00:37:15

标签: algorithm suffix-tree

后缀树中的最大和最小节点数是多少?我该如何证明呢?

1 个答案:

答案 0 :(得分:10)

假设输入文本的长度为N个字符,则最小节点数(包括根节点和所有叶节点)为N+1,最大节点数,包括根和叶,是2N-1

最低证明:每个后缀必须至少有一个叶节点,并且有N个后缀。不需要任何内部节点,例如:如果文本是一系列唯一符号abc$,则没有分支,因此在结果后缀树中没有内部节点:

enter image description here

因此,在N个节点中,最小值是0个叶子,1个内部节点和N+1个根节点。

最大证明:叶子节点的数量永远不会大于N,因为叶子节点是后缀结束的地方,并且您不能超过{{ 1}}长度为N的字符串中的不同后缀。 (事实上​​,你总是有完全N个不同的后缀,因此确切地说N叶节点。)根节点总是精确N,所以问题是内部的最大数量是多少节点。每个内部节点在树中引入一个分支(因为后缀树的内部节点至少有2个子节点)。每个新分支最终必须至少导致一个额外的叶节点,因此如果您有1个内部节点,则必须至少有K个叶节点,并且根节点的存在至少需要一个额外的叶子(除非树是空的)。但叶子节点的数量受K+1的限制,因此内部节点的最大数量由N限制。这样可以产生N-2个叶子,N根,最多1个内部节点,N-2

要看到这不仅是理论上限,而且一些后缀树实际上达到了这个最大值,可以考虑一个只有一个重复字符的字符串:'aaa $'。确认此后缀树有7个节点(包括root和leaves):

enter image description here

摘要:很明显,唯一真正的变量是内部节点的数量;对于所有后缀树,根和叶的数量始终为2N-11,而内部节点的数量在N0之间变化。