先通过一个简单的例子,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