Divide and Conquer(分治法):1.Divide;2.Conquer;3.Combine.
EX.Merge Sort:T(n)=2T(n/2)+Θ(n).
Binary Search(二分查找算法):find x in sorted array.每次都找中間那個,和目標值比較大小後,縮小範圍。T(n)=T(n/2)+Θ(1)=Θ(lgn)
Powering a number(乘方問題):compute x^n.
Naive algorithm:x*x*...*x=x^n.-->Θ(n)
Divide-and-Conquer algorithm:相當於從x開始,一直平方到x^n。--》Θ(lgn)
Fbonacci numbers:
Bottom-up algorithm:Compute F0,F1,...,Fn -->Θ(n)
Recurrsive squaring:
theorem:
Fn+1 | Fn |
Fn | Fn-1 |
1 | 1 | ^n |
1 | 0 |
Matrix multiplication(矩陣乘法):
傳統的矩陣分塊:n*n matrix=2*2 block matrix of n/2 *n/2 submatrix
r | s |
t | u |
a | b | * | e | f |
c | d | g | h |
8次乘積,4次相加:T(n)=8T(n/2)+Θ(n^2)=Θ(n^3) (由主定理可得)
如果想要優化,可以想辦法減小a的值,Strassan's algorithm特拉森算法,把a值從8減小到了7:
p1=a(f-h),p2=(a+b)h,p3=(c+d)e,p4=d(g-e),p5=(a+d)(e+h),p6=(b-d)(g+h),p7=(a-c)(e+f)
r=p5+p4-p2-p6,s=p1+p2,t=p3+p4,u=p5+p1-p3-p2
T(n)=7T(n/2)+Θ(n^2)=Θ(n^lg7)
VLSI layout:
如果是畫成類似二叉樹的形狀,那麼H(n)=H(n/2)+Θ(1)=Θ(lgn),W(n)=2W(n/2)+Ο(1)=Θ(n),Area=Θ((nlgn)
如果想讓面積爲線性,那麼可以考慮改變高和寬的設置,讓高和寬一致,H(n)=W(n)=Θ(n^1/2),設置爲H型可以實現:L(n)=2L(n/4)+Θ(1)=Θ(n^1/2).
設計思路主要是由主定理中,a,b變量的值決定的。