书签 分享 收藏 举报 版权申诉 / 10
上传文档赚钱

类型算法与分析设计期末复习重点(DOC 9页).doc

  • 上传人(卖家):2023DOC
  • 文档编号:5643941
  • 上传时间:2023-04-28
  • 格式:DOC
  • 页数:10
  • 大小:37.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《算法与分析设计期末复习重点(DOC 9页).doc》由用户(2023DOC)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    算法与分析设计期末复习重点DOC 9页 算法 分析 设计 期末 复习 重点 DOC
    资源描述:

    1、1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4、在下列算法中有时找不到问题解的是( B )。 A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法 5. 回溯法解旅行售货员问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树 6下列算法中通常以自底向上的方式求解最

    2、优解的是( 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、最小耗费优先

    3、 C、最大效益优先 D、深度优先 12下列算法中通常以深度优先方式系统搜索问题解的是( D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 13.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 14哈弗曼编码的贪心算法所需的计算时间为( B )。 nnA、O(n2) B、O(nlogn) C、O(2) D、O(n) 15分支限界法解最大团问题时,活结点表的组织形式是( B )。 A、最小堆 B、最大堆 C、栈 D、数组 16最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 17实现棋盘覆盖

    4、算法利用的算法是( 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类问

    5、题的子集D NP类问题包含在P类问题中 22、蒙特卡罗算法是( B )的一种。 A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法 23.下列哪一种算法不是随机化算法( C ) A. 蒙特卡罗算法B. 拉斯维加斯算法C.动态规划算法D.舍伍德算法 24. ( D )是贪心算法与动态规划算法的共同点。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、最优子结构性质 25. 矩阵连乘问题的算法可由( B)设计实现。 A、分支界限算法 B、动态规划算法 C、贪心算法 D、回溯算法 26. 分支限界法解旅行售货员问题时,活结点表的组织形式是( A )。 A、最小堆 B、最大堆 C、栈 D

    6、、数组 27、Strassen矩阵乘法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 29、使用分治法求解不需要满足的条件是(A )。 A 子问题必须是一样的B 子问题不能够重复C 子问题的解可以合并D 原问题和子问题使用相同的方法解 30、下面问题(B )不能使用贪心法解决。 A 单源最短路径问题 B N皇后问题 C 最小花费生成树问题 D 背包问题 31、下列算法中不能解决0/1背包问题的是(A ) A 贪心法 B 动态规划 C 回溯法 D 分支限界法 32、回溯法搜索状态空间树是按照(C )的顺序。 A 中序遍历 B 广度优先遍历 C 深度优先遍历 D

    7、 层次优先遍历 33、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法 34实现合并排序利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 35下列是动态规划算法基本要素的是( D )。 A、定义最优解 B、构造最优解 C、算出最优解 D、子问题重叠性质 36下列算法中通常以自底向下的方式求解最优解的是( B )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 37采用广度优先策略搜索的算法是( A )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 38、合并排序算法是利用

    8、( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 39、在下列算法中得到的解未必正确的是( B )。 A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法 40、背包问题的贪心算法所需的计算时间为( B ) nnA、O(n2) B、O(nlogn) C、O(2) D、O(n) 41实现大整数的乘法是利用的算法( C )。 A、贪心法 B、动态规划法 C、分治策略 D、回溯法 420-1背包问题的回溯算法所需的计算时间为( A ) A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 43采用最大效益优先搜索方式的算法是( A )。

    9、A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 44贪心算法与动态规划算法的主要区别是( B )。 A、最优子结构 B、贪心选择性质 C、构造最优解 D、定义最优解 45. 实现最大子段和利用的算法是( B )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 46.优先队列式分支限界法选取扩展结点的原则是( C )。 A、先进先出 B、后进先出 C、结点的优先级 D、随机 47.背包问题的贪心算法所需的计算时间为( B )。 nnA、O(n2) B、O(nlogn) C、O(2) D、O(n) 48、广度优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法

    10、 D、回溯法 49、舍伍德算法是( B )的一种。 A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法 50、在下列算法中有时找不到问题解的是( B )。 A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法 51下列哪一种算法是随机化算法( D ) A. 贪心算法B. 回溯法C.动态规划算法D.舍伍德算法 52. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。 A、重叠子问题 B、最优子结构性质 C、贪心选择性质 D、定义最优解 53采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为 ( B ) 。 n

    11、nA、O(n2) B、O(nlogn) C、O(2) D、O(n) 54. 以深度优先方式系统搜索问题解的算法称为 ( D ) 。 A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法 55. 实现最长公共子序列利用的算法是( B )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 二、 填空题 1.算法的复杂性有 时间 复杂性和 空间 复杂性之分。 2、程序是 算法 用某种程序设计语言的具体实现。 3、算法的“确定性”指的是组成算法的每条 指令 是清晰的,无歧义的。 4.矩阵连乘问题的算法可由 动态规划 设计实现。 5、拉斯维加斯算法找到的解一定是 正确解。 6、算法是指解决问

    12、题的 一种方法 或 一个过程 。 7、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法 。 8、问题的 最优子结构性质 是该问题可用动态规划算法或贪心算法求解的关键特征。 9、以深度优先方式系统搜索问题解的算法称为 回溯法 。 10、数值概率算法常用于 数值问题 的求解。 11、计算一个算法时间复杂度通常可以计算循环次数 、基本操作的频率或计算步。 12、利用概率的性质计算近似值的随机算法是数值概率算法,运行时以一定的概率得到正确 解的随机算法是_蒙特卡罗算法_。 14、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态 规划,需要排序的是回溯法,分支

    13、限界法。 15、使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是0/1背包问题,只使用约束条件进行裁剪的是N皇后问题。 17、矩阵连乘问题的算法可由 动态规划 设计实现。 18、拉斯维加斯算法找到的解一定是 正确解。 19.贪心算法的基本要素是 贪心选择 质和 最优子结构 性质 。 21. 动态规划算法的基本思想是将待求解问题分解成若干 子问题 ,先求解 子 问题 ,然后从这些 子问题 的解得到原问题的解。 算法是由若干条指令组成的有穷序列,且要满足输入,输出 、确定性和 有

    14、限性 四条性质。 23、大整数乘积算法是用 分治法 来设计的。 24、以广度优先或以最小耗费方式搜索问题解的算法称为 分支限界法 。 25、舍伍德算法总能求得问题的 一个解 。 贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法主要区别。 27.快速排序算法是基于 分治策略 的一种排序算法。 28.动态规划算法的两个基本要素是. 最优子结构性质和 重叠子问题 性质 。 30.回溯法是一种既带有 系统性 又带有 跳跃性 的搜索算法。 31.分支限界法主要有 队列式(FIFO) 分支限界法和 优先队列式 分支限界法。 32分支限界法是一种既带有系统性 又带有 跳跃性 的搜索算法

    15、。 33回溯法搜索解空间树时,常用的两种剪枝函数为 约束函数 和 限界函数 。 34.任何可用计算机求解的问题所需的时间都与其 规模 有关。 35.快速排序算法的性能取决于 划分的对称性 。 1.背包问题的贪心算法 2.最大子段和: 动态规划算法 3.贪心算法求装载问题 4.贪心算法求活动安排问题 5.快速排序 6.排列问题 1分治法的基本思想时将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。 2设计动态规划算法的主要步骤为:(1)找出最优解的性质,并刻划其结构特征(2)递归地定义最优值(3)以自底向

    16、上的方式计算出最优值(4)根据计算最优值时得到的信息,构造最优解。其基本思想也是将待求解问题分成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 3分治法与动态规划法的相同点是:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 两者的不同点是:适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。而用分治法求解的问题,经分解得到的子问题往往是互相独立的。 4证明:贪心选择性质 对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作出的贪心选择最终导致问题的整体最优解。首先考查问题的一个整体最优解,并证明可修改这个最优

    17、解,使其以贪心选择开始。做出贪心选择后,原问题简化为规模更小的类似子问题。然后,用数学归纳法证明,通过每一步做贪心选择,最终可得到问题的整体最优解。 算法是指解决问题的方法或过程: 输入:有0个或多个外部量作为输入; 输出:至少产生一个量作为输出; 确定性:组成算法的每条指令是清晰的、无歧义的; 有限性:每条指令执行次数有限,执行每条指令的时间也有限 算法的复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂度,需要的空间资源的量称为空间复杂度。这个量依赖于*问题的规模、算法的输入、算法本身。 /哈夫曼编码 import java.util.Collections; impor

    18、t java.util.LinkedList; public class HuffmanTree /构造哈夫曼树 private static class Huffman implements Comparable Bintree tree; float wight; public Huffman(Bintree tree,float wight) this.tree = tree; this.wight = wight; Override public int compareTo(Object o) float ow = (Huffman)o).wight; if(this.wightow)

    19、 return -1; if(this.wight=ow) return 0; return 1; /构造二叉树 private static class Bintree private String value; /值 private Bintree left; /左节点 private Bintree right; /右节点 /把两个二叉树合并成一个 public void makeTree(String value,Bintree left,Bintree right) this.value = value; this.left = left; this.right = right; p

    20、ublic static void view(Bintree t) if(t.left!=null) view(t.left); if(t.right!=null) view(t.right); System.out.println(t.value); public Bintree huffmanTree(float f) int n = f.length; LinkedList w = new LinkedList(); Bintree zero = new Bintree(); for(int i=0;in;i+) Bintree x= new Bintree(); x.makeTree(

    21、t-+i, zero, zero); w.add(new Huffman(x,fi); Collections.sort(w); for(int i=1;in;i+) Huffman x = w.remove(); Huffman y = w.remove(); Bintree z = new Bintree(); z.makeTree(null, x.tree, y.tree); Huffman t = new Huffman(z, x.wight+y.wight); w.add(t); Collections.sort(w); /*for(Huffman h:w) System.out.p

    22、rint(t+h.wight); System.out.println();*/ return w.remove().tree; public static void main(String args) Bintree b = new HuffmanTree().huffmanTree(new float(float) 0.45,(float) 0.13,(float) 0.12,(float) 0.16,(float) 0.09,(float) 0.05); Bintree.view(b); / Prim 算法 public class Prim_ public static void pr

    23、im(int n,float c) float lowcost = new floatn+1;/当前树,与不在树中的其他节点的最小距离 int closest = new intn+1;/closesti=2;表示i节点的邻居节点是2 boolean s = new booleann+1;/si=true,表示i节点加入到树中了, /数据初始化,先选节点1,s1=true,closesti=1; s1=true; for(int i=2;i=n;i+) lowcosti=c1i; /找出节点1到其他各个节点(i)的权值,放入lowcosti中 closesti=1; si=false; for

    24、(int i=1;in;i+) float min = Float.MAX_VALUE;/min 表示当前树中 到 其他所有未加入中的节点的最小权值 int j=1; for(int k=2;k=n;k+) if(lowcostkmin)&(!sk) min=lowcostk; j=k; System.out.println(j+,+closestj); sj=true; /选节点j for(int k=2;k=n;k+) if(cjklowcostk)&(!sk) lowcostk=cjk; closestk=j; public static void main(String args) f

    25、loat max = Float.MAX_VALUE; int n =6; float c = new float77; c12=6; c13=1; c14=5; c15=max; c16=max; c21=6; c23=5; c25=3; c24=max; c26=max; c31=1; c32=5; c34=5; c35=6; c36=4; c41=5; c43=5; c46=2; c42=max; c45=max; c52=3; c53=6; c56=6; c51=max; c54=max; c63=4; c64=2; c65=6; c61=max; c62=max; prim(n,c)

    26、; Kruskal 算法 import java.util.Collections; import java.util.LinkedList; publicclass Kruskal_ /构造带权值边的数据结构 privatestaticclass EdgeNode implementsComparable floatweight;/权值 intu,v;/两端点 publicintcompareTo(Object o) floatow=(EdgeNode)o).weight; if(weightow)return-1; if(weight=ow)return 0; return 1; publ

    27、icEdgeNode(intu,intv,floatweight) this.weight=weight; this.u=u; this.v=v; /构造查并集 privatestaticclass UnionFind intpre; publicUnionFind(intn) pre=newintn; for(inti=0;in;i+) prei=i; publicintfind(intv) intr=v; while(prer!=r) r=prer; returnr; publicvoidunion(inta,intb) intfa=find(a); intfb=find(b); if(f

    28、a!=fb) prefa=fb; publicstaticbooleankruskal(intn,inte,EdgeNodeE,EdgeNodet) /* * n 节点个数 * e 无向连通带权图的边数 * E 带权值边数组 * t 加入最小生成树的带权值边 */ LinkedListh=newLinkedList(); addAll Collections.(h,E);/将数组转换成LinkedList sort Collections.(h);/对linkedlist排序,达到优先队列的效果 UnionFind u=newUnionFind(n+1); intk=0; while(e0&k

    29、0;Xi=Yj Maxcij-1,ci-1j i,j0;XiYj Package dongtaiguihua; Import java.util *; Punlic class Lcs Public static List resultList=new ArrayList(); /计算最优值 public static int lcsLength(char x,char y, int c ,int b) int m=x.length-1; int n=y.length-1; /int c=new int m+1n+1; for(int i=1;im;i+) ci0=0; for(int i=1

    30、;in;i+) c0i=0; for(int i=1;i=m;i+) for(int j=1;j=cij-1) cij=ci-1 j; bij=2; else cij=cij-1; bij=3; /耗时O(mn)。 /构造最长公共子序列 public static void lcs(int i, int j, char x, int b) if (i = 0 | j = 0) return; if (bij = 1) lcs(i - 1, j - 1, x, b); resultList.add(xi); else if (bij = 2) lcs(i - 1, j, x, b); /O(m+

    31、n) public static void main(String args) char x = def.toCharArray(); /abcdefghijklmn char y = efg.toCharArray(); int b = new intx.lengthy.length; int c = new intx.lengthy.length; lcsLength(x, y, c, b);/ 计算最优值 lcs(x.length - 1, y.length - 1, x, b);/ 构造最长公共子系列 System.out.println(序列1:+new String(x); System.out.println(序列2:+new String(y); System.out.print(最长公共子系列为:); for (char o:resultList) System.out.print(o); System.out.println();

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:算法与分析设计期末复习重点(DOC 9页).doc
    链接地址:https://www.163wenku.com/p-5643941.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库