您的位置:首页 > 其它

麻省理工算法导论公开课(3)

2014-07-14 22:51 148 查看
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+1Fn
FnFn-1
=
11^n
10
转换成了乘方问题,再用分治法,可得T(n)=Θ(lgn)

Matrix multiplication(矩阵乘法):

传统的矩阵分块:n*n matrix=2*2 block matrix of n/2 *n/2 submatrix

rs
tu
=
ab*ef
cdgh
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变量的值决定的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: