版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jal517486222/article/details/82805401
主定理公式:
T(n)=aT(n/b)+f(n)
算法导论书上将算法复杂度的求解方法讲的很清楚,就分三种情况:
- 当
O(nlogba)>O(f(n))的时候,
T(O)=O(nlogba)
- 当
O(nlogba)=O(f(n))的时候,
T(O)=O(nlogbalgn)
- 当
O(nlogba)<O(f(n))的时候,
T(O)=O(f(n))
显然,
T(n)将复杂度分为了
aT(n/b)的复杂度
O(nlogba),和
f(n)的复杂度
O(f(n))两部分,两者谁大则取谁的值,如果相同,则为
O(nlogbalgn)
练习:
(1). 求:
T(n)=2T(n/4)+1
解:
a=2,b=4, 所以
O(nlogba)的值为
O(n
),
f(n)的值为
O(1), 所以
O(nlogba)>O(f(n)),则
T(O)=O(n
)
(2). 求:
T(n)=2T(n/4)+n
解:
a=2,b=4, 所以
O(nlogba)的值为
O(n
),
f(n)的值为
O(n
), 所以
O(nlogba)=O(f(n)),则
T(O)=O(n
lgn)
(3). 求:
T(n)=2T(n/4)+n
解:
a=2,b=4, 所以
O(nlogba)的值为
O(n
),
f(n)的值为
O(n), 所以
O(nlogba)<O(f(n)),则
T(O)=O(n)
(4). 求:
T(n)=2T(n/4)+n2
解:
a=2,b=4, 所以
O(nlogba)的值为
O(n
),
f(n)的值为
O(n2), 所以
O(nlogba)<O(f(n)),则
T(O)=O(n2)