问题描述
更新:我仍在寻找一种解决方案,而无需使用外部资源。
给出::T(n) = T(n/10) + T(an) + n
代表a
,并且:T(n) = 1
如果n < 10
,我想检查以下情况是否可能(对于某些a
值,我想找到尽可能小的 a
):
对于每个
c > 0
,都有n0 > 0
,这样对于每个n > n0
,T(n) >= c * n
我试图一步一步地打开函数声明,但是它变得非常复杂,而且因为根本看不到进步,所以陷入了困境。
这就是我所做的:(很抱歉添加图像,因为我在单词上写了很多,不能将其粘贴为文本)
请帮忙吗?
解决方法
调用Akra–Bazzi,g(n)=n¹,因此临界指数为p = 1,因此我们希望(1/10)¹+a¹= 1,因此a = 9/10。
直觉上,这就像mergesort重复发生:在每次调用时都有线性开销,如果我们不减小子问题的总大小,我们将在运行时间上获得额外的日志(这将超过任何时间常数c)。
,另一个角度:绘制一个递归树并计算每个级别完成的工作。在树的每一层中完成的工作将是其上层工作的(1/10 + a)。 (你知道为什么吗?)
如果(1/10 + a)
(这基本上是Master定理的基础,仅适用于非均匀子问题大小,这是Akra-Bazzi定理的来源。)