T (1) = c
T (n) = T (n/2) + dn
我如何快速确定BigO?
答案 0 :(得分:2)
使用重复的后置替换并找到模式。示例here。
答案 1 :(得分:2)
我不完全确定dn
是什么,但假设你的意思是常数乘以n
:
According to Wolfram Alpha,递归方程解决方案:
f(n) = f(n / 2) + cn
是:
f(n) = 2c(n - 1) + c1
这会使O(n)
。
答案 2 :(得分:1)
嗯,关系的重复部分是T(n / 2)部分,它实际上每次将n的值减半。
因此你需要约。 (log2 n)步骤到达终止条件,因此算法的总成本是O(log2 n)。您可以忽略dn部分,因为它是每个步骤的恒定时间操作。
注意,如上所述,问题不一定会终止,因为重复减半n的任意值不可能精确地达到1.我怀疑T(n / 2)部分实际上应该读取T(floor(n / 2))或类似的东西,以确保终止。
答案 3 :(得分:0)
使用硕士定理 见http://en.wikipedia.org/wiki/Master_theorem
顺便说一下,你的重复的渐近行为是O(n),假设d是正的并且足够小于n(问题的大小)