资源描述:
《算法设计与分析基础考点.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第二章算法效率分析基础2.5计算斐波那契数列的O(logn)算法:利用矩阵,当n>=1时,[F(n-1),F(n);F(n),F(n+1)]=[0,1;1,1]^n其中的乘方运算使用霍纳法则第三章蛮力法凸包问题:链接任意两点,检查剩余的点是否都在连线的同侧。效率O(n^3)分配问题:n个任务分配给n个人,其中将第j个任务分配给第i个人的成本为C[i,j],找出成本最小的分配方案。蛮力法:穷举n!种可能的方案。高效方法:匈牙利方法。第四章分治法主定理:对于T(n)=aT(n/b)+f(n),f(n)为Θ(n^d)如果a
2、^d,T(n)=Θ(n^d*logn)如果a>b^d,T(n)=Θ(n^(loga/logb))大整数乘法:a=a1a0,b=b1b0,其中a和b都是n位整数,低n/2位为a0,b0,高位为a1,b1需要三次n/2位的乘法即可完成c=a*b=c2*10^2n+c1*10^n+c0其中c2=a1*b1,c0=a0*b0,c1=(a1+a0)*(b1+b0)-(c2+c0)T(n)=n^(log3/log2)最近点对问题:找到平面上n个点中的最近距离。先画一条竖线,将所有的点分成左右两半,找到两部分的最近距离d1,d2,然后考察竖线附近的点。凸包问题的快包算法(
3、类似于快速排序):首先过最左边的点P1和最右边的点Pn,将平面分成上下两部分。然后考察上半个平面:找到距离直线P1Pn距离最远的点Pmax,那么Pmax一定是凸包的顶点;三角形P1PmaxPn内部的点一定不是凸包的顶点。然后只需分别考虑两侧的顶点即可。平均效率O(n*logn)。由于三角形内部的点无须考虑,甚至可以达到线性效率。最差情况O(n^2):剩下的点全都在同一侧。三角形面积的计算:三角形(x1,y1),(x2,y2),(x3,y3)的面积等于下面这个行列式的值的1/2[x1,y1,1;x2,y2,1;x3,y3,1]=x1y2+x2y3+x3y1-x
4、3y2-x2y1-x1y3第五章减治法插入排序:最差情况需要做(n-1)*n/2次比较,但是平均只需n^2/2次比较,因此胜过选择排序和冒泡排序。插入排序有一种扩展算法,叫做Shell排序。拓扑排序:算法1,通过深度优先搜索,将出栈顺序反过来即得到一个解。算法2,先找到一个只有出度没有入度的点,将这个点以及相关的边删除,重复此过程。生成排列:依次生成从1到n的所有排列。假设已经得到了n-1的所有排列,那么依次取出n-1的每一个排列,将n插入每一个位置。按这样的顺序插入更好:对于取出的第一个(n-1)排列,从右到左插入;第二个排列从左到右插入;第三个再从右到左
5、...例子:依次生成1到3的所有排列开始:1从右到左将2插入1:12,21从右到左将3插入12:123,132,312从左到右将3插入21:321,231,213依这种次序生成的排列满足最小变化要求:得到的两个相邻的排列的差别仅在于交换两个相邻的位置。生成排列:生成n的所有排列。可不可以不通过(n-1)排列,而直接生成n的排列,并满足最小变化要求呢?通过Jhonson-Trotter算法:对每个元素赋予一个向左或向右的箭头。如果元素k指向一个相邻的较小的元素,则称k为移动的#JhonsonTrotter(n)#初始序列1...n,所有箭头均向左#while存
6、在一个移动元素kdo# 求最大的移动元素k# 把k和它指向的元素互换# 调转所有大于k的元素的方向# 输出新的排列此算法和上面的算法生成的顺序是一样的,且都不是按字典序。生成子集:利用二进制。可否按这个顺序生成二进制串:使得两个相邻的二进制串只相差一个比特位。(也就是在子集里面要么增加了一个元素,要么删除了一个元素)。答案为“是”,通过二进制反射格雷码。俄式乘法:原理如下,如果n是偶数,那么n*m=(n/2)*(2m),否则n*m=(n-1)/2*2m+m代码#对整数a和b相乘#result=0#while(a>0){# if(a%2==1){resul
7、t+=b;}# a/=2;# b*=2;#}特点:只涉及折半、加倍和相加操作,效率非常高。约瑟夫问题:n个人围成一圈,并且从1到n编上号码,从1号开始,每隔一个杀掉一个,问最后剩下几号?记幸存者的号码为J(n),那么当n为偶数时,也就是n=2k,J(2k)=2J(k)-1当n=2k+1时J(2k+1)=2J(k)+1把n表示为二进制形式,并且做一次向左的循环移位,得到结果就是幸存者编号。比如n=6时,二进制为110,移位后得到101,也就是5号为幸存者。具体推导过程见《具体数学》插值查找:对有序数组进行查找。把数组看成是线性递增的,那么便可以直接定位
8、到目标值附近。一般情况下,比折半查找要快。拈游戏:两