【问题标题】:Using mathematical induction to prove recurrence system用数学归纳法证明递推系统
【发布时间】:2011-07-26 06:52:28
【问题描述】:

有fnc:

bool ISINTREE( int x, BinTree<int> t) 
  {
  bool  b = false

  if  (!t.isEmpty())
    {
    if  (x  ==  t.getRoot())
      { b = true }
    else
      {
      if (ISINTREE(x,t.leftTree()))
        { b = true }
      if (ISINTREE(x,t.rightTree()))
        { b = true }
      }
    }

  return  b 
  } 

如何证明(使用数学归纳法)T(n)= 11 × 2^n − 7 是 此 fnc 的循环系统。

已编辑
令 F(n) = 11*2^n – 7
现在,
对于 k>0
T(k-1) = F(k-1) = 11*2^(k-1)-7
T(k) = 7+2*(T(k-1))
=7 + 2 * (11*2^(k-1) -7)
= 11*2^k -7

【问题讨论】:

    标签: math


    【解决方案1】:

    这里的n 是什么?树中的元素数量?如果是这样,我们当然可以说,在最坏的情况下,这个算法会访问树中的每个节点,所以运行时间是,最坏的情况下,T(n) = n,在这种情况下,前提是(这是T(n) = 11 . 2^n - 7 ) 无效。

    更新

    为了满足怀疑,让我们看一下最坏的情况(要查找的项目不在树中)。不失一般性,假设我们正在查看一个完美平衡的树,即每个子树都有(n-1)/2 元素。因此在这些假设下,递推关系为:

    T(n) = 2.T((n-1)/2) + 7
    

    (我会说这里实际上只有 4 个可执行操作,但为了简单起见,我们称之为 7 个)。

    显然,T(n) = 11 . 2^n - 7 不是这种关系的解决方案。

    【讨论】:

    • @Oli -1 您的答案不正确。而且我想我不会从你这里说你错了(在所有这些事情上),对吗?不,我肯定不会。但是,为了将来参考,请不要以任何形式参与我的问题。
    • @There:你给出了你的解决方案。我指出了一个具体问题;我们对什么是递归关系有不同的看法。我解释了为什么我认为你的递归关系是错误的。您尚未就该特定问题发表意见。如果您想进行成人辩论,那么我非常愿意。 (如果你只想告诉我我不知道我在说什么,同时回避细节,那我也不愿意……)
    • @Oli 我的重复是正确的,是你给出了错误的答案。不幸的是,我正在准备非常重要的考试,我真的没有时间进行辩论,也没有时间解释为什么它是正确的。在我的考试 (12.VI.11) 之后,我可以毫无问题地向您展示为什么会这样。
    • @There:那我就把它当作“我不知道”吧!到现在为止,你当然有足够的时间来争论。至少三个人同意我的回答是有效的......
    • @Oli 如果你能理解我在说什么,那么你应该把它当作 “我没有时间向你解释”(它是你不明白我提供的证明,因为你要求我这样做 - 仅仅因为你不明白那里写的内容并不意味着它是不正确的)。犯错的是你而不是我。如果你对逻辑(形式逻辑)有所了解,你会推断出,仅仅因为三个人同意你的观点,并不意味着你是对的。