1、算法复习材料1算法复习练习题一计算题与简答题1.用表示函数f与g之间的关系。(1) f(n)=10000n g(n)=n-10000(2) f(n)=2n g(n)=3n/n(3) f(n)=n3log2n g(n)=n2log3n(4) f(n)=log2n g(n)=log3n(5) f(n)=100n+n100 g(n)=n!2.估计下列算法的时间复杂性的阶。(1)算法A的时间复杂性为,(2)算法B的时间复杂性为3. 计算下面算法中count=count+1的执行次数算法 COUNT3 输入:,k为正整数 输出:count=count+1的执行次数 count=0 for i=1 to
2、n j=2 while j1 and not sorted sorted=true for j=2 to i if AjAj-1 then Aj Aj-1 sorted=false end if end for i=i-1end while end BUBBLESORT5.用两种方法证明log n!= (n log n)。(1)用代数方法(2)用积分方法6.求解递推关系式 f(n)=-6f(n-1)-9f(n-2)。 7. 分治算法由哪些基本步骤组成分治算法的时间复杂性常满足什么样的递归方程,写出该方程的一般形式,并指出其中各参数的意义。8. 算法有哪五个特性9. 什么是最优子结构10. 贪心
3、法与动态规划有何根本区别11. 设计回溯算法通常包括哪些步骤12. 随机算法分成那几类,各有什么特点三算法填空1. 以下是计算xm的值的过程power ( x, m )以下是关于矩阵链乘的算法MATCHAIN1和MATCHAIN_PRODUCT算法 MATCHAIN1输入:矩阵链长度n, n个矩阵的阶r1.n+1, 其中r1.n为n个矩阵的行数,rn+1为第n个矩阵的列数。输出:n个矩阵相乘的数量乘法的最小次数,最优顺序的信息数组S1.n, 1.n。for i=1 to n Ci, i=0 n, 1.n。输出:按最优顺序计算的矩阵链乘积M=M1M2Mn 。 M=matchain_product
4、( 1, n ) return Mend MATCHAIN_PRODUCT 过程 matchain_product (i, j) 以下是迷宫问题的算法算法 MAZE 输入:正整数m, n,表示迷宫的数组M0.m+1, 0.n+1 (迷宫数据存于M1.m, 1.n中),迷宫的入口位置(ix, iy),出口位置(ox, oy)。 输出:迷宫中入口至出口的一条通路,若无通路,则输出no solution。 M0, 0.n+1=Mm+1, 0.n+1=1 M0.m+1, 0=M0.m+1, n+1=1 m, 1.n=0 为dx1.4, dy1.4置值 flag=false i表示的通路。 else o
5、utput “no solution”下面是求一个序列的多数元素的递归算法算法 MAJORITY输入:n个元素的数组A1.n。输出:若A1.n存在多数元素,则输出;否则输出none。 c=candidate ( 1 ) n中的候选多数元素。count=0 n中的多数元素。 for j=1 to n if Aj=c then count=count+1 end for if _ then return c else return noneend MAJORITY过程 candidate ( m )n中的候选多数元素并返回。j=m; c=Am; count=1while j0 j=j+1 if _
6、 then _ else _ 下面是0-1背包问题的算法算法 KNAPSACKREC输入:物品数n, n种物品的体积数组s1.n和价值数组v1.n, 背包容量C。输出:装入背包物品的最大总价值,以及最优解的信息数组H0.n, 0.C。 for i=0 to n for j=0 to C Vi, j=-1 maxv=knapsack(n, C) return maxv , Hend KNAPSACKREC过程 knapsack(i, j) n, 0.C。 if Vi, j=-1 then n, 相应的0/1背包问题的最优解信息数组H0.n, 0.C。输出:相应的0/1背包问题的最优解X1.n。
7、y=C 以下是随机化的线性选择算法算法 RANDOMIZEDSELECT输入:整数n, k, 1=k=n, 以及n个元素的数组A1.n。输出:A中的第k小元素s。 s=rselect ( A , 1, n, k )end RANDOMIZEDSELECT过程 rselect ( A , low, high, k ) high中的第k小元素并返回。 v=random(low, high) mm= _ 将Alow.high分成三个数组: A1=a|amm high的第k小元素。 |A1|+|A2|k: return rselect _ 以下是归并排序的分治算法MERGESORT 输入:n个元素的数
8、组A1.n。 输出:按非降序排序的数组A1.n。 mergesort(A , 1, n) end MERGESORT 过程 mergersort( A , low, high ) high 按非降序归并排序。 if low=Li, j-1 then Li, j= _ ; Hi, j=1 else Li, j=Li, j-1 ; Hi, j= _ end if end if end for end for return Ln, m, H end LCS算法 LCSS输入:非负整数n、m, 长度分别为n和m的序列A和B的最长公共子序列的有关信息数组H1.n, 1.m, 序列A= a1a2an 。输
9、出: 序列A和B的最长公共子序列C 。 C= 以下是0-1背包问题的回溯算法算法 KNAPSACK01输入: 物品数n, n种物品的体积数组s1.n和价值数组v1.n,背包容量C。输出:装入背包物品的最大总价值maxv和最优解x01.n。 n表示选择的物品子集,初始化为空集。 rv=0; rs=0for i=1 to nrv=rv+vi ; rs=rs+si maxv=0; x01.n=x1.n=0 n end KNAPSACK01 过程:knapsack(k, r, cv, rv, rs) k固k=x1.k; x0k+1.n=1; end if else if r0 and cv+rvmax
10、v then 下面是求第k小元素的算法算法 SELECT输入:整数n, k, 1=k=n, 以及n个元素的数组A1.n。输出:A中的第k小元素s。 s=select ( A , 1, n, k )end SELECT过程 select ( A , low, high, k ) high中的第k小元素并返回。 p=high-low+1 high排序 return(Alow+k-1) end if high每5个分组,剩余的被排除。 将Alow.low+5q-1分为q组, 每组5个元素; 将q组中的每一组单独排序并找出中项,所有的中项存于数组M1.q中; mm=select(_) high分成三组
11、: A1=a|amm 有期限的作业安排问题算法 JOB_ARRANGEMENT输入:作业数n, 表示n个作业的期限和收益的数组d1.n和p1.n。输出:最优的作业安排序列J1.k和安排的作业数k。n按降序地址排序,排序结果返回到数组a1.n kend JOB_ARRANGEMENT15. 以下是关于矩阵链乘的算法MATCHAIN1和MATCHAIN_PRODUCT算法 MATCHAIN1输入:矩阵链长度n, n个矩阵的阶r1.n+1, 其中r1.n为n个矩阵的行数,rn+1为第n个矩阵的列数。输出:n个矩阵相乘的数量乘法的最小次数,最优顺序的信息数组S1.n, 1.n。for i=1 to n
12、 Ci, i=0 n, 1.n。输出:按最优顺序计算的矩阵链乘积M=M1M2Mn 。 M=matchain_product( 1, n ) return Mend MATCHAIN_PRODUCT 过程 matchain_product (i, j) 格雷码问题对于给定的正整数n,格雷码为满足如下条件的一个编码序列:(1) 序列由2n个编码组成,每个编码都是长度为n的二进制位串。(2) 序列中无相同的编码。(3) 序列中位置相邻的两个编码恰有一位不同。例如:n=2时的格雷码为:00, 01, 11, 10。设计求格雷码的递归算法。2. 给出一个分治算法,在一个具有n个数的数组中找出第二个最大元素。给出你的算法的时间复杂性3. 考虑金钱兑换问题。有一个货币系统,它有n种硬币,它们的面值为v1,v2,vn,其中v1=1。我们想这样来兑换价值为y的钱,要让硬币的数目最少。更形式地,我们要让下面的量在约束条件下极小。其中,x1,x2,xn是非负整数(xi可能是0)4. 线段覆盖问题:在实轴上有n个点x1, x2, xn , 要求用最少数量的单位长线段覆盖这些点。写出求该问题的最优值和最优解的贪心算法。5.马的周游问题:给出一个nxn棋盘,一个中国象棋马在某个起点位置(x0, y0),求一条访问每个棋盘格点恰好一次,最后回到起点的周游路线。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1