【发布时间】:2012-10-12 19:15:23
【问题描述】:
后缀树的最大和最小边数是多少?我知道最大值是 2m-1,但我不明白为什么会这样。
【问题讨论】:
标签: algorithm suffix-tree
后缀树的最大和最小边数是多少?我知道最大值是 2m-1,但我不明白为什么会这样。
【问题讨论】:
标签: algorithm suffix-tree
首先,关于最大边数:
如果您认为边有两种形式,则很容易理解:通向叶节点的边和通向内部节点的边。在下文中,我将假设构建后缀树的字符串长度为N 个字符。
关于通往树叶的边缘。每个后缀必须恰好有一个叶子,并且每个叶子只有一个入站边(并且没有出站边)。所以必须有N 边通向叶子。
关于通向内部节点的边。与叶节点一样,内部节点也只有一个入站边。因此,要确定可能有多少条边通向内部节点,只需确定可以有多少个内部节点即可。那么,内部节点的最大可能数量是多少?
为此,重要的是要看到内部节点仅在分支点处插入到后缀树中,即内部节点的 outbound 边数始终至少为 2(如果有只有一个出站边,内部节点一开始就不会被构建)。但是每个出站边最终都必须通向一个叶节点(可能在经过进一步的内部节点之后)。换句话说,每个插入到树中的内部节点都会使叶子节点的总数至少增加 1。此外,即使一棵没有任何内部节点的树,也必须至少有一条边从根节点出来(除非树是空的)。因此,在一棵非空树中,叶子的总数L必须是
L >= I + 1
其中I 是内部节点的数量。反之,内部节点数为
I <= L - 1 = N - 1
回到原来的问题,通向内节点的边数,正如我们所说,与内节点数相同,因此也受N - 1的约束。
我们得出结论,边的总数是通向叶子 (N) 的边数加上通向内部节点 (<=N-1) 的边数,因此它的 最大值受
N + (N-1) = 2N - 1
quod erat demostrandum.
关于最小边数:这遵循相同的原则,即我们计算通向叶子的边数和通向内部节点的边数,然后将它们相加。
通向叶子的节点数始终为N,即N是可能的最大值和最小值。
但是,通向内部节点的节点数可能为零。例如。当输入字符串没有重复元素时,例如abcdef,恰好有N 边,每个边从根一直到叶子。没有分支点,没有内部节点。因此,通向内部节点的最小边数为 0。
总之,最小边数是N + 0 = N。
【讨论】:
n 节点上的树有 n-1 边。由于后缀树的最大节点数为2n-1,我们得出结论最大边数为2n-2。