我有以下递归:T(n)= 2 * T(n / 4)+ T(n / 2)+ n我需要知道确切的等式,我知道Master定理不会帮助我,并且迭代似乎是错误的......
请告诉我如何进行此类递归。 提前谢谢。
嘿所有,谢谢你的回复我需要复杂性。我需要了解如何解决这些问题。答案 0 :(得分:1)
首先,您需要为此定义一些限制,否则它将永远不会结束,您将坚持使用OverflowException。 像n这样的东西是整数,最小值是0。
请您以这种方式提出有关您问题的更多详情?
答案 1 :(得分:1)
这无助于你弄清楚如何做到这一点,但显然Wolfram Alpha可以得到正确的答案。也许您可以查找文档或让Mathematica向您展示解决此问题所需的步骤:
Wolfram Alpha: T(n)=2*T(n/4)+T(n/2)+n
要将粗略的上限和下限放在搜索空间上,您可能已经识别出您的T(n)在3T(n / 2)+ n以及2以下(n / 4)+ n的上限。所以O(n ^(3/2))和W(n),由主定理。
一般来说,解决复发关系难题。
答案 2 :(得分:1)
T(n) = O(nlogn)
和W(nlogn)
要证明,根据O
的定义,我们需要找到常量n0
和c
,以便:
对于每个n>=n0
,T(n)<=cnlogn
。
我们将使用n
上的归纳来证明所有T(n)<=cnlogn
的{{1}}
让我们暂时跳过基本情况......(我们稍后会回来)
假设:我们假设每n>=n0
,k<n
论文:我们想证明T(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
和c
,以便每个自然n0
,n>=n0
}
T(n)<=cnlogn
的演示是模拟的。
所以基本上,在这些你不能使用Masther定理的情况下,你需要“猜测”结果并通过归纳证明它。
有关这类演示的更多信息,请参阅“算法简介”