算法分析与设计作业(三)

合集下载

算法分析与设计大作业

算法分析与设计大作业

算法分析与设计大作业摘要:本文以算法分析与设计为主题,对算法的概念、分析和设计进行了探讨。

首先介绍了算法的概念和基本特征,其次分析了算法的效率和复杂度,并介绍了常用的算法复杂度表示方法。

然后,通过实例分析了几种常用的排序算法的性能与复杂度,并对它们进行了比较。

最后,总结了算法分析与设计的重要性,并提出了进一步研究的方向。

一、引言随着计算机技术的快速发展,算法分析与设计成为计算机领域中的重要研究方向。

算法是指解决特定问题的具体步骤和方法,是计算机科学的核心和基础。

算法的效率和复杂度对计算机的性能和运行时间有着直接的影响,因此算法的分析和设计非常重要。

二、算法的概念和特征算法是指在有限的时间内解决特定问题的一种方法。

它具有以下特征:输入、输出、确定性、有穷性和可行性。

输入是指算法接受的问题的数据或信息,输出是指算法求解得到的问题的解。

确定性是指算法在任何情况下都能够得到相同的结果。

有穷性是指算法在执行有限的步骤后能够终止。

可行性是指算法的每一步都是可行的,即能够被计算机执行。

三、算法的效率和复杂度算法的效率是指算法解决问题所需要的时间和空间资源的多少。

算法的复杂度是用来描述算法执行过程中所需要的资源的多少。

常用的算法复杂度表示方法有时间复杂度和空间复杂度。

时间复杂度表示算法的执行时间与输入规模之间的关系,用大写O表示。

空间复杂度表示算法所需的空间资源与输入规模之间的关系,用大写S表示。

四、常用的排序算法及性能与复杂度分析1.插入排序插入排序是一种简单直观的排序算法。

它的基本思想是将未排序的元素逐个插入到已排序的序列中。

插入的过程中,需要比较和移动元素的次数与未排序序列中的元素个数相关,因此时间复杂度为O(n^2)。

空间复杂度为O(1)。

2.冒泡排序冒泡排序是一种重复比较相邻元素并交换位置的排序算法。

它的基本思想是两两比较相邻元素,如果顺序错误则交换位置。

冒泡的过程中,需要进行n-1次的比较和交换操作,因此时间复杂度为O(n^2)。

算法设计与分析试题库

算法设计与分析试题库

《算法分析与设计》试题库(一)一、选择题1.应用Johnson 法则的流水作业调度采用的算法是(D )A. 贪心算法B. 分支限界法C.分治法D. 动态规划算法2.Hanoi 塔问题如下图所示。

现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置。

移动圆盘时遵守Hanoi 塔问题的移动规则。

由此设计出解Hanoi 塔问题的递归算法正确的为:(B )Hanoi 塔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))=⇔=6.能采用贪心算法求最优解的问题,一般具有的重要性质为:(A)A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按(D )策略,从根结点出发搜索解空间树。

北师大2018年春算法分析与设计作业(三)答案

北师大2018年春算法分析与设计作业(三)答案

《算法分析与设计》作业(三)本课程作业由两部分组成。

第一部分为“客观题部分”,由15个选择题组成,每题1分,共15分。

第二部分为“主观题部分”,由简答题和论述题组成,共15分。

作业总分30分,将作为平时成绩记入课程总成绩。

客观题部分:一、选择题(每题1分,共15题)1、贪心算法解各个子问题的方法是:( B )A、自底向上B、自顶向下C、随机选择D、自底向上或自顶向下2、用回溯法解旅行售货员问题时生成的树是:( B )A、子集树B、排列树C、二叉树D、多叉树3、在n后问题中任意两个皇后能放在:( D )A、同一行B、同一列C、同一斜线D、以上都不行4、用回溯法解0-1背包问题时生成的解空间树是:( A )A、子集树B、排列树C、二叉树D、多叉树5、用贪心算法解单源最短路径问题时采用的算法是:( A )A、Dijkstra算法B、Prime算法C、Kruskal算法D、蒙特卡罗算法6、在用动态规划解流水作业调度时的最优调度法则是:( C )A、最优子结构B、重叠子问题C、Johnson法则D、最长处理时间作业优先7、算法与程序的区别在于:( C )A、输入B、输出C、指令的确定性D、指令的有限性8、从分治法的一般设计模式可以看出,用它设计的程序一般是:( D )A、顺序B、选择C、循环D、递归9、回溯法的解空间是在搜索过程中:( A )A、动态产生B、静态产生C、无解空间D、动态或者静态产生10、在用贪心法解多机调度时的贪心选择策略是:( D )A、最优子结构B、重叠子问题C、Johnson法则D、最长处理时间作业优先11、合并排序和快速排序采用的共同策略是:( A )A、分治法B、蒙特卡罗法C、拉斯维加斯法D、单纯形法12、用回溯法解最大团问题时生成的解空间树是:( D )A、子集树B、排列树C、二叉树D、多叉树13、用分支限界法解装载问题的解空间是:( B )A、子集树B、排列树C、单向链表D、多向链表14、计算定积分的算法:( A )A、随机投点法B、舍伍德法C、分治法D、回溯法15、用随机化算法解同一实例两次得到:( C )A、结果和时间都相同B、结果相同时间不相同C、结果和时间都不相同D、以上都不对主观题部分:二、改错题(每题2.5分,共2题)下面有两个二分搜索算法,请判断它们的正确性。

算法分析与设计作业及参考答案样本

算法分析与设计作业及参考答案样本

《算法分析与设计》作业( 一)本课程作业由两部分组成。

第一部分为”客观题部分”, 由15个选择题组成, 每题1分, 共15分。

第二部分为”主观题部分”,由简答题和论述题组成, 共15分。

作业总分30分, 将作为平时成绩记入课程总成绩。

客观题部分:一、选择题( 每题1分, 共15题)1、递归算法: ( C )A、直接调用自身B、间接调用自身C、直接或间接调用自身 D、不调用自身2、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的字问题, 这些子问题: ( D )A、相互独立B、与原问题相同C、相互依赖D、相互独立且与原问题相同3、备忘录方法的递归方式是:( C )A、自顶向下B、自底向上C、和动态规划算法相同D、非递归的4、回溯法的求解目标是找出解空间中满足约束条件的:( A )A、所有解B、一些解C、极大解D、极小解5、贪心算法和动态规划算法共有特点是: ( A )A、最优子结构B、重叠子问题C、贪心选择D、形函数6、哈夫曼编码是: ( B)A、定长编码B、变长编码C、随机编码D、定长或变长编码7、多机调度的贪心策略是: ( A)A、最长处理时间作业优先B、最短处理时间作业优先C、随机调度D、最优调度8、程序能够不满足如下性质: ( D )A、零个或多个外部输入B、至少一个输出C、指令的确定性D、指令的有限性9、用分治法设计出的程序一般是: ( A )A、递归算法B、动态规划算法C、贪心算法D、回溯法10、采用动态规划算法分解得到的子问题:( C )A、相互独立B、与原问题相同C、相互依赖D、相互独立且与原问题相同11、回溯法搜索解空间的方法是: ( A )A、深度优先B、广度优先C、最小耗费优先D、随机搜索12、拉斯维加斯算法的一个显著特征是它所做的随机选性决策有可能导致算法: ( C )A、所需时间变化B、一定找到解C、找不到所需的解D、性能变差13、贪心算法能得到: ( C )A、全局最优解B、 0-1背包问题的解C、背包问题的解 D、无解14、能求解单源最短路径问题的算法是: ( A )A、分支限界法B、动态规划C、线形规划D、蒙特卡罗算法15、快速排序算法和线性时间选择算法的随机化版本是:( A )A、舍伍德算法B、蒙特卡罗算法C、拉斯维加斯算法D、数值随机化算法主观题部分:二、写出下列程序的答案( 每题2.5分, 共2题)1、请写出批处理作业调度的回溯算法。

算法设计与分析复习题目及答案 (3)

算法设计与分析复习题目及答案 (3)

分治法1、二分搜索算法是利用(分治策略)实现的算法。

9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。

34.实现合并排序利用的算法是(分治策略)。

实现大整数的乘法是利用的算法(分治策略)。

17.实现棋盘覆盖算法利用的算法是(分治法)。

29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。

不可以使用分治法求解的是(0/1背包问题)。

动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。

下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。

(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。

矩阵连乘问题的算法可由(动态规划算法B)设计实现。

实现最大子段和利用的算法是(动态规划法)。

贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。

回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。

剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。

分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。

分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。

(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。

《算法分析与设计》课后作业

《算法分析与设计》课后作业

《算法分析与设计》各章课后作业第一章 课后作业1. 设某算法在输入规模为n 时的计算时间为T(n)=10*2n。

若在甲台计算机上实现并完成该算法的时间为t 秒,现有一台运行速度是甲的64倍的另一台计算机乙,问在乙计算机上用同一算法在t 秒内能解决的问题的规模是多大?2.按照渐近阶从低到高的顺序排列以下表达式:4n 2,logn ,3n,20n ,2,n 2/3。

又n!应该排在哪一位?第二章 课后作业1. 用展开法求解下列递推关系:T(n)=⎩⎨⎧>+=1n )()2/(20n )1(n O n T O,写出T(n)的大O 记号表示。

2. 下面是实现在a[0]<=a[1]<=…<=a[n-1]中搜索x 的二分搜索算法,请根据二分 搜索技术在下划线处填充语句。

算法描述如下: template<class Type>public static int BinarySearch(int []a, int x, int n) { //在a[0]<=a[1]<=…<=a[n-1]中搜索 x // 找到x 时返回其在数组中的位置,否则返回-1 int left = 0; int right = n - 1; while ( ) {int middle = ;if(x == a[middle]) return ; if(x > a[middle]) left = middle + 1; else right= ; }return -1; // 未找到x}第三章课后作业1、选择题。

(1)下列算法中通常以自底向上的方式求解最优解的是()。

A、备忘录法B、动态规划法C、贪心法D、回溯法(2)备忘录方法是那种算法的变形。

()A、分治法B、动态规划法C、贪心法D、回溯法(3)矩阵连乘问题的算法可由()设计实现。

A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法2.计算题。

算法分析与设计作业

算法分析与设计作业

最接近点对问题问题此问题分为一维,二维,三维的情况1. 一维: 给定直线上n 个点,找其中一对点,使得在n 个点组成的所有点对中,该点对间的距离最小,这个问题比较简单,是引出二维解法的一个引子,因为一维的直线上的点,相邻点的距离肯定小于相隔的点的距离,只需要考虑相邻点即可。

2. 二维:给定平面上n 个点,找其中一对点,使得在n 个点组成的所有点对中,该点对间的距离最小,这是我们这一问题的重点3. 三维:给定空间上n 个点,找其中一对点,使得在n 个点组成的所有点对中,该点对间的距离最小,此问题是二维的解法的复杂化,具体可以在飞机航线等问题上运用,但在此不多做介绍。

基本思想由于该问题的基本解法是去考察每个点和其他所有点的距离。

因此它的时间复杂度是2()O n ,这样做的效率太低,我们就要去寻找一个更高效的办法:分治法。

1. 因二维的情况太过复杂,先考虑一维的情况中,可以用分治法对其进行分部计算: 把直线分成两部分, 1s 2s ,分别求出其最接近点的距离1d 2d 。

但分割开的地方的两点距离可能小于这两个值,这三个值进行比较之后,得到最后结果。

2. 鉴于此,二维的也可以用此方法进行计算:把待计算的点s 分成两部分1s 2s ,分别求出其最接近点的距离1d 2d 。

但1d 2d 最小的未必是s 中的最小距离d ,它有可能是1s 中的一个点和2s 中的一个点组成的最接近点对。

所以还要考虑1s 中的所有点到2s 中的每一个点的距离,一一比较之后得出一个最小值,再和1d 2d 比较,这就得出了最后结果。

3. 接下来是具体算法实现的步骤:1. 把待计算的点s 分成两部分1s 2s :重要的如何去划分,这里采用在二维平面上的中线(用横坐标的最小值加上最大值的平均数)来划分。

2. 分别求出其最接近点的距离1d 2d :这可以用一个递归来完成。

3. 计算1s 中的所有点到2s 中的每一个点的距离:这个问题是此问题的关键。

电子科技大学研究生算法设计与分析拟考题及答案评分细则(3)

电子科技大学研究生算法设计与分析拟考题及答案评分细则(3)

电子科技大学研究生算法设计与分析拟考题及答案评分细则(3)一、Please answer T or F for each of the following statements to indicate whether the statement is true or false1. The knapsack problem can be solved in polynomial time by using dynamic programming.( F )2. Some problems in NP can be solved in polynomial time.( T )3. To show a problem is NP-hard, we can reduce it to a well-known NP-Complete problem.( F )4. In an undirected graph, the value of the maximum flow between two vertices is equivalent to the value of the minimum cut between them. ( T )5. . ( F )二、Arrange the following functions in ascending asymptotic order of growth rate:,,,,.参考答案:f2,f3,f1,f4,f5三、Please answer the following questions:(a) What are the main steps of designing a dynamic programming algorithm?参考答案:1.定义子问题;2根据子问题建立递归关系式;3用自底而上的方式求解(建立储存表)。

(b) What are the main steps of proving the NP-Completeness of a problem?参考答案:1.证明该问题属于NP;2.选一个已知的NPC问题B;3.将问题B归约到该问题上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《算法分析与设计》作业(三)
本课程作业由两部分组成。

第一部分为“客观题部分”,由15个选择题组成,每题1分,共15分。

第二部分为“主观题部分”,由简答题和论述题组成,共15分。

作业总分30分,将作为平时成绩记入课程总成绩。

客观题部分:
一、选择题(每题1分,共15题)
1、贪心算法解各个子问题的方法是:()
A、自底向上
B、自顶向下
C、随机选择
D、自底向上或自顶向下
2、用回溯法解旅行售货员问题时生成的树是:()
A、子集树
B、排列树
C、二叉树
D、多叉树
3、在n后问题中任意两个皇后能放在:()
A、同一行
B、同一列
C、同一斜线
D、以上都不行
4、用回溯法解0-1背包问题时生成的解空间树是:()
A、子集树
B、排列树
C、二叉树
D、多叉树
5、用贪心算法解单源最短路径问题时采用的算法是:()
A、Dijkstra算法
B、Prime算法
C、Kruskal算法
D、蒙特卡罗算法
6、在用动态规划解流水作业调度时的最优调度法则是:()
A、最优子结构
B、重叠子问题
C、Johnson法则
D、最长处理时间作业优先
7、算法与程序的区别在于:()
A、输入
B、输出
C、指令的确定性
D、指令的有限性
8、从分治法的一般设计模式可以看出,用它设计的程序一般是:()
A、顺序
B、选择
C、循环
D、递归
9、回溯法的解空间是在搜索过程中:()
A、动态产生
B、静态产生
C、无解空间
D、动态或者静态产生
10、在用贪心法解多机调度时的贪心选择策略是:()
A、最优子结构
B、重叠子问题
C、Johnson法则
D、最长处理时间作业优先
11、合并排序和快速排序采用的共同策略是:()
A、分治法
B、蒙特卡罗法
C、拉斯维加斯法
D、单纯形法
12、用回溯法解最大团问题时生成的解空间树是:()
A、子集树
B、排列树
C、二叉树
D、多叉树
13、用分支限界法解装载问题的解空间是:()
A、子集树
B、排列树
C、单向链表
D、多向链表
14、计算定积分的算法:()
A、随机投点法
B、舍伍德法
C、分治法
D、回溯法
15、用随机化算法解同一实例两次得到:()
A、结果和时间都相同
B、结果相同时间不相同
C、结果和时间都不相同
D、以上都不对
主观题部分:
二、改错题(每题2.5分,共2题)
下面有两个二分搜索算法,请判断它们的正确性。

如果算法不正确,请说明产生错误的原因;如果算法正确,请给出算法的正确性证明。

1 public static int binarySearch(int [] a, int x, int n)
{
int left = 0; int right = n - 1;
while (left <= right) {
int middle = (left + right)/2;
if (x == a[middle]) return middle;
if (x > a[middle]) left = middle;
else right = middle;
}
return -1;
}
2 public static int binarySearch(int [] a, int x, int n)
{
int left = 0; int right = n - 1;
while (left <= right-1) {
int middle = (left + right)/2;
if (x < a[middle]) right = middle;
else left = middle;
}
if (x==a[left]) return left;
else return -1;
}
三、写出下列题目的程序(每题5分,共2题)
1. 程序存储问题
问题描述:设有n个程序{1, 2, …, n}要存放在长度为L的磁带上。

程序i存放在磁带
上的长度是l i , n i ≤≤1。

程序存储问题要求确定这n 个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。

编程任务:对于给定的n 个程序存放在磁带上的长度,编程计算磁带上最多可以存储的程序数。

数据输入:由文件input.txt 给出输入数据。

第1行是2个正整数,分别表示文件个数n 和磁带的长度L 。

接下来的1行中,有n 个正整数,表示程序存放在磁带上的长度。

结果输出:将编程计算出的最多可以存储的程序数输出到文件output.txt 。

输入文件示例 输出文件示例
input.txt output.txt
6 50 5
2 3 13 8 80 20
2. 编辑距离问题
问题描述:设A 和B 是2个字符串。

要用最少的字符操作将字符串A 转化为字符串B.这里所说的字符操作包括:
(1) 删除一个字符;
(2) 插入一个字符;
(3) 将一个字符改为另一个字符。

将字符串A 变换为字符串B 所用的最少字符操作数称为字符串A 到B 的编辑距离,记为d(A, B)。

试设计一个有效算法,对任给的2个字符串A 和B ,计算出它们的编辑距离d(A, B)。

编程任务:对于给定的字符串A 和字符串B ,编程计算其编辑距离d(A, B)。

数据输入:由文件input.txt 提供输入数据。

文件的第1行是字符串A ,文件的第2行是字符串B 。

结果输出:程序运行结束时,将编辑距离d(A, B)输出到文件output.txt 的第1行中。

输入文件示例 输出文件示例
input.txt output.txt
fxpimu 5
xwrs。

相关文档
最新文档