Math 求解递推T(n)=T(n/2)+;T(n/4)及"x2B ;;T(n/8)?

Math 求解递推T(n)=T(n/2)+;T(n/4)及"x2B ;;T(n/8)?,math,big-o,code-analysis,recurrence,asymptotic-complexity,Math,Big O,Code Analysis,Recurrence,Asymptotic Complexity,我试图解决一个递归问题T(n)=T(n/8)+T(n/2)+T(n/4) 我认为首先尝试一种递归树方法是个好主意,然后用它作为替代方法的猜测 对于树,由于没有在非叶子层面上做任何工作,我认为我们可以忽略这一点,所以我试图给出叶子的上界,因为这是这里唯一相关的事情 我考虑了通过T(n/2)的最长路径的树的高度,该树的高度为log2(n)。然后我假设树是完整的,所有级别都已填充(即,我们有3T(n/2)),因此每个级别都有3^I节点,因此n^(log2(3))离开T(n)将是O(n^log2(3))

我试图解决一个递归问题
T(n)=T(n/8)+T(n/2)+T(n/4)

我认为首先尝试一种递归树方法是个好主意,然后用它作为替代方法的猜测

对于树,由于没有在非叶子层面上做任何工作,我认为我们可以忽略这一点,所以我试图给出叶子的上界,因为这是这里唯一相关的事情

我考虑了通过
T(n/2)
的最长路径的树的高度,该树的高度为
log2(n)
。然后我假设树是完整的,所有级别都已填充(即,我们有
3T(n/2))
,因此每个级别都有
3^I
节点,因此
n^(log2(3))
离开
T(n)
将是
O(n^log2(3))


不幸的是,我认为这是一个不合理的上限,我认为我把它定得有点太高了。。。关于如何解决这个问题有什么建议吗?

这里可以使用的一个技巧是用另一个变量重写递归。假设你写了n=2k。然后,递归简化为

T(2k)=T(2k-3)+T(2k-2)+T(2k-1)

让我们让s(k)=T(2k)。这意味着您可以将此循环重写为

S(k)=S(k-3)+S(k-2)+S(k-1)

为了简单起见,让我们假设基本情况是s(0)=s(1)=s(2)=1。有鉴于此,您可以使用多种方法来解决此重复问题。例如,(链接的第5节)对于解决此递归非常有用,因为它是线性递归。如果你在这里使用零化子方法,你会得到

S(k)-S(k-1)-S(k-2)-S(k-3)=0

S(k+3)-S(k+2)-S(k+1)-S(k)=0

(E3-E2-E-1)S(k)=0

如果你找到方程E3-E2-E-1的根,那么你可以把递归的解写成这些根的线性组合,并提升到k的幂。在这种情况下,结果是递归,如果你解决了所有问题,你会发现递归解的形式是O(1.83929k)

既然你知道2k=n,我们就知道k=lgn。因此,递归解为O(1.83929lg n)。让我们假设a=1.83929。那么溶液的形式为O(algn)=O(a(loga n)/loga2))=O(n1/loga 2)。计算结果约为O(n0.87914…)。你的初始上限O(nlg3)=O(n1.584962501…)比这个明显弱


希望这有帮助

有一种方法比@template提出的方法更简单。除了一个Master定理,还有一个可以让你解决这类问题的方法:

这正是你所拥有的。所以你的
g(x)=0
a1=a2=a3=1
b1=1/2
b2=1/4
b3=1/8
。现在你要解方程:
1/2^p+1/4^p+1/8^p=1


求解它p约为
0.879
。您甚至不需要求解积分,因为它等于
0
。因此,您的总体复杂性是
O(n^0.879)

这是我的算法分析文本中的一个问题集的问题。这是作业问题,是我的错吗?正如你们所看到的,我已经完成了上面的工作,我正在向一个非常友好的人寻求帮助。我觉得你对我的问题投了否决票,然后投票决定结束它是不礼貌的。这太荒谬了。那么,我是否应该发布一个关于快速排序分析的问题,因为它存在于每所学校软件工程教学的每个问题集中?@Shitikanth FYI,这个问题可以在所有其他算法文本中找到,至少应该理解这样一个事实,即用户很想知道不同的方法什么是基本情况关于这个循环关系?谢谢你的链接,它比我的笔记或教科书更有帮助。我相信templatetypedef解决方案的最后一步是不正确的。1/(对数基数a为2)实际上小于1。因此n的指数应该是0.87914897…@user2945495-我忘了取倒数。。。对不起!答案已更新。