【问题标题】:Algorithms and Recursion Help?算法和递归帮助?
【发布时间】:2011-11-05 02:45:51
【问题描述】:

我有以下递归:T(n) = 2*T(n/4) + T(n/2) + n 我需要知道确切的等式,我知道主定理对我没有帮助,并且迭代似乎是错误的......

请告诉我一般如何处理此类递归。 提前致谢。

大家好,感谢您的回复,我需要复杂性。我需要了解如何解决这些问题。

【问题讨论】:

  • 正在寻找算法复杂度?
  • 不,我认为他正在寻找一种封闭形式的复发解决方案。
  • 我猜你想要更通用的 Akra-Bazzi 方法,而不是 Master Theorem?
  • 请问确切的等式是什么意思。

标签: algorithm


【解决方案1】:

T(n) = O(nlogn)W(nlogn)

为了证明,根据O 的定义,我们需要找到常量n0c,这样: 对于每个n>=n0T(n)<=cnlogn

我们将在n 上使用归纳法来证明T(n)<=cnlogn 对于所有n>=n0

让我们暂时跳过基本情况......(我们稍后会返回)

假设:我们假设对于每个k<nT(k)<=cklogk

论文:我们要证明T(n)<=cnlogn

但是,T(n)=2T(n/4)+T(n/2)+n

使用我们得到的假设:

T(n)<=2(c(n/4)log(n/4))+c(n/2)log(n/2)+n=cnlogn + n(1-3c/2)

因此,采用c>=2/3 将证明我们的论点,因为那时T(n)<=cnlogn

现在我们需要证明基本情况:

我们将采用n0=2,因为如果我们采用n0=1,则logn 将是0,这不适用于我们的论文。所以我们的基本情况是n=2,3,4。我们需要以下命题为真:

T(2) <= 2clog2

T(3) <= 3clog3

T(4) <= 4clog4

因此,通过采用c=max{2/3, T(2)/2, T(3)/3log3, T(4)/8}n0=2,我们将找到常量cn0,这样对于每个自然n>=n0T(n)<=cnlogn

T(n) = W(nlogn) 的演示是模拟的。

所以基本上,在这些你不能使用 Masther Theorem 的情况下,你需要“猜测”结果并通过归纳来证明。

有关此类演示的更多信息,请参阅“算法简介”

【讨论】:

  • 亲爱的奥兰多,非常感谢您,非常感谢您的时间和耐心。让我邀请您到我的博客分享知识:shareinfoblog.blogspot.com 希望在那里看到您的 cmets 和帖子。
【解决方案2】:

首先你需要定义一些限制,否则它永远不会结束,你会遇到 OverflowException。 像n这样的东西是整数,最小值是0。

您能否以这种方式提出有关您的问题的更多详细信息?

【讨论】:

  • n>=1 是自然数。
【解决方案3】:

这不一定能帮助您弄清楚如何做,但显然 Wolfram Alpha 可以得到正确的答案。也许您可以查找文档或让 Mathematica 向您展示解决此问题所需的步骤:

Wolfram Alpha: T(n)=2*T(n/4)+T(n/2)+n

要在搜索空间上设置粗略的上限和下限,您可能已经认识到您的 T(n) 的上界为 3T(n/2) + n,下界为 2T(n/4) + n...所以 O(n^(3/2)) 和 W(n),由主定理。

一般来说,解决递归关系难题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2011-06-21
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多