证明树中内部节点的数量

时间:2012-01-16 12:47:02

标签: algorithm trie compression induction

我正在阅读有关压缩尝试的内容并阅读以下内容:

压缩的trie是具有L个叶子的树,并且trie中的每个内部节点具有至少2个子节点。

然后作者写道,一个带有L的树离开,使得每个内部节点都有第2个子节点,最多有L-1个内部节点。我真的很困惑,为什么这是真的。

有人可以为它提供归纳证明吗?

3 个答案:

答案 0 :(得分:3)

归纳证明 我们将通过L上的归纳证明它 - 树中叶子的数量。
base:由1片叶子制成的树实际上是一棵只有根的树。它有0个内部节点,声称是真的。
假设对于具有L叶的压缩树,声明是正确的。
步骤:让T为具有L + 1叶子的树。选择一个任意叶子,让它成为l,并修剪它。
为了让树再次被压缩 - 你需要让父亲成为一片叶子[如果我的父亲有超过2个儿子,包括l,请跳过这一步]。我们通过赋予它与l兄弟相同的价值并修剪兄弟来做到这一点。
现在你有一棵树T' L叶。
通过归纳:T'最多有L-1个内部节点。
因此,T具有L-1 + 1 = L个内部节点,并且L + 1最多离开。
Q.E.D。

替代证明 具有L叶的二叉树具有L-1个内部节点(1 + 2 + 4 + ... + L / 2 = L-1)
因为在最坏的情况下"你有一个二叉树[每个内部节点至少有2个儿子!],那么你就不能有更多的L-1内部节点!

答案 1 :(得分:0)

您应该尝试使用L个内部节点绘制树,其中每个节点都有2个子节点并且有L个叶子。如果你知道为什么这是不可能的,那么要弄清楚它为什么对L-1内部节点起作用并不难。

答案 2 :(得分:0)

好的,我会好好的。

为一个开始定义树:

T_0 = { Leaf }

T_i = T_i-1 union { Node(c1, ..., cn) | n >= 1 && ci in T_i-1 }

Trees = sum T_i

现在,你的断言的(草图)证据。

  1. 可以轻松查看T_0

  2. 对于T_i:如果t \in T_i它位于T_i-1或新元素中。在前一种情况下,使用IH。在后一种情况下检查断言(简单:如果ciL_i个叶子,tL = L_1 + ... + L_n个叶子。它也不会超过L_1 - 1 + L_2 - 1 + ... + L_n - 1 + 1内部节点(由IH代表儿童,+1代表自己)。因为我们假设每个内部节点至少有两个子节点(这是trie定义中的事实),它不超过L_1 + l_2 + ... + L_n - 2 + 1 = L - 1)。

  3. 通过归纳,如果所有t in T_i的{​​{1}}断言成立,则i成立。