算法复习材料1.docx

上传人:b****7 文档编号:9765623 上传时间:2023-02-06 格式:DOCX 页数:12 大小:33.30KB
下载 相关 举报
算法复习材料1.docx_第1页
第1页 / 共12页
算法复习材料1.docx_第2页
第2页 / 共12页
算法复习材料1.docx_第3页
第3页 / 共12页
算法复习材料1.docx_第4页
第4页 / 共12页
算法复习材料1.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

算法复习材料1.docx

《算法复习材料1.docx》由会员分享,可在线阅读,更多相关《算法复习材料1.docx(12页珍藏版)》请在冰豆网上搜索。

算法复习材料1.docx

算法复习材料1

算法复习练习题

一.计算题与简答题

1.用

表示函数f与g之间的关系。

(1)f(n)=10000ng(n)=n-10000

(2)f(n)=2ng(n)=3n/n

(3)f(n)=n3log2ng(n)=n2log3n

(4)f(n)=log2ng(n)=log3n

(5)f(n)=100n+n100g(n)=n!

2.估计下列算法的时间复杂性的阶。

(1)算法A的时间复杂性为

(2)算法B的时间复杂性为

3.计算下面算法中count=count+1的执行次数

算法COUNT3

输入:

,k为正整数

输出:

count=count+1的执行次数

count=0

fori=1ton

j=2

whilej<=n

j=j2

count=count+1

endwhile

endfor

returncount

endCOUNT3

4.下面是冒泡排序的算法,该算法的基本运算是什么求该算法最坏情况下的时间复杂性。

算法BUBBLESORT

输入:

正整数n,n个元素的数组A[1..n]。

输出:

按升序排列的数组A[1..n]。

i=n;sorted=false

whilei>1andnotsorted

sorted=true

forj=2toi

ifA[j]

A[j]↔A[j-1]

sorted=false

endif

endfor

i=i-1

endwhile

endBUBBLESORT

5.用两种方法证明logn!

=

(nlogn)。

(1)用代数方法

(2)用积分方法

6.求解递推关系式f(n)=-6f(n-1)-9f(n-2)。

7.分治算法由哪些基本步骤组成分治算法的时间复杂性常满足什么样的递归方程,写出该方程的一般形式,并指出其中各参数的意义。

8.算法有哪五个特性

9.什么是最优子结构

10.贪心法与动态规划有何根本区别

11.设计回溯算法通常包括哪些步骤

12.随机算法分成那几类,各有什么特点

三.算法填空

1.以下是计算xm的值的过程

power(x,m)

以下是关于矩阵链乘的算法MATCHAIN1和MATCHAIN_PRODUCT

算法MATCHAIN1

输入:

矩阵链长度n,n个矩阵的阶r[1..n+1],其中r[1..n]为n个矩阵的行数,r[n+1]为第n个矩阵的列数。

输出:

n个矩阵相乘的数量乘法的最小次数,最优顺序的信息数组S[1..n,1..n]。

   fori=1tonC[i,i]=0n,1..n]。

输出:

按最优顺序计算的矩阵链乘积M=M1M2…Mn。

M=matchain_product(1,n)

returnM

endMATCHAIN_PRODUCT

过程matchain_product(i,j)

以下是迷宫问题的算法

算法MAZE

输入:

正整数m,n,表示迷宫的数组M[0..m+1,0..n+1](迷宫数据存于M[1..m,1..n]中),迷宫的入口位置(ix,iy),出口位置(ox,oy)。

输出:

迷宫中入口至出口的一条通路,若无通路,则输出nosolution。

M[0,0..n+1]=M[m+1,0..n+1]=1

M[0..m+1,0]=M[0..m+1,n+1]=1m,1..n]=0

为dx[1..4],dy[1..4]置值

flag=falsei]表示的通路。

elseoutput“nosolution” 下面是求一个序列的多数元素的递归算法

算法MAJORITY

输入:

n个元素的数组A[1..n]。

输出:

若A[1..n]存在多数元素,则输出;否则输出none。

c=candidate

(1)n]中的候选多数元素。

count=0n]中的多数元素。

forj=1ton

ifA[j]=cthencount=count+1

endfor

if____________thenreturnc

elsereturnnone

endMAJORITY

过程candidate(m)

n]中的候选多数元素并返回。

j=m;c=A[m];count=1

whilej0

j=j+1

if____________then____________

else____________下面是0-1背包问题的算法

算法KNAPSACKREC

输入:

物品数n,n种物品的体积数组s[1..n]和价值数组v[1..n],

背包容量C。

输出:

装入背包物品的最大总价值,以及最优解的信息数组H[0..n,0..C]。

fori=0ton

forj=0toC

V[i,j]=-1

maxv=knapsack(n,C)

returnmaxv,H

endKNAPSACKREC

过程knapsack(i,j)

n,0..C]。

ifV[i,j]=-1thenn],相应的0/1背包问题的最优解信息数组H[0..n,0..C]。

输出:

相应的0/1背包问题的最优解X[1..n]。

y=C以下是随机化的线性选择算法

算法RANDOMIZEDSELECT

输入:

整数n,k,1<=k<=n,以及n个元素的数组A[1..n]。

输出:

A中的第k小元素s。

s=rselect(A,1,n,k)

endRANDOMIZEDSELECT

过程rselect(A,low,high,k)

high]中的第k小元素并返回。

v=random(low,high)

mm=____________

将A[low..high]分成三个数组:

A1={a|amm}

high]的第k小元素。

|A1|+|A2|

returnrselect____________

以下是归并排序的分治算法

MERGESORT

输入:

n个元素的数组A[1..n]。

输出:

按非降序排序的数组A[1..n]。

mergesort(A,1,n)

endMERGESORT

过程mergersort(A,low,high)

high]按非降序归并排序。

iflow

mid=___________以下是分数背包问题的贪心算法

算法GREEDY_KANPSACK

输入:

表示背包容量的实数C,物品数n,表示n个物品的体积和价值的实数数组s[1..n]和v[1..n]。

输出:

装入背包物品的最大总价值maxv和相应的最优解x[1..n]。

fori=1ton

y[i]=v[i]/s[i]n]。

endfor

n]按降序地址排序,排序结果返回到数组d[1..n]n]初始化。

i=1;maxv=0;rc=Cn]

endGREEDY_KNAPSACK

9.以下是子集合问题的回溯算法

算法SUBSETSUM

输入:

正整数n,正实数b,表示含有n个正实数的集合S的数组a[1..n]。

输出:

集合S的元素之和等于b的所有子集,若无解,则输出“nosolution”。

fori=1tonx[i]=0n]表示子集,初始化为空集。

r=0

fori=1tonr=r+a[i]

flag=subset(0,0,r)

ifnotflagthenoutput“nosolution”

endSUBSETSUM

过程:

subset(k,sum,r)

k]固定的情况下,求关于S,b的

n];t=true下面是一个求n个元素全排列的算法

算法PERMUTATION

输入:

正整数n和存储n个元素a1,a2,…,an的数组P[1..n]。

输出:

a1,a2,…,an的全排列。

perml

(1)

endPERMUTATION

过程perml(m)

m-1]中元素固定不变的情况下,求P[m..n]中元素

n]中元素的相应排列。

if____________thenn];n]中元素的一个新排列。

else

forj=mton

P[m]↔P[j]

____________

____________

endfor

endif

endperml

11.以下是求最长公共子序列的算法

算法LCS

输入:

非负整数n、m,长度分别为n和m的序列A=a1a2…an和B=b1b2…bn。

输出:

A和B的最长公共子序列长度L[n,m]和存储最长公共子序列的有关信息的数组H[1..n,1..m]。

fori=0tonL[i,0]=0

forj=0tomL[0,j]=0

fori=1ton

forj=1tom

ifai=bjthen

L[i,j]=____________;H[i,j]=0

else

ifL[i-1,j]>=L[i,j-1]then

L[i,j]=____________;H[i,j]=1

else

L[i,j]=L[i,j-1];H[i,j]=____________

endif

endif

endfor

endfor

returnL[n,m],H

endLCS

算法LCSS

输入:

非负整数n、m,长度分别为n和m的序列A和B的最长公共子序列的有关信息数组H[1..n,1..m],序列A=a1a2…an。

输出:

序列A和B的最长公共子序列C。

C=Φ以下是0-1背包问题的回溯算法

算法KNAPSACK01

输入:

物品数n,n种物品的体积数组s[1..n]和价值数组v1..n],背包容量C。

输出:

装入背包物品的最大总价值maxv和最优解x0[1..n]。

n]表示选择的物品子集,初始化为空集。

rv=0;rs=0

fori=1ton

rv=rv+v[i];rs=rs+s[i]

maxv=0;x0[1..n]=x[1..n]=0n]

endKNAPSACK01

过程:

knapsack(k,r,cv,rv,rs)

k]固

k]=x[1..k];x0[k+1..n]=1;

endif

else

ifr>0andcv+rv>maxvthen下面是求第k小元素的算法

算法SELECT

输入:

整数n,k,1<=k<=n,以及n个元素的数组A[1..n]。

输出:

A中的第k小元素s。

s=select(A,1,n,k)

endSELECT

过程select(A,low,high,k)

high]中的第k小元素并返回。

p=high-low+1high]排序

return(A[low+k-1])

endif

high]每5个分组,剩余的被排除。

将A[low..low+5q-1]分为q组,每组5个元素;

将q组中的每一组单独排序并找出中项,所有的中项存于数组M[1..q]中;

mm=select(____________)high]分成三组:

A1={a|amm}

有期限的作业安排问题

算法JOB_ARRANGEMENT

输入:

作业数n,表示n个作业的期限和收益的数组d[1..n]和p[1..n]。

输出:

最优的作业安排序列J[1..k]和安排的作业数k。

 n]按降序地址排序,排序结果返回到数组a[1..n]

k]

endJOB_ARRANGEMENT

15.以下是关于矩阵链乘的算法MATCHAIN1和MATCHAIN_PRODUCT

算法MATCHAIN1

输入:

矩阵链长度n,n个矩阵的阶r[1..n+1],其中r[1..n]为n个矩阵的行数,r[n+1]为第n个矩阵的列数。

输出:

n个矩阵相乘的数量乘法的最小次数,最优顺序的信息数组S[1..n,1..n]。

   fori=1tonC[i,i]=0n,1..n]。

输出:

按最优顺序计算的矩阵链乘积M=M1M2…Mn。

M=matchain_product(1,n)

returnM

endMATCHAIN_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