后缀树中的最大和最小边数

时间:2012-10-12 19:15:23

标签: algorithm suffix-tree

后缀树中的最大和最小边数是多少?我知道最大值是2m-1,但我不明白为什么会这样。

1 个答案:

答案 0 :(得分:3)

首先,关于最大边数:

如果您认为边缘有两种形式,那么很容易理解:通向叶节点的边缘和通向内部节点的边缘。在下文中,我将假设为后缀树构造的字符串的长度为N个字符。

  1. 关于导致树叶的边缘。每个后缀必须只有一个叶子,每个叶子只有一个入站边缘(没有出站边缘)。因此必须有N个边缘导致离开。

  2. 关于通往内部节点的边缘。与叶节点一样,内部节点也各自只有一个入站边。因此,为了确定可能存在多少通向内部节点的边缘,足以确定可以存在多少个内部节点。那么,内部节点的最大可能数量是多少?

    为此,重要的是要看到内部节点仅插入到分支点的后缀树中,即内部节点的出站边的数量始终至少为2(如果有的话)只有一个出站边,内部节点不会在第一个位置构建)。但是每个出站边缘必须最终导致叶节点(可能在经过更多内部节点之后)。换句话说,插入到树中的每个内部节点将叶节点的总数增加至少1.此外,即使没有内部节点的树也必须至少有一个边缘从根节点出来(除非树是空)。因此,在非空树中,叶L的总数必须为

    L >= I + 1
    

    其中I是内部节点的数量。相反,内部节点的数量是

    I <= L - 1 = N - 1
    

    回到原始问题,正如我们所说,导致内部节点的边数与内部节点的数量相同,因此它也受N - 1的约束。

  3. 我们总结,边的总数是通向叶子的边数(N)加上通向内部节点的边数(<=N-1),因此最大

    约束
    N + (N-1) = 2N - 1
    

    quod erat demonstrandum。


    关于最小边数:这遵循相同的原则,即我们计算通向叶子的边数和通向内部节点的边数,然后将它们加在一起。 / p>

    导致离开的节点数始终为N,即N是最大值和最小值。

    但是,通向内部节点的节点数可能为零。例如。当输入字符串没有重复的元素时,例如abcdef,正好有N个边,每个边从直根到叶。没有分支点,没有内部节点。因此,通向内部节点的最小边数为0.

    总之,最小边数为N + 0 = N