麻省理工算法导论公开课(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变量的值决定的。



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