麻省理工算法導論公開課(3)

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  
轉換成了乘方問題,再用分治法,可得T(n)=Θ(lgn)


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
r=ae+bg,s=af+bh,t=ce+dg,u=cf+dh

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變量的值決定的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章