如何求解递归 T(n) = 2T(n^(1/2)) + log n? [关闭]
Posted
技术标签:
【中文标题】如何求解递归 T(n) = 2T(n^(1/2)) + log n? [关闭]【英文标题】:T(n)=2T(n−−√)+logn [closed] 【发布时间】:2012-10-17 17:19:04 【问题描述】:我正在尝试找出重复的时间复杂度:
T(n) = 2T(n1/2) + log n
我非常接近解决方案,但是遇到了障碍。我需要解决:
n(1/2k) = 1
for k 来简化我的替换模式。我不是在寻找复发的答案,只是k
的解决方案。
【问题讨论】:
我认为这不会有帮助。如果你为k
解决了这个问题,你会得到一些非常可怕的东西。
我投票结束这个问题,因为它是一个数学问题,而不是一个编程问题。
Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Mathematics Stack Exchange 会是一个更好的提问地点。
【参考方案1】:
老兄,如果它是等式的快速排序:
解决方案是O(n*log(n))
,因为对于某些N
,现在它甚至更小(T(n) ~ n^1/2
),这意味着您的复杂性低于O(n*log(n))
。
尝试使用归纳法来证明你的界限
【讨论】:
是的,我同意,因为合并是次线性的,并且输入大小也小得多。然而,如果一切都失败了,我会尝试归纳,但我只是很好奇我如何解决形式为 c^a^b = 1 的方程。我知道这涉及到一些使用权力身份的诡计。【参考方案2】:以 1 为底的任何值都是 0。
所以
n^((1/2)^k) = 1
log(n)(n^((1/2)^k)) = log(n)(1)
1/2^k = 0
log(1/2)((1/2)^k) = log(1/2)(0)
以 0 为基数的任何值都是负无穷大......所以......
k = -无穷大。
我认为你应该为 n 使用不同的“最终数字”,而不是 1 只是说...
【讨论】:
主要是因为在 1 之前你永远无法继续平方根。你会发疯的。【参考方案3】:无法解决
n(1/2k) = 1
对于 k,因为如果 n > 1,那么对于任何非零 x,nx > 1。解决这个问题的唯一方法是选择 k 使得 1 / 2k = 0,但这是不可能的。
但是,您可以解决这个问题:
n(1/2k) = 2
首先,取双方的日志:
(1 / 2k) lg n = lg 2 = 1
接下来,两边都乘以 2k:
lg n = 2k
最后,再记录一次:
lg lg n = k
因此,一旦 k = lg lg n,此循环将停止。
虽然您只询问了 k 的值,但自从您询问以来已经整整一年了,我想我想指出您可以通过变量替换来解决这个问题。尝试设置 k = 2n。那么k = lg n,所以你的循环是
T(k) = 2T(k / 2) + k
这解决了(使用主定理)T(k) = Θ(k log k),并且使用 k = lg n 这一事实,整体递归求解为 Θ(log n log log n)。
希望这会有所帮助!
【讨论】:
先生,我可以这样解决吗 -:T(n) = 2T(n1/2) + log n =>T(2^m)=2T(2^(m/2) )+log 2^m =>T(2^m)=2T(2^(m/2))+m=>让 2^m=k=>S(k)=2S(k/2)+log k 关闭!如果你插入 k = 2^n,当你将 log n 项表示为 k 的函数时会发生什么?【参考方案4】:当您开始展开递归时,您会得到:
这里是同样的事情,但需要几个额外的步骤:
现在使用边界条件进行递归(数字 2 选为 0 和 1 没有意义),你会得到:
将k
代入你将得到的等式:
这里有几个使用相同想法的递归。
T(n) = T(n^1/2) + 1 T(n) = T(n^1/2) + O(loglog(n))【讨论】:
先生,在这里查看我的方法i.stack.imgur.com/C2uiq.png,请帮助我继续前进。谢谢:) @laura 我认为我的解决方案没有问题。我添加了一些中间步骤。 是的,你是对的。非常感谢!以上是关于如何求解递归 T(n) = 2T(n^(1/2)) + log n? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
求解 T(n) = 2T(n/2) + log n [关闭]