算法期末复习题final

合集下载

算法期末考试试题

算法期末考试试题

算法期末考试试题### 算法期末考试试题#### 一、选择题(每题2分,共20分)1. 在排序算法中,时间复杂度为O(n^2)的算法是:A. 快速排序B. 归并排序C. 堆排序D. 冒泡排序2. 哈希表的冲突解决方法不包括:A. 开放寻址法B. 线性探测法C. 链地址法D. 二分查找法3. 下列哪个是图的遍历算法:A. 深度优先搜索(DFS)B. 广度优先搜索(BFS)C. 快速排序D. 所有选项都是4. 在动态规划问题中,状态转移方程的作用是:A. 确定问题的最优解B. 描述问题的状态C. 将问题分解为子问题D. 计算子问题的解5. 以下不是贪心算法的应用场景的是:A. 霍夫曼编码B. 最小生成树C. 动态规划D. 活动选择问题#### 二、简答题(每题10分,共30分)1. 解释什么是二叉搜索树,并简述其基本操作。

2. 描述快速排序算法的工作原理,并讨论其最坏情况和平均情况的时间复杂度。

3. 什么是Kruskal算法?它在最小生成树问题中是如何工作的?#### 三、计算题(每题15分,共30分)1. 给定一个数组A = [3, 7, 1, 5, 2, 8, 4],请使用归并排序算法对其进行排序,并展示排序过程中的每一步。

2. 假设有一个图G,包含顶点集合V = {A, B, C, D, E}和边集合E = {(A, B), (A, C), (B, C), (C, D), (D, E), (E, B)},使用Kruskal 算法找出该图的最小生成树,并计算其总权重。

#### 四、编程题(每题20分,共20分)编写一个Python函数,实现Dijkstra算法,用于在带权图中找到从源点到所有其他顶点的最短路径。

函数应该接受图的邻接矩阵作为输入,并返回源点到每个顶点的最短路径长度。

```pythondef dijkstra(graph, source):# 你的代码pass```请注意,本试题仅供学习和练习使用,实际考试内容和形式可能有所不同。

算法基础期末考试题及答案

算法基础期末考试题及答案

算法基础期末考试题及答案一、选择题(每题2分,共20分)1. 算法的时间复杂度是指:A. 算法执行时间B. 算法执行的指令条数C. 算法执行所需的内存大小D. 算法执行时所需的数据量答案:B2. 在排序算法中,冒泡排序的平均时间复杂度是:A. O(n)B. O(n log n)C. O(n^2)D. O(1)答案:C3. 递归算法的基本原理是:A. 循环B. 迭代C. 分治D. 重复答案:C4. 哈希表的冲突解决方法不包括:A. 链地址法B. 开放寻址法C. 再散列法D. 排序答案:D5. 动态规划与分治算法的区别在于:A. 递归B. 贪心选择C. 重叠子问题D. 优化子结构答案:C6. 二叉树的深度优先搜索遍历方法包括:A. 前序遍历B. 中序遍历C. 后序遍历D. 所有选项答案:D7. 快速排序算法的最好时间复杂度是:A. O(n)B. O(n log n)C. O(n^2)D. O(log n)答案:B8. 图的广度优先搜索(BFS)使用的是:A. 栈B. 队列C. 链表D. 堆答案:B9. Dijkstra算法是用于解决:A. 最小生成树问题B. 最短路径问题C. 图的连通性问题D. 图的遍历问题答案:B10. 拓扑排序是针对哪种类型的图:A. 有向无环图B. 无向图C. 有向图D. 完全图答案:A二、简答题(每题5分,共30分)1. 请简述什么是贪心算法,并给出一个应用实例。

答案:贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。

例如,在硬币找零问题中,总是优先使用最大面额的硬币进行找零。

2. 解释什么是二分查找算法,并说明其时间复杂度。

答案:二分查找算法是一种在有序数组中查找特定元素的搜索算法。

其基本思想是将数组分成两半,比较中间元素与目标值,如果目标值等于中间元素,则查找成功;如果目标值小于中间元素,则在左侧子数组中继续查找;如果目标值大于中间元素,则在右侧子数组中继续查找。

算法期末复习题final

算法期末复习题final

算法期末复习题final算法分析与设计期末复习题⽬⼀、选择题1.下列算法中通常以⾃底向上的⽅式求解最优解的是( B )。

A、备忘录法B、动态规划法C、贪⼼法D、回溯法2、衡量⼀个算法好坏的标准是(C)。

A运⾏速度快B占⽤空间少C时间复杂度低D代码短3、以下不可以使⽤分治法求解的是(D)。

A棋盘覆盖问题B选择问题C归并排序4.下列是动态规划算法基本要素的是(A、定义最优解B、构造最优解D0/1 背包问题D )。

C、算出最优解D、⼦问题重叠性质5.采⽤⼴度优先策略搜索的算法是( A )。

A、分⽀界限法B、动态规划法C、贪⼼法D、回溯法6、合并排序算法是利⽤( A )实现的算法。

A、分治策略B、动态规划法C、贪⼼法D、回溯法7、下列不属于影响程序执⾏时间的因素有哪些?( C )A.算法设计的策略 B .问题的规模C.编译程序产⽣的机器代码质量 D .计算机执⾏指令的速度8、使⽤分治法求解不需要满⾜的条件是(A)。

A⼦问题必须是⼀样的B⼦问题不能够重复9、下⾯问题(B)不能使⽤贪⼼法解决。

A 单源最短路径问题BN皇后问题C最⼩花费⽣成树问题D背包问题10.⼀个问题可⽤动态规划算法或贪⼼算法求解的关键特征是问题的(B)。

A、重叠⼦问题B、最优⼦结构性质C、贪⼼选择性质D、定义最优解11.以深度优先⽅式系统搜索问题解的算法称为A、分⽀界限算法B、概率算法( D )C、贪⼼算法。

D、回溯算法12. 实现最长公共⼦序列利⽤的算法是( B )。

A、分治策略B、动态规划法C、贪⼼法D、回溯法13.下列算法具有最优⼦结构的算法是(D)A.概率算法 B .回溯法 C .分⽀限界法D.动态规划法14.算法分析是(C)A.将算法⽤某种程序设计语⾔恰当地表⽰出来B.在抽象数据集合上执⾏程序,以确定是否会产⽣错误的结果C.对算法需要多少计算时间和存储空间作定量分析D.证明算法对所有可能的合法输⼊都能算出正确的答案15衡量⼀个算法好坏的标准是(C)A.运⾏速度快B. 占⽤空间少C.时间复杂度低D. 代码短16.⼆分搜索算法是利⽤(A)实现的算法。

算法期末考试题及答案

算法期末考试题及答案

算法期末考试题及答案一、选择题(每题2分,共20分)1. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序答案:C2. 在二叉树的遍历算法中,中序遍历的顺序是:A. 先序B. 后序C. 中序D. 层序答案:C3. 动态规划与分治法算法的主要区别在于:A. 问题分解的方式B. 问题解决的顺序C. 存储中间结果的方式D. 问题规模的大小答案:C4. 哈希表的冲突解决方法不包括:A. 开放寻址法B. 链地址法C. 线性探测法D. 排序答案:D5. 以下哪个是图的遍历算法?A. 归并排序B. 深度优先搜索C. 快速排序D. 堆排序答案:B6. 贪心算法的特点是:A. 每一步都选择最优解B. 每一步都选择局部最优解C. 每一步都选择最差解D. 每一步都随机选择解答案:B7. 在算法分析中,时间复杂度O(1)表示:A. 常数时间B. 线性时间C. 对数时间D. 多项式时间答案:A8. 以下哪个是排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 冒泡排序D. 堆排序答案:C9. 递归算法的基本原理是:A. 重复执行B. 分而治之C. 循环调用D. 迭代求解答案:B10. 以下哪个是算法的时间复杂度为O(log n)的典型例子?A. 二分查找B. 线性查找C. 冒泡排序D. 快速排序答案:A二、简答题(每题10分,共20分)1. 简述快速排序算法的基本思想及其时间复杂度。

答案:快速排序是一种分治法的排序算法。

其基本思想是选择一个元素作为“基准”(pivot),然后将数组分为两部分,一部分包含所有小于基准的元素,另一部分包含所有大于基准的元素。

这个过程称为分区(partitioning)。

之后,递归地对这两部分进行快速排序。

快速排序的平均时间复杂度为O(n log n),但在最坏情况下(例如数组已经排序或所有元素相等)时间复杂度为O(n^2)。

2. 解释什么是动态规划,并给出一个动态规划问题的例子。

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末复习题一、选择题1.算法必须具备输入、输出和( D )等4个特性。

A.可行性和安全性 B.确定性和易读性C.有穷性和安全性 D.有穷性和确定性2.算法分析中,记号O表示( B ),记号Ω表示( A )A.渐进下界B.渐进上界C.非紧上界D.紧渐进界3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

在某台计算机上实现并完成概算法的时间为t秒。

现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?( B )解题方法:3*2^n*64=3*2^xA.n+8 B.n+6C.n+7 D.n+54.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。

A.O(logN) B.O(N)C.O(NlogN) D.O(N²logN)5.直接或间接调用自身的算法称为( B )。

A.贪心算法 B.递归算法C.迭代算法 D.回溯法6.Fibonacci数列中,第4个和第11个数分别是( D )。

A.5,89 B.3,89C.5,144 D.3,1447.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B.5条弦和6个三角形C.6条弦和6个三角形 D.5条弦和5个三角形8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。

A.重叠子问题 B.最优子结构性质C.贪心选择性质 D.定义最优解9.下列哪个问题不用贪心法求解( C )。

A.哈夫曼编码问题 B.单源最短路径问题C.最大团问题 D.最小生成树问题10.下列算法中通常以自底向上的方式求解最优解的是( B )。

A.备忘录法 B.动态规划法C.贪心法 D.回溯法11.下列算法中不能解决0/1背包问题的是( A )。

A.贪心法 B.动态规划C.回溯法 D.分支限界法12.下列哪个问题可以用贪心算法求解( D )。

算法期末复习题2

算法期末复习题2

填空题:1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:确定性有穷性可行性 0个或多个输入一个或多个输出2.算法的复杂性有时间复杂性和空间复杂性之分,衡量一个算法好坏的标准是时间复杂度高低。

3.某一问题可用动态规划算法求解的显著特征是该问题具有最优子结构性质。

5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解6.动态规划算法的基本思想是将待求解问题分解成若干子问题_,先求解子问题,然后从这些子问题的解得到原问题的解。

7.以深度优先方式系统搜索问题解的算法称为回溯法。

8.0-1背包问题的回溯算法所需的计算时间为o(n*2n),用动态规划算法所需的计算时间为o(min{nc,2n})。

9.动态规划算法的两个基本要素是最优子结构和重叠子问题。

10.二分搜索算法是利用动态规划法实现的算法。

11.一个算法复杂性的高低体现在计算机运行该算法所需的时间和存储器资源上,因此算法的复杂性有时间复杂性和空间复杂性之分。

12.出自于“平衡子问题”的思想,通常分治法在分割原问题,形成若干子问题时,这些子问题的规模都大致相同。

13.动态规划算法有一个变形方法备忘录方法。

这种方法不同于动态规划算法“自底向上”的填充方向,而是“自顶向下”的递归方向,为每个解过的子问题建立了备忘录以备需要时查看,同样也可避免相同子问题的重复求解。

14、这种不断回头寻找目标的方法称为回溯法。

15、直接或间接地调用自身的算法称为递归算法。

16、 记号在算法复杂性的表示法中表示渐进确界或紧致界。

17、由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。

18、建立计算模型的目的是为了使问题的计算复杂性分析有一个共同的客观尺度。

19、下列各步骤的先后顺序是②③④①。

①调试程序②分析问题③设计算法④编写程序。

20、最优子结构性质的含义是问题的最优解包含其子问题的最优解。

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

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

算法设计与分析期末考试复习题1.算法有哪些特点?为什么说一个具备了所有特征的算法,不一定就是使用的算法?2.证明下面的关系成立:(参考例题1.5--1.6)(1)logn!=Θ(nlogn) (2)2n=Θ(2n+1)(3)n!=Θ(n n) (4)5n2-6n=Θ(n2)3.考虑下面的算法:输入:n个元素的数组A输出:按递增顺序排序的数组A1. void sort(int A[],int n)2. {3. int i,j,temp;4. for(i=0;i<n-1;i++)5. for(j=i+1;j<n;j++)6. if(A[j]<A[i]) {7. temp=A[i];8. A[i]=A[j];9. A[j]=temp;10. }11. }(1)什么时候算法所执行的元素赋值的次数最少?最少多少次?(2)什么时候算法所执行的元素赋值的次数最多?最多多少次?4.考虑下面的算法:输入:n个元素的数组A输出:按递增顺序排序的数组A1. void bubblesort(int A[],int n)2. {3. int j,i,sorted;4. i=sorted=0;5. while(i<n-1 && !sorted) {6. sorted=1;7. for(j=n-1;j>i;j--) {8. if(A[j]<A[j-1]) {9. temp=A[j];10. A[j]=A[j-1];11. A[j-1]=temp;12. sorted=0;13. }14. }15. i=i+1;16. }17. }(1)算法所执行的元素比较次数最少是多少次?什么时候达到最少?(2)算法所执行的元素比较次数最多是多少次?什么时候达到最多?(3)算法所执行的元素赋值次数最少是多少次?什么时候达到最少?(4)算法所执行的元素赋值次数最多是多少次?什么时候达到最多?(5)用О、和Ω记号表示算法的运行时间。

算法期末复习-仅供参考

算法期末复习-仅供参考

1.算法基础算法复杂度的度量1)改进算法和提高计算机处理能力对算法速度的影响(课堂上讲过相关提高算法效率的实例)2)渐进意义下,算法的复杂度的同阶度量:()()()NgONf=的定义,以及O的运算性质证明。

3)给出一个表达式,证明2n是622++nn的上界下面的讨论中,对所有n,f(n) ≥ 0,g(n) ≥ 0。

渐近上界记号OO(g(n))={ f(n) | 存在正常数c和n0使得对所有n≥ n0有:0 ≤ f(n) ≤ cg(n) }渐近下界记号ΩΩ (g(n))={ f(n) | 存在正常数c和n0使得对所有n≥ n0有:0≤ cg(n) ≤ f(n) }非紧上界记号oo(g(n))={ f(n) | 对于任何正常数c>0,存在正数n0 >0使得对所有n≥n0有:0 ≤f(n)<cg(n) }等价于f(n) / g(n) →0 ,as n→∞。

非紧下界记号ωω (g(n)) = { f(n) | 对于任何正常数c>0,存在正数n0 >0使得对所有n≥n0有:0 ≤cg(n) < f(n) }等价于f(n) / g(n) →∞,as n→∞。

f(n) ∈ω (g(n)) ⇔g(n) ∈o (f(n))紧渐近界记号ΘΘ (g(n)) = { f(n) | 存在正常数c1, c2和n0使得对所有n≥n0有:c1g(n) ≤f(n) ≤c2g(n) }2.递归与分治策略分治法的设计思想、递归的实质、排列问题、整数划分问题、二分搜索、大数乘法、strassen矩阵乘、棋盘覆盖、合并排序、快速排序、线性时间选择(寻找中位数)、最近点对问题、循环赛日程安排问题。

例:分析二分搜索的时间复杂性,改写二分搜索算法使得搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。

如搜索元素在数组中,i和j相同,均为x在数组中的位置。

分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

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

算法分析与设计期末复习题目一、选择题1.下列算法中通常以自底向上的方式求解最优解的是( B )。

A、备忘录法B、动态规划法C、贪心法D、回溯法2、衡量一个算法好坏的标准是(C )。

A 运行速度快B 占用空间少C 时间复杂度低D 代码短3、以下不可以使用分治法求解的是(D )。

A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题4.下列是动态规划算法基本要素的是( D )。

A、定义最优解B、构造最优解C、算出最优解D、子问题重叠性质5.采用广度优先策略搜索的算法是( A )。

A、分支界限法B、动态规划法C、贪心法D、回溯法6、合并排序算法是利用( A )实现的算法。

A、分治策略B、动态规划法C、贪心法D、回溯法7、下列不属于影响程序执行时间的因素有哪些?( C )A.算法设计的策略 B.问题的规模C.编译程序产生的机器代码质量 D.计算机执行指令的速度8、使用分治法求解不需要满足的条件是(A )。

A 子问题必须是一样的B 子问题不能够重复C 子问题的解可以合并D 原问题和子问题使用相同的方法解9、下面问题(B )不能使用贪心法解决。

A 单源最短路径问题B N皇后问题C 最小花费生成树问题D 背包问题10. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。

A 、重叠子问题B 、最优子结构性质C 、贪心选择性质D 、定义最优解11. 以深度优先方式系统搜索问题解的算法称为 ( D ) 。

A 、分支界限算法 B 、概率算法 C 、贪心算法 D 、回溯算法12. 实现最长公共子序列利用的算法是( B )。

A 、分治策略B 、动态规划法C 、贪心法D 、回溯法13.下列算法具有最优子结构的算法是 (D )A .概率算法B .回溯法C .分支限界法D .动态规划法 14.算法分析是( C )A.将算法用某种程序设计语言恰当地表示出来B.在抽象数据集合上执行程序,以确定是否会产生错误的结果C.对算法需要多少计算时间和存储空间作定量分析D.证明算法对所有可能的合法输入都能算出正确的答案 15 衡量一个算法好坏的标准是(C )A.运行速度快B. 占用空间少C.时间复杂度低D. 代码短 16.二分搜索算法是利用(A )实现的算法。

A.分治法 B.动态规划法 C.贪心法 D.回溯法 17.用贪心法设计算法的关键是( B )。

A.将问题分解为多个子问题来分别处理 B.选好最优量度标准C.获取各阶段间的递推关系式D.满足最优性原理18.找最小生成树的算法Kruskal 的时间复杂度为( D )(其中n 为无向图的结点数,m 为边数)A .O(n 2)B .O(mlogn)C .O(nlogm)D .O(mlogm) 19.回溯法搜索状态空间树是按照(C )的顺序。

A.中序遍历 B.广度优先遍历 C.深度优先遍历 D.层次优先遍历20.采用广度优先策略搜索的算法是( A )。

A.分支界限法 B.动态规划法 C.贪心法 D.回溯法21.函数32n +10nlogn 的渐进表达式是( B ).A.O( 2n )B. O( 32n )C. O( nlog n )D. O( 10nlog n ) 22.二分搜索算法的时间复杂性为( C )。

A.O(2n )B.O(n )C.O(n log )D. O(n n log ) 23、快速排序算法的时间复杂性为( D )。

A.O(2n ) B.O(n ) C.O(n log ) D. O(n n log )24、算法是由若干条指令组成的有穷序列,而且满足以下性质( D ) A.输入:有0个或多个输入 B.输出:至少有一个输出C. 确定性:指令清晰,无歧义D.有限性:指令执行次数有限,而且执行时间有限A. (1)(2)(3)B. (1)(2)(4)C. (1)(3)(4)D.(1) (2)(3)(4) 25、背包问题的贪心算法所需的计算时间为( B )A. O (n2n )B. O (nlogn )C.O (2n )D.O (n ) 26.下列算法中不能解决0/1背包问题的是( A ) A 贪心法 B 动态规划 C 回溯法 D 分支限界法27. 在寻找n 个元素中第k 小元素问题中,若使用快速排序算法思想,运用分治算法对n 个元素进行划分,应如何选择划分基准?下面 (D) 答案解释最合理。

A .随机选择一个元素作为划分基准 B .取子序列的第一个元素作为划分基准 C .用中位数的中位数方法寻找划分基准D .以上皆可行。

但不同方法,算法复杂度上界可能不同28. 分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。

这要求原问题和子问题 ( C ) 。

A .问题规模相同,问题性质相同B .问题规模相同,问题性质不同C .问题规模不同,问题性质相同D .问题规模不同,问题性质不同 29、下面是贪心算法的基本要素的是( C )。

A 、重叠子问题B 、构造最优解C 、贪心选择性质D 、定义最优解30. 函数n n 1032的渐进表达式是( D )。

A. O(23n ) B. O(3) C. O(n 10) D.O(2n ) 二、填空题1、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是 动态规划 ,需要排序的是 回溯法 ,分支限界法 。

2、使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N 皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是 0/1背包问题 ,只使用约束条件进行裁剪的是 N 皇后问题 。

3.贪心算法基本要素有 最优度量标准 和 最优子结构 。

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

5.二分搜索算法是利用 分治策略 实现的算法。

6.算法的复杂性有时间复杂性和空间复杂性之分。

7、程序是算法用某种程序设计语言的具体实现。

8、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。

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

10.回溯法搜索解空间树时,常用的两种剪枝函数为约束函数和限界函数。

11.任何可用计算机求解的问题所需的时间都与其规模有关。

12.快速排序算法的性能取决于划分的对称性。

13.背包问题的贪心算法void Knapsack(int n,float M,float v[],float w[],float x[]){Sort(n,v,w);int i;for (i=1;i<=n;i++) x[i]=0;float c=M;for (i=1;i<=n;i++) {if (w[i]>c) break;x[i]=1;c - =w[i];}if (i<=n) x[i]=c/w[i];}14.下面算法的基本运算是加法(或:赋值)运算,该算法中第4步执行了2n-1 次。

算法COUNT输入:正整数n(n=k2)。

输出:count的值。

1. count=02. while n>=13. for j=1 to n4. count =count+15. end for6. n=n/27. end whileend COUNT15.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有限性四条性质。

16.快速排序、插入排序和选择排序算法中,快速排序算法是分治算法。

17. 下面算法的基本语句是__ S = S + i*j;____, 算法的时间复杂度是___O(2n)_____int fun(int n){int S = 0;for (int i=1; i <=n; i++ )for(int j=1; j<n – i ; j++)S = S + i*j;return S;}18. 最小生成树的prim算法应用的是贪心算法思想。

19. 分治算法的基本步骤包括分解子问题,递归求解子问题,合并解20. 归并排序和快速排序在平均情况下的时间复杂度都是O(nlogn),但是最坏情况下两种算法有区别,其中归并排序为 O(nlogn),快速排序为 _O(2n) 二、算法设计1.下面是用回溯法求解图的m着色问题的算法(求出所有解)。

图的m着色问题:给定一个无向连通图G和m种颜色,给图G的所有顶点着色,使得任何两相邻顶点的颜色不同。

已有函数color(k)用于在前k-1个顶点已着色的情况下,判断第k个顶点是否可着颜色x[k];是则返回true, 否则返回false。

输入:正整数m, n和含n个顶点的无向连通图G的邻接矩阵graph。

输出:图G 的m 着色问题的所有解, 若无解,则输出no solution 。

flag=falsek=1; x[1]=0while k>=1while (1)x[k]=x[k]+1 if color(k) then if (2) thenflag=true; output x[1..n]elsek= (3) (4) end if end if end while(5) end whileif not flag then output “no solution ”end m-COLORING(1) x[k]<m (2) k=n (3) k+1 (4) x[k]=0 (5) k=k-12.下面是求解矩阵链乘问题的动态规划算法。

矩阵链乘问题:给出n 个矩阵M 1, M 2, …, M n , M i 为r i ⨯r i+1阶矩阵,i=1, 2, …, n ,求计算M 1M 2…M n 所需的最少数量乘法次数。

记 M i, j =M i M i+1…M j , i<=j 。

设C[i, j], 1<=i<=j<=n, 表示计算M i, j 的所需的最少数量乘法次数,则⎪⎩⎪⎨⎧<++==+≤<j i , }r r r j] C[k,1]-k ,i [C {min ji , 0j] ,i [C 1j k i jk i算法 MATCHAIN输入:矩阵链长度n, n 个矩阵的阶r[1..n+1], 其中r[1..n]为n 个矩阵的行数,r[n+1]为第n个矩阵的列数。

输出:n个矩阵链乘所需的数量乘法的最少次数。

for i=1 to n C[i, i]= (1)for d=1 to n-1for i=1 to n-dj= (2)C[i, j]= ∞for k=i+1 to jx= (3)if x<C[i, j] then(4) =xend ifend forend forend forreturn (5)end MATCHAIN(1) 0 (2) i+d (3) C[i, k-1]+C[k, j]+r[i]*r[k]*r[j+1](4) C[i, j] (5) C[1, n]3.下面是用回溯法解n皇后问题的算法(求出所有解)。

相关文档
最新文档