后缀树中的最大和最小节点数是多少?我该如何证明呢?
答案 0 :(得分:10)
假设输入文本的长度为N
个字符,则最小节点数(包括根节点和所有叶节点)为N+1
,最大节点数,包括根和叶,是2N-1
。
最低证明:每个后缀必须至少有一个叶节点,并且有N
个后缀。不需要任何内部节点,例如:如果文本是一系列唯一符号abc$
,则没有分支,因此在结果后缀树中没有内部节点:
因此,在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):
摘要:很明显,唯一真正的变量是内部节点的数量;对于所有后缀树,根和叶的数量始终为2N-1
和1
,而内部节点的数量在N
和0
之间变化。