算法与分析试题及答案

算法与分析试题及答案
算法与分析试题及答案

1、对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或))(()(n g n f Ω=或))(()(n g n f θ=,并简述理由。(12分)

(1) ;5log )(;log )(2+==n n g n n f

(2) ;100)(;2)(2n n g n f n ==

(3) ;3)(;2)(n n n g n f ==

2、试用分治法实现有重复元素的排列问题:设),...,,{21n r r r R =是要进行排列的n 个元素,其中元素n r r r ,...,,21可能相同,试计算R 的所有不同排列。(13分)

3、试用分治法对一个有序表实现二分搜索算法。(12分)

4、试用动态规划算法实现0-1闭包问题。(15分)

5、试用贪心算法求解下列问题:将正整数n 分解为若干个互不相同的自然数之和,使这些自然数的乘积最大。(15分)

6、试用动态规划算法实现最大子矩阵和问题:求n m ?矩阵A 的一个子矩阵,使其各元素之各为最大。(15分)

7、试用回溯法解决下列整数变换问题:关于整数i 的变换f 和g 定义如下:??2/)(;3)(i i g i i f ==。对于给定的两个整数n 和m ,要求用最少的变换f 和g 变换次数将n 变为m 。(18分)

1、(1) 证明:O(f)+O(g)=O(f+g) (7分)

(2) 求下列函数的渐近表达式:(6分)

3n 2+10n; 21+1/n;

2、对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或))(()(n g n f Ω=或))(()(n g n f θ=,并简述理由。(15分)

(1) ;5log )(;log )(2+==n n g n n f (2) ;)(;log )(2n n g n n f ==

(3) ;log )(;)(2n n g n n f ==

3、试用分治法对数组A[n]实现快速排序。(13分)

4、试用动态规划算法实现最长公共子序列问题。(15分)

5、试用贪心算法求解汽车加油问题:已知一辆汽车加满油后可行驶n 公里,而旅途中有若干个加油站。试设计一个有效算法,指出应在哪些加油站停靠加油,使加油次数最少。。(12分)

6、试用动态规划算法实现下列问题:设A 和B 是两个字符串。我们要用最少的字符操作,将字符串A 转换为字符串B ,这里所说的字符操作包括:

(1) 删除一个字符。

(2) 插入一个字符。

(3) 将一个字符改为另一个字符。

将字符串A 变换为字符串B 所用的最少字符操作数称为字符串A 到B 的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的两个字符串A 和B ,计算出它们的编辑距离d(A,B)。

(16分)

7、试用回溯法解决下列整数变换问题:关于整数i 的变换f 和g 定义如下:??2/)(;3)(i i g i i f ==。对于给定的两个整数n 和m ,要求用最少的变换f 和g 变换次数将n 变为m 。(16分)

1、 解:简答如下:

(1))5(log log 2+=n n θ,(2))100(22n n Ω=,(3))3(2n

n ο=

2、解:解答如下:

Template

void Perm(Type list[],int k,int m)

{

if(k= =m){

for(int i=0;i<=m;i++) cout<

cout<

}

else for(int i=k;i<=m;i++)

if(ok(list,k,i)){

swap(list[k],list[i]);

Perm(list,k+1,m);

swap(list[k],list[i]); ……………………………..(8分)

};

}

其中ok用于判别重复元素。

Template

int ok(Type list[],int k,int i)

{

if(i>k)

for(int t=k;t

if(list[t]= =list[i]) return 0;

return 1;

}……………………………..(13分)

3、解:解答如下:

Template

int BinarySearch(Type a[],const Type& x,int n)

{//假定数组a[]已按非递减有序排列,本算法找到x后返回其在数组a[]中的位置,//否则返回-1 int left=0,right=n-1;

while(left<=right){

int middle=(left+right)/2;……………………………..(4分)

if(x= =a[middle]) return middle+1;

if(x>a[middle]) left=middle+1;……………………………..(8分)

else right=middle-1;

}

return -1;

}……………………………..(12分)

4、解:解答如下:

Template

void Knapsack(Type v,int w,int c,int n,Type **m)

{

Int jMax=min(w[n]-1,c);

for(int j=0;j<=jMax;j++) m[n][j]=0;

for(int j=w[n];j<=c;j++) m[n][j]=v[n]; ……………………………..(5分)

for(int i=n-1;i>1;i--){

jMax=min(w[i]-1,c);

for(int j=0;j<=jMax;j++) m[i][j]=m[i+1][j];

for(int j=w[i];j<=c;j++) m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]); …………..(8分)};

m[1][c]=m[2][c];

if(c>=w[1]) m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]); …………..(10分)

}

Template

V oid Traceback(Type **m,int w,int c,int n,int x)

{

for(int i=1;i

if(m[i][c]= =m[i+1][c]) x[i]=0; …………..(12分)

else { x[i]=1,c-=w[i];};

x[n]=(m[n][c])?1:0;

}……………………………..(15分)

5、解:解答如下:

void dicomp(int n,int a[])

{

k=1;

if(n<3){ a[1]=0;return;};

if(n<5){ a[k]=1;a[++k]=n-1;return;}; ……………………………..(5分)

a[1]=2;n-=2;

while(n>a[k]){

k++;

a[k]=a[k-1]+1;

n-=a[k];

};……………………………..(10分)

if(n= =a[k]){ a[k]++;n--;};

for(int i=0;i

}……………………………..(15分)

6、解:解答如下:

int MaxSum2(int m,int n,int **a)

{

int sum=0;

int *b=new int[n+1];

for(int i=1;i<=m;i++){

for(int k=1;k<=n;k++) b[k]=0;……………………………..(5分)

for(int j=i;j<=m;j++){

for(int k=1;k<=n;k++) b[k]+=a[j][k];

int max=MaxSum(n,b);

if(max>sum) sum=max;

}

}

return sum;……………………………..(10分)

}

int MaxSum(int n,int *a)

{

int sum=0,b=0;

for(int i=1;i<=n;i++){

if(b>0) b+=a[i];

else b=a[i];

if(b>sum) sum=b;

}

Return sum;……………………………..(15分)

}

7、解:解答如下:

void compute()

{

k=1;

while(!search(1,n)){

k++;

if(k>maxdep) break;

init();

};……………………………..(6分)

if(found) output();

else cout<<”No Solution!”<

}……………………………..(9分)

bool search(int dep,int n)

{

If(dep>k) return false;

for(int i=0;i<2;i++){

int n1=f(n,i);t[dep]=i;……………………………..(12分) if(n1= =m||search(dep+1,n1)){

Found=true;

Out();

return true;

}

return false;……………………………..(18分)

}

算法设计与分析考试题及答案

算法设计与分析考试题 及答案 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:确定性 有穷性 可行性 0个或多个输入 一个或多个输出 2.算法的复杂性有时间复杂性 空间复杂性之分,衡量一个算法好坏的标准是 时间复杂度高低 3.某一问题可用动态规划算法求解的显着特征是 该问题具有最优子结构性质 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y 的一个最长公共子序列{BABCD}或{CABCD}或{CADCD } 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解 6.动态规划算法的基本思想是将待求解问题分解成若干_子问题 ,先求解_子问题 ,然后从这些子问题 的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法 背包问题的回溯算法所需的计算时间为o(n*2n ) ,用动态规划算法所需的计算时间为o(min{nc,2n }) 9.动态规划算法的两个基本要素是最优子结构 _和重叠子问题 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;②构造最优值的递归关系表达式; ③最优值的算法描述;④构造最优解; 2. 流水作业调度问题的johnson 算法的思想。 ①令N 1={i|a i =b i };②将N 1中作业按a i 的非减序排序得到N 1’,将N 2中作业按b i 的非增序排序得到N 2’;③N 1’中作业接N 2’中作业就构成了满足Johnson 法则的最优调度。 3. 若n=4,在机器M1和M2上加工作业i 所需的时间分别为a i 和b i ,且 (a 1,a 2,a 3,a 4)=(4,5,12,10),(b 1,b 2,b 3,b 4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N 1’={1,3}, N 2’={4,2}; 最优值为:38 4. 使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为: 该问题的最优值为:16 最优解为:(1,1,0) 5. 设S={X 1,X 2,···,X n }是严格递增的有序集,利用二叉树的结点来存储S 中的元素,在表示S 的二叉搜索树中搜索一个元素X ,返回的结果有两种情形,(1)在二叉搜索树的内结点中找到X=X i ,其概率为b i 。(2)在二叉搜索树的叶结点中确定X ∈(X i ,X i+1),其概率为a i 。在表示S 的二叉搜索树T 中,设存储元素X i 的结点深度为C i ;叶结点(X i ,X i+1)的结点深度为d i ,则二叉搜索树T 的平均路长p 为多少假设二叉搜索树T[i][j]={X i ,X i+1,···,X j }最优值为m[i][j],W[i][j]= a i-1+b i +···+b j +a j ,则m[i][j](1<=i<=j<=n)递归关系表达式为什么 .二叉树T 的平均路长P=∑=+n i 1 Ci)(1*bi +∑=n j 0 dj *aj

考研数据结构必须掌握的知识点与算法-打印版

《数据结构》必须掌握的知识点与算法 第一章绪论 1、算法的五个重要特性(有穷性、确定性、可行性、输入、输出) 2、算法设计的要求(正确性、可读性、健壮性、效率与低存储量需求) 3、算法与程序的关系: (1)一个程序不一定满足有穷性。例操作系统,只要整个系统不遭破坏,它将永远不会停止,即使没有作业需要处理,它仍处于动态等待中。因此,操作系统不是一个算法。 (2)程序中的指令必须是机器可执行的,而算法中的指令则无此限制。算法代表了对问题的解,而程序则是算法在计算机上的特定的实现。 (3)一个算法若用程序设计语言来描述,则它就是一个程序。 4、算法的时间复杂度的表示与计算(这个比较复杂,具体看算法本身,一般关心其循环的次数与N的关系、函数递归的计算) 第二章线性表 1、线性表的特点: (1)存在唯一的第一个元素;(这一点决定了图不是线性表) (2)存在唯一的最后一个元素; (3)除第一个元素外,其它均只有一个前驱(这一点决定了树不是线性表) (4)除最后一个元素外,其它均只有一个后继。 2、线性表有两种表示:顺序表示(数组)、链式表示(链表),栈、队列都是线性表,他们都可以用数组、链表来实现。 3、顺序表示的线性表(数组)地址计算方法: (1)一维数组,设DataType a[N]的首地址为A0,每一个数据(DataType类型)占m个字节,则a[k]的地址为:A a[k]=A0+m*k(其直接意义就是求在数据a[k]的前面有多少个元素,每个元素占m个字节) (2)多维数组,以三维数组为例,设DataType a[M][N][P]的首地址为A000,每一个数据(DataType 类型)占m个字节,则在元素a[i][j][k]的前面共有元素个数为:M*N*i+N*j+k,其其地址为: A a[i][j][k]=A000+m*(M*N*i+N*j+k); 4、线性表的归并排序: 设两个线性表均已经按非递减顺序排好序,现要将两者合并为一个线性表,并仍然接非递减顺序。可见算法2.2 5、掌握线性表的顺序表示法定义代码,各元素的含义; 6、顺序线性表的初始化过程,可见算法2.3 7、顺序线性表的元素的查找。 8、顺序线性表的元素的插入算法,注意其对于当原来的存储空间满了后,追加存储空间(就是每次增加若干个空间,一般为10个)的处理过程,可见算法2.4 9、顺序线性表的删除元素过程,可见算法2.5 10、顺序线性表的归并算法,可见算法2.7 11、链表的定义代码,各元素的含义,并能用图形象地表示出来,以利分析; 12、链表中元素的查找 13、链表的元素插入,算法与图解,可见算法2.9 14、链表的元素的删除,算法与图解,可见算法2.10 15、链表的创建过程,算法与图解,注意,链表有两种(向表头生长、向表尾生长,分别用在栈、队列中),但他们的区别就是在创建时就产生了,可见算法2.11 16、链表的归并算法,可见算法2.12 17、建议了解所谓的静态单链表(即用数组的形式来实现链表的操作),可见算法2.13 18、循环链表的定义,意义 19、循环链表的构造算法(其与单链表的区别是在创建时确定的)、图解

算法设计与分析试卷A及答案

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

参考答案 一、填空 1、空间复杂度 时间复杂度 2、回溯法 3、递归算法 4、渐进确界或紧致界 5、原问题的较小模式 递归技术 6、问题的计算复杂性分析有一个共同的客观尺度 7、②③④① 8、问题的最优解包含其子问题的最优解 9、局部最优 10、正确的 三、简答题 1、高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作; 高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高; 高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可植性好、重用率高; 把繁杂琐碎的事务交给编译程序,所以自动化程度高,开发周期短,程序员可以集中时间和精力从事更重要的创造性劳动,提高程序质量。 2、 ①不能保证最后求得的解是最佳的;即多半是近似解。(少数问题除外) ②策略容易发现(关键:提取清楚问题中的维度), 而且运用简单,被广泛运用。 ③策略多样,结果也多样。 ④算法实现过程中,通常用到辅助算法:排序 3、解:① 因为:;01 -10n n )1-10n n (lim 22 2=+-+→∞n n 由渐近表达式的定义易知: 1-10n n 2 2+是n ;的渐近表达式。 ② 因为:;0n 1/ 5/n 1414)n 1/ 5/n 14(lim 22=++-++∞→n 由渐近表达式的定义易知: 14是14+5/n+1/ n 2的渐近表达式。 4、 找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最优解。 四、算法设计题 1、按照单位效益从大到小依次排列这7个物品为:FBGDECA 。将它们的序号分别记为1~7。则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得:【排序1分】 5x =6x =7x =

最新计算机算法设计与分析期末考试复习题(1)

1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( B )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4、在下列算法中有时找不到问题解的是( B )。 A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法 5. 回溯法解旅行售货员问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 7、衡量一个算法好坏的标准是(C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 8、以下不可以使用分治法求解的是(D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 9. 实现循环赛日程表利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 10、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法 11.下面不是分支界限法搜索方式的是( D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先(回溯法)12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 13.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 14.哈弗曼编码的贪心算法所需的计算时间为( B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 15.分支限界法解最大团问题时,活结点表的组织形式是( B )。 A、最小堆 B、最大堆 C、栈 D、数组 16.最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法17.实现棋盘覆盖算法利用的算法是( A )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 18.下面是贪心算法的基本要素的是( C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解 19.回溯法的效率不依赖于下列哪些因素( D ) A.满足显约束的值的个数 B. 计算约束函数的时间 C. 计算限界函数的时间 D. 确定解空间的时间 20.下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A.递归函数 B.剪枝函数C。随机数函数 D.搜索函数 21、下面关于NP问题说法正确的是(B ) A NP问题都是不可能解决的问题 B P类问题包含在NP类问题中 C NP完全问题是P类问题的子集 D NP类问题包含在P类问题中

算法设计与分析考试题及答案

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。 2.算法的复杂性有_____________和___________之分,衡量一个算法 好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是 ____________________________________。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。

最新算法设计与分析复习要点(1)

算法设计与分析的复习要点 第一章:算法问题求解基础 算法是对特定问题求解步骤的一种描述,它是指令的有限序列。 一.算法的五个特征: 1.输入:算法有零个或多个输入量; 2.输出:算法至少产生一个输出量; 3.确定性:算法的每一条指令都有确切的定义,没有二义性; 4.可行性:算法的每一条指令必须足够基本,它们可以通过已经实现的基本运算执行有限次来实现; 5.有穷性:算法必须总能在执行有限步之后终止。 二.什么是算法?程序与算法的区别 1.笼统地说,算法是求解一类问题的任意一种特殊的方法;较严格地说,算法是对特定问题求解步骤的一种描述,它是指令的有限序列。 2.程序是算法用某种程序设计语言的具体实现;算法必须可终止,程序却没有这一限制;即:程序可以不满足算法的第5个性质“有穷性”。 三.一个问题求解过程包括:理解问题、设计方案、实现方案、回顾复查。 四.系统生命周期或软件生命周期分为: 开发期:分析、设计、编码、测试;运行期:维护。 五.算法描述方法:自然语言、流程图、伪代码、程序设计语言等。 六.算法分析:是指对算法的执行时间和所需空间的估算。算法的效率通过算法分析来确定。 七.递归定义:是一种直接或间接引用自身的定义方法。一个合法的递归定义包括两部分:基础情况和递归部分; 基础情况:以直接形式明确列举新事物的若干简单对象; 递归部分:有简单或较简单对象定义新对象的条件和方法 八.常见的程序正确性证明方法: 1.归纳法:由基础情况和归纳步骤组成。归纳法是证明递归算法正确性和进行算法分析的强有力工具; 2.反证法。 第二章:算法分析基础 一.会计算程序步的执行次数(如书中例题程序2-1,2-2,2-3的总程序步数的计算)。二.会证明5个渐近记法。(如书中P22-25例2-1至例2-9) 三.会计算递推式的显式。(迭代法、代换法,主方法) 四.会用主定理求T(n)=aT(n/b)+f(n)。(主定理见P29,如例2-15至例2-18)五.一个好的算法应具备的4个重要特征: 1.正确性:算法的执行结果应当满足预先规定的功能和性能要求; 2.简明性:算法应思路清晰、层次分明、容易理解、利于编码和调试; 3.效率:算法应有效使用存储空间,并具有高的时间效率; 4.最优性:算法的执行时间已达到求解该类问题所需时间的下界。 六.影响程序运行时间的主要因素: 1.程序所依赖的算法; 2.问题规模和输入数据规模; 3.计算机系统性能。 七.1.算法的时间复杂度:是指算法运行所需的时间;

算法设计与分析试卷及答案

湖南科技学院二○ 年 学期期末考试 信息与计算科学专业 年级《算法设计与分析》 试题 考试类型:开卷 试卷类型:C 卷 考试时量:120 分钟 1. 用O 、Ω和θ表示函数f 与g 之间的关系______________________________。 ()()log log f n n n g n n == 2. 算法的时间复杂性为1, 1()8(3/7), 2 n f n f n n n =?=? +≥?,则算法的时间复杂性的阶 为__________________________。 3. 快速排序算法的性能取决于______________________________。 4. 算法是_______________________________________________________。 5. 在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是_________________________。 6. 在算法的三种情况下的复杂性中,可操作性最好且最有实际价值的是_____情况下的时间复杂性。 7. 大Ω符号用来描述增长率的下限,这个下限的阶越___________,结果就越有价值。。 8. ____________________________是问题能用动态规划算法求解的前提。 9. 贪心选择性质是指________________________________________________________ ____________________________________________________________。 题 号 一 二 三 四 五 总分 统分人 得 分 阅卷人

算法设计与分析期末复习

算法设计与分析期末复习 1、假设某算法在输入规模为n时的计算时间为T(n)=3*4n。在某台计算机上实现并完成该算法的时间为t秒。另一台机器运行速度是第一台的64倍,则在这台计算机上用同一算法在t秒内能解输入规模n2为多大的问题? 计算时间可表示为:T(n)=3*4n 设新机器上能解规模为n2的问题,则:T(n2)=3*4n2=64*3*4n 解可得n2=n+3 若算法的计算时间进一步改进为为T(n)=20,当m=4时,其余条件不变,则在新机器上用t秒时将能解输入规模n2为多大的问题(写出求解过程) 答案解析: 计算时间可表示为:T(n)=20,即和规模n无关的常量所以可解输入规模n2为任意值的问题。 2、写出以下代码所描述算法在最坏情况下所需的计算时间T(n)的递归方程,并对其进行求解写出其渐进形式。 public static void mergeSort(Comparable a[],int left, int right){ if (left

4、假设有4个物品的0-1背包问题,它们的重量和价值如下表所示。背包容量M=12,使用回溯法求解此0-1背包问题。请画出状态空间搜索树,要求在空间树中各个结点旁标记出剩余容量cr,当前价值v,上界up等各个值。若某个结

点不符合剪枝函数,做出相应标记。 物品ABCD重量4352价值3345 答案解析: 该问题的最优解为(1,1,0,1,1,1,0,0),背包效益为165。即在背包中装入物品F、B、D、E时达到最大效益,为165,重量为140。 1.有如下活动其开始时间和结束时间如下表所示,使用贪心算法进行求解。要求写出算法思想,贪心选择策略,以及解题过程。 i1234567891011 S[i]3 5 0 5 1 2 3 6 2 8 8 1 f[i]5 7 6 9 14 8 10 13 12 11 4 正确答案: 我的答案:

算法设计与分析实验报告

算法设计与分析课程实验项目目录 学生姓名:学号: *实验项目类型:演示性、验证性、综合性、设计性实验。 *此表由学生按顺序填写。 本科实验报告专用纸

课程名称算法设计与分析成绩评定 实验项目名称蛮力法指导教师 实验项目编号 201 实验项目类型设计实验地点机房 学生姓名学号 学院信息科学技术学院数学系信息与计算科学专业级 实验时间 2012年 3月 1 日~6月30日温度24℃ 1.实验目的和要求: 熟悉蛮力法的设计思想。 2.实验原理和主要内容: 实验原理:蛮力法常直接基于问题的描述和所涉及的概念解决问题。 实验内容:以下题目任选其一 1).为蛮力字符串匹配写一段可视化程序。 2).写一个程序,实现凸包问题的蛮力算法。 3).最著名的算式谜题是由大名鼎鼎的英国谜人给出的: S END +MORE MONEY . 这 里有两个前提假设:第一,字母和十进制数字之间一一对应,也就是每个字母只代表一个数字,而且不同的字母代表不同的数字;第二,数字0不出现在任何数的最左边。求解一个字母算术意味着找到每个字母代表的是哪个数字。请注意,解可能并不是唯一的,不同人的解可能并不相同。 3.实验结果及分析: (将程序和实验结果粘贴,程序能够注释清楚更好。) 本科实验报告专用纸(附页) 该算法程序代码如下:

#include "" #include "" int main(int argc, char* argv[]) { int x[100],y[100]; int a,b,c,i,j,k,l,m,n=0,p,t1[100],num; int xsat[100],ysat[100]; printf("请输入点的个数:\n"); scanf("%d",&num); getchar(); clock_t start,end; start=clock(); printf("请输入各点坐标:\n"); for(l=0;l

算法设计与分析试卷及答案

湖南科技学院二○年学期期末考试 信息与计算科学专业年级《算法设计与分析》试题 考试类型:开卷试卷类型:C卷考试时量:120分钟 题号一二三四五总分统分人 得分 阅卷人 复查人 一、填空题(每小题3 分,共计30 分) 1、用O、Ω与θ表示函数f与g之间得关系______________________________。 2、算法得时间复杂性为,则算法得时间复杂性得阶为__________________________。 3、快速排序算法得性能取决于______________________________。 4、算法就是_______________________________________________________。 5、在对问题得解空间树进行搜索得方法中,一个活结点最多有一次机会成为活结点得就是_________________________。 6、在算法得三种情况下得复杂性中,可操作性最好且最有实际价值得就是_____情况下得时间复杂性。 7、大Ω符号用来描述增长率得下限,这个下限得阶越___________,结果就越有价值。。 8、____________________________就是问题能用动态规划算法求解得前提。 9、贪心选择性质就是指____________________________________________________________________________________________________________________。 10、回溯法在问题得解空间树中,按______________策略,从根结点出发搜索解空间树。 二、简答题(每小题10分,共计30分) 1、试述回溯法得基本思想及用回溯法解题得步骤。 2、有8个作业{1,2,…,8}要在由2台机器M1与M2组成得流水线上完成加工。每个作业加工得顺序都就是先在M1上加工,然后在M2上加工。M1与M2加工作业i所需得时间分别为: M110 2 8 12 6 9414

《算法设计与分析》复习题(汇编)

填空 1.直接或间接地调用自身的算法称为 递归 。 2.算法的复杂性是 算法效率 的度量,是评价算法优劣的重要依据。 3.以广度优先或以最小耗费方式搜索问题解的算法称为 分支限界法 。 4.回溯法解题的显著特点是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为 o(h(n)) 。 5.人们通常将问题的解决方案分为两大类:一类是可以通过执行若干个步骤就能得出问题 6.算法就是一组有穷的 规则 ,它们规定了解决某一特定类型问题的 一系列运算 。 7.在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型。3个基本计算模型是 随机存取机、 随机存取存储程序机 、 图灵机 。 8.快速排序算法的性能取决于 划分的对称性 。 9.计算机的资源最重要的是 内存 和 运算 资源。因而,算法的复杂性有时间 和 空间 之分。 10.贪心算法总是做出在当前看来 最优 的选择。也就是说贪心算法并不从整体最优考虑,它所做出的选择只是在某种意义上的 局部最优解 。 11.许多可以用贪心算法求解的问题一般具有2个重要的性质: 最优子结构的 性质和 贪心选择的 性质。 12.常见的两种分支限界法为 队列式 和 优先队列式 。 13.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中需要排序的是 回溯法 ,不需要排序的是 动态规划和分支限界法 。 14.f ( n ) = 6 × 2n + n 2,f(n)的渐进性态f ( n ) = O ( 2^n )。 15.对于含有n 个元素的排列树问题,最好情况下计算时间复杂性为 ,最坏情况下计算时间复杂性为 n! 。 16.在忽略常数因子的情况下,O 、Ω和Θ三个符号中, Θ 提供了算法运行时间的一个上界。 17.回溯法的求解过程,即在问题的解空间树中,按 深度优先 策略从根结点出发搜索解空间树。 18.分支限界法的求解过程,即在问题的解空间树中,按 广度优先 策略从根结点出发搜索解空间树。 19.多项式10()m m A n a n a n a =+ ++的上界为 2^n 。 20.用分支限界法解布线问题时,对空间树搜索结束的标志是 活结点表为空 。 21.使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N 皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进

算法设计与分析复习要点

·算法是指解决问题的方法和过程。算法是由若干条指令组成的有穷序列。 ·算法特性:输入、输出、确定性、有限性(执行时间和执行次数)(有五个空再加上可行性)。 ·程序是算法用某种程序设计语言的具体实现,程序可不满足有限性的特性。 ·程序调试只能证明程序有错,不能证明程序无错误! ·算法复杂性= 算法所需要的计算机资源。 ·算法的复杂性取决于:(1)求解问题的规模N;(2)具体的输入数据I;(3)算法本身的设计A。·可操作性最好且最有实际价值的是最坏情况下的时间复杂性。 第二章递归与分治策略 二分搜索技术:O(logn)大整数乘法:O(n log3)=O(n1.59)Strassen矩阵乘法:O(n log7)=O(n2.81) 棋盘覆盖:O(4k)合并排序和快排:O(nlogn)线性时间选择:O(n) 最接近点对问题:O(nlogn) 循环赛日程表:O(n2) ·分治法思想:将一个难以解决的问题分割成一些规模较小的相同问题,以便逐个击破,分而治之。边界条件与递归方程是递归函数的两大要素。 递归优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。 ·分治法时间复杂度分析:T(n)<= O(1) n=n0 aT(n/b)+f(n) n>n0 若递归方式为减法:T(n) = O(a n) 若递归方式为除法: f(n)为合并为原问题的开销:f(n)为常数c时:T(n)=O(n p) f(n)为线性函数:O(n) ab,p=log b a f(n)为幂函数n x时:O(n x) af(b),p=log b a ·证明算法的正确性:部分正确性、终止性。 第三章:动态规划 ·当前决策的最优性取决于其后续决策序列的是否最优。动态规划方法可以保证问题求解是全局最优的。

算法设计与分析试卷(2010)

算法设计与分析试卷(A 卷) 一、 选择题 ( 选择1-4个正确的答案, 每题2分,共20分) (1)计算机算法的正确描述是: B 、D A .一个算法是求特定问题的运算序列。 B .算法是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列。 C .算法是一个对任一有效输入能够停机的图灵机。 D .一个算法,它是满足5 个特性的程序,这5个特性是:有限性、确定性、能 行性、有0个或多个输入且有1个或多个输出。 (2)影响程序执行时间的因素有哪些? C 、D A .算法设计的策略 B .问题的规模 C .编译程序产生的机器代码质量 D .计算机执行指令的速度 (3)用数量级形式表示的算法执行时间称为算法的 A A .时间复杂度 B .空间复杂度 C .处理器复杂度 D .通信复杂度 (4)时间复杂性为多项式界的算法有: A .快速排序算法 B .n-后问题 C .计算π值 D .prim 算法 (5)对于并行算法与串行算法的关系,正确的理解是: A .高效的串行算法不一定是能导出高效的并行算法 B .高效的串行算法不一定隐含并行性 C .串行算法经适当的改造有些可以变化成并行算法 D. 用串行方法设计和实现的并行算法未必有效 (6)衡量近似算法性能的重要标准有: A A .算法复杂度 B .问题复杂度 C .解的最优近似度 D .算法的策略 (7)分治法的适用条件是,所解决的问题一般具有这些特征: ABCD A .该问题的规模缩小到一定的程度就可以容易地解决; B .该问题可以分解为若干个规模较小的相同问题; C .利用该问题分解出的子问题的解可以合并为该问题的解 D .该问题所分解出的各个子问题是相互独立的。 (8)具有最优子结构的算法有: A .概率算法 B .回溯法 C .分支限界法 D .动态规划法 (9)下列哪些问题是典型的NP 完全问题: A .排序问题 B .n-后问题 C .m-着色问题 D .旅行商问题 (10)适于递归实现的算法有: C A .并行算法 B .近似算法 C .分治法 D .回溯法 二、算法分析题(每小题5分,共10分) (11)用展开法求解递推关系: (12)分析当输入数据已经有序时快速排序算法的不足,提出算法的改进方案。 ???>+-==1 1)1(211)(n n T n n T

2015算法设计与分析考试复习刚要习题

计算机算法设计与分析复习题一、填空题1、一个算法复杂性的高低体现在计算机运行该算法所需的时间和存储器资源上,因此算法的复杂性有时间复杂性和空间复杂性之分。2、出自于“平衡子问题”的思想,通常分治法在分割原问题,形成若干子问题时,这些子问题的规模都大致相同。3、使用二分搜索算法在n个有序元素表中搜索一个特定元素,在最佳情况下,搜索的时间复杂性为O (1),在最坏情况下,搜索的时间复杂性为O(logn)。4、已知一个分治算法耗费的计算时间T(n),T(n)满足如下递归方程: n2O(1) T(n)2T(n/2)O(n)n2解得此递归方可得T(n)= O()。 nlogn5、动态规划算法有一个变形方法备忘录方法。这种方法不同于动态规划算法“自底向上”的填充方向,而是“自顶向下”的递归方向,为每个解过的子问题建立了备忘录以备需要时查看,同样也可避免相同子问题的重复求解。递归的二分查找算法在divide阶段所花的时间是 O(1) ,conquer阶段6.所花的时间是 T(n/2) ,算法的时间复杂度是 O( log n) 。7.Prim算法利用贪心策略求解最小生成树问题,其时间复杂度是 2O(n) 。8.背包问题可用贪心法,回溯法等策略求解。39.用动态规划算法计算矩阵连乘问题的最优值所花的时间是 O(n) ,子2问题空间大小是 O(n) 。10.图的m着色问题可用回溯法求解,其解空间树中叶子结点个数是nm ,解空间树中每个内结点的孩子数是 m 。11.单源最短路径问题可用贪心法、分支限界等策略求解。12、一个算法的优劣可以用(时间复杂度)与(空间复杂度)与来衡量。 13、回溯法在问题的解空间中,按(深度优先方式)从根结点出发搜索解空间树。 14、直接或间接地调用自身的算法称为(递归算法)。 15、记号在算法复杂性的表示法中表示(渐进确界或紧致界)。 16、在分治法中,使子问题规模大致相等的做法是出自一种(平衡(banlancing)子问题)的思想。 17、动态规划算法适用于解(具有

计算机算法设计与分析习题及答案

计算机算法设计与分析习 题及答案 Prepared on 24 November 2020

《计算机算法设计与分析》习题及答案 一.选择题 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是(A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4. 回溯法解旅行售货员问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树 5.下列算法中通常以自底向上的方式求解最优解的是(B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 6、衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 7、以下不可以使用分治法求解的是( D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 8. 实现循环赛日程表利用的算法是(A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 9.下面不是分支界限法搜索方式的是(D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先

10.下列算法中通常以深度优先方式系统搜索问题解的是(D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 11.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 12.哈夫曼编码的贪心算法所需的计算时间为(B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 13.分支限界法解最大团问题时,活结点表的组织形式是(B )。 A、最小堆 B、最大堆 C、栈 D、数组 14.最长公共子序列算法利用的算法是(B)。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 15.实现棋盘覆盖算法利用的算法是(A )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 16.下面是贪心算法的基本要素的是(C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解 17.回溯法的效率不依赖于下列哪些因素( D ) A.满足显约束的值的个数 B. 计算约束函数的时间 C.计算限界函数的时间 D. 确定解空间的时间 18.下面哪种函数是回溯法中为避免无效搜索采取的策略(B ) A.递归函数 B.剪枝函数 C。随机数函数 D.搜索函数 19. (D)是贪心算法与动态规划算法的共同点。

算法分析与设计知识点总结

第一章概述 算法的概念:算法是指解决问题的一种方法或过程,是由若干条指令组成的有穷序列。 算法的特征: 可终止性:算法必须在有限时间内终止; 正确性:算法必须正确描述问题的求解过程; 可行性:算法必须是可实施的; 算法可以有0个或0个以上的输入; 算法必须有1个或1个以上的输出。 算法与程序的关系: 区别:程序可以不一定满足可终止性。但算法必须在有限时间内结束; 程序可以没有输出,而算法则必须有输出; 算法是面向问题求解的过程描述,程序则是算法的实现。 联系:程序是算法用某种程序设计语言的具体实现; 程序可以不满足算法的有限性性质。 算法描述方式:自然语言,流程图,伪代码,高级语言。 算法复杂性分析: 算法复杂性的高低体现运行该算法所需计算机资源(时间,空间)的多少。 算法复杂性度量: 期望反映算法本身性能,与环境无关。 理论上不能用算法在机器上真正的运行开销作为标准(硬件性能、代码质量影响)。 一般是针对问题选择基本运算和基本存储单位,用算法针对基本运算与基本存储单位的开销作为标准。 算法复杂性C依赖于问题规模N、算法输入I和算法本身A。即C=F(N, I, A)。 第二章递归与分治 分治法的基本思想: 求解问题算法的复杂性一般都与问题规模相关,问题规模越小越容易处理。 分治法的基本思想是,将一个难以直接解决的大问题,分解为规模较小的相同子问题,直至这些子问题容易直接求解,并且可以利用这些子问题的解求出原问题的解。各个击破,分而治之。 分治法产生的子问题一般是原问题的较小模式,这就为使用递归技术提供了方便。递归是分治法中最常用的技术。 使子问题规模大致相等的做法是出自一种平衡(balancing)子问题的思想,它几乎总是比子问题规模不等的做法要好。 分治法所能解决的问题一般具有以下几个特征: 该问题的规模缩小到一定的程度就可以容易地解决; 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质; 利用该问题分解出的子问题的解可以合并为该问题的解; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。(这条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规划较好。) 递归的概念:

算法设计与分析期末总复习

复习 一、简答题(每小题5分,选答2题,共10分) 1. 什么是算法?试说明算法设计分析过程的一般框架和主要步骤。 2. 简述非递归算法时间效率分析的通用方案。 3. 简述递归算法时间效率的通用方案。 4. 简述蛮力法、分治法、减治法,变治法、时空权衡、动态规划、贪婪技术、迭代改进八种算法设计技术中至少三种技术基本思想或原理。 二、分析题(每小题10分,共20分) 1. 考虑下面的算法。P52 算法Mystery(n) //输入:非负整数n S=0 for i ← 1 to n do S ← S + i*i Return S a.该算法求的是什么? b.它的基本操作是什么? c.该基本操作执行了多少次? d.该算法的效率类型是什么? 2. 考虑下面的递归算法。P52 算法Secret(A[0..n-1]) //输入:包含n个实数的数组A[0..n-1] minval ← A[0]; maxval ← A[0] for i ←1 to n-1 do if A[i] < minval minval ← A[i] if A[i] > maxval maxval ← A[i] return maxval – minval a.该算法求的是什么? b.它的基本操作是什么? c.该基本操作执行了多少次? d.该算法的效率类型是什么? 3. 考虑下面的递归算法P59 算法Q(n) //输入:正整数 if n=1 return 1 else return Q(n-1) + 2*n -1 a. 建立该函数值的递推关系并求解,以确定该算法计算的是什么; b. 建立该算法所做的乘法运算次数的递推关系并求解; c. 建立该算法所做的加减运算次数的递推关系并求解。 三、算法设计题(每小题10分,共20分) 1. 应用快速排序对序列E,X,A,M,P,L,E按照字母顺序排序。并画出相应的递归调

《算法设计与分析》考试题目及答案

《算法分析与设计》期末复习题 一、选择题 1.应用Johnson法则的流水作业调度采用的算法是(D) A. 贪心算法 B. 分支限界法 C.分治法 D. 动态规划算法 塔问题如下图所示。现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi塔问题的移动规则。由此设计出解Hanoi塔问题的递归算法正确的为:(B) " ; | A. void hanoi(int n, int A, int C, int B) 《 { if (n > 0) { hanoi(n-1,A,C, B); move(n,a,b); hanoi(n-1, C, B, A); B. void hanoi(int n, int A, int B, int C) { if (n > 0) { hanoi(n-1, A, C, B); ] move(n,a,b); hanoi(n-1, C, B, A); } C. void hanoi(int n, int C, int B, int A) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); } }

3. 动态规划算法的基本要素为(C ) A. 最优子结构性质与贪心选择性质 B .重叠子问题性质与贪心选择性质 C .最优子结构性质与重叠子问题性质 D. 预排序与递归调用 4. 算法分析中,记号O 表示(B ), 记号Ω表示(A ), 记号Θ表示(D )。 … A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 E.非紧下界 5. 以下关于渐进记号的性质是正确的有:(A ) A.f (n)(g(n)),g(n)(h(n))f (n)(h(n))=Θ=Θ?=Θ B. f (n)O(g(n)),g(n)O(h(n))h(n)O(f (n))==?= C. O(f(n))+O(g(n)) = O(min{f(n),g(n)}) D. f (n)O(g(n))g(n)O(f (n))=?= D. void hanoi(int n, int C, int A, int B) { if (n > 0) { | hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); }

相关文档
最新文档