【问题标题】:Solving the recurrence T(n) = T(n / 1000) + T(999n/1000) + cn?求解递归 T(n) = T(n / 1000) + T(999n/1000) + cn?
【发布时间】:2013-10-29 21:57:17
【问题描述】:
这种重复的解决方法是什么?
T(n) = T(n/1000) + T(999n/1000) + cn.
我认为它的 O(n log n) 因为每个级别完成的工作将是 cn 并且树的高度将 log n 到 1000/999 的基数,但我不确定推理是否已验证。对吗?
【问题讨论】:
标签:
math
big-o
time-complexity
recurrence
【解决方案1】:
需要注意的是,对于第一个 log1000n 层,递归的所有分支都将处于活动状态(即 n / 1000 个案例的分支不会触底)和每层完成的工作将是 Θ(n)。这为您提供了运行时的即时下限为 Ω(n log n),因为有 Θ(log n) 层每个都在做 Θ(n) 工作。
对于低于此的层,工作开始下降,因为 n / 1000 案例的分支将触底。但是,您可以通过假设树中的每一层都会做 Θ(n) 的工作来限制所做的工作。在这种情况下,在 999n/1000 情况触底之前会有 log1000/999 n 层,所以你得到 O(n log n) 的上限,因为你有 Θ(log n)做 Θ(n) 的层每个都起作用。
由于完成的工作是 Ω(n log n) 和 O(n log n),因此运行时间是 Θ(n log n)。
希望这会有所帮助!