T(n) = T(n/2) + O(n)

先通过一个简单的例子,T(n) = T(n/2) + O(n),

那么T(n)应该的等于多少呢?

1. 给个直观的例子:

自从看到 An apple a day, keep doctors away, 这句谚语,每天我都会吃苹果。

但我吃苹果的方式很特殊,先吃半个,再吃剩下的半个的一半,再吃剩下的半个的一半。。。。

结论: 我永远都吃不完这一个苹果。

其实这个例子就给出了T(n)的上界是O(n):

每次我吃掉的一半就是O(n),剩下T(n/2),上界就是我最初的一个苹果也就是O(n)

2. 数学推导

T(n)<= n + n/2 + n/4 +…+1 = 2n – 2 = O(n)

3. 主定理(参考算法导论)

直接得到复杂度应该是 O(n)

大家可以适当的地熟悉下主定理,对于快速判别复杂度非常有好处。

而且对算法设计也会有一定的启发意义。

时间: 2024-12-06 07:43:34