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

以下是我的部分算法笔记,希望可以给复习的小伙伴们参考一下:

题目:

  1. 一切合法的输入数据都能得出满足要求的结果,包括典型的、苛刻的输入数据也能够得出满足要求的结果。这个含义对应算法的(正确性)

  2. 算法要对异常情况进行适当的处理,就是算法的(健壮性)

  3. 算法操作的对象是数据,数据间的()就是数据的数据结构

         逻辑关系,存储关系,处理关系

     4.算法设计应满足以的目标包括()

正确性,可使用性,健壮性

正确性:算法能够按照规定的功能和性能正确地执行,这是最基本并且最重要的标准!

可使用性:也叫用户友好性,算法能够方便地使用

可读性:算法是易于理解的,这要求算法在逻辑上是清晰的、结构化的

健壮性:算法具有容错性,即异常处理,能够检测不合理的数据,保证程序不发生异常中断等

高效率低存储:效率是指算法的执行时间;存储是指算法执行所用的最大存储空间。算法应该在保证前面的条件下,执行时间尽可能低存储空间尽可能小

递归的概念

执行过程分为递推和回归两个阶段

直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。

边界条件与递归方程是递归函数的两个要素

全排列问题:n!

分治法的基本思想

分而治之

分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解,自底向上。

  • 所能解决的问题一般具有以下几个特征:

1.该问题的规模缩小到一定程度就可以容易地解决。

2.具有最优子结构性质

3.利用问题分解出的子问题的解可以合并为原问题的解

4.分解出的各个子问题是相互独立的

若只有前两条,则可以考虑贪心算法或动态规划

  • 主定理:

 

  • 排序方法:   平均时间    最坏情况

       简单排序       O(n^2)         O(n^2)

       快速排序       O(nlogn)      O(n^2)

       堆排序           O(nlogn)      O(nlogn)

       合并排序       O(nlogn)      O(nlogn)

  • 二分查找:最坏情况O(logn)

  • 最大整数的乘法:传统:O(n^2)

动态规划算法

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

问题的最优解包含着其子问题的最优解, 称为最优子结构性质。

递归算法求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。这种性质称为子问题的重叠性质。

动态规划算法适用于解最优化问题,通常可按以下 4 个步骤设计: ① 找出最优解的性质,并刻画其结构特征; ② 递归地定义最优值; ③ 以自底向上的方式计算最优值; ④根据计算最优值时得到的信息,构造最优解。

  • 动态规划算法与分治法的区别:

动态规划算法与分治法类似,其基本思想是将待求解问题分解成若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解。与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,以致最后解决原问题需要耗费指数级时间。

1)问题的规模缩小到一定的程度就可以容易地解决。

2)问题可以分解为若干个规模较小的相似问题,即该问题具有最优子结构性质。

3)利用该问题分解出的子问题的解可以合并为该问题的解。

4)该问题所分解出的各个子问题是相互独立的且子问题之间不包含公共的子问题。

当问题满足1,2,3,4条时采用分治法,当满足1、2、3条时采用动态规划方法

  • 矩阵连乘:最优子结构,在计算过程中,保存已解决的子问题答案。每个子问题只计算一次(时间O(n ^3),空间O(n ^2))

  • 最长公共子序列:最优子结构性质,重叠子问题(时间O(mn))

  • 0-1背包:最优子结构

贪心算法

贪心算法总是做出在当前看来是最好的选择。也就是说,贪心算法并不从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优选择。当然,我们希望贪心算法得到的最终结果也是整体最优的。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似解。

许多可以用贪心算法求解的问题一般具有2个重要的性质 贪心选择性质最优子结构性质

a) 所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到)。

b) 所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。

动态规划和贪心算法的区别 动态规划和贪心算法都是一种递推算法 ,均有局部最优解来推导全局最优解 。

不同点: 贪心算法: 1.贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一部之前的最优解则不作保留。 2.由(1)中的介绍,可以知道贪心法正确的条件是:每一步的最优解一定包含上一步的最优解。

动态规划算法: 1.全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解 2.动态规划的关键是状态转移方程,即如何由以求出的局部最优解来推导全局最优解 3.边界条件:即最简单的,可以直接得出的局部最优解

回溯法(深度优先搜索DFS)

回溯法是在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树,当算法搜索至解空间树的任一结点时,总是先判断该结点是否满足问题的约束条件。如果满足进入该子树,继续按深度优先的策略进行搜索。否则,不去搜索以该结点为根的子树,而是逐层向其祖先结点回溯。

用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解

基本步骤

① 针对拨给问题,定义问题的解空间;

② 确定易于搜索的解空间结构;

② 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

③ 回溯法是回溯法是指(具有限界函数的深度优先生成法)。

  • 用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径,由x[1:t]保存该路径上边的取值 。

    0-1背包 :子集树 时间o(2^n) 空间o(n)

    旅行售货员 :排列树 时间o(n!) 空间o(n)

    批处理作业调度:排列数

  • 回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排列树)算法框架。

用回溯法解0/1背包问题时,该问题的解空间结构为(子集树)结构。

用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结构。

分支限界法(广度优先搜索BFS)

分支限界法类似回溯法,也是在问题的解空问上搜索问题解的算法。一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出解空间中满足约束条件的所有解,而分支限界法的求解目标是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。

回溯法与分支限界法的区别

两者都是问题的解空间树上搜索问题解的算法。回溯法与分支限界法的的求解目标不同,回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标是找出解空间树中满足约束条件的一个解,或是在满足约束条件的

解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。

[ 二分搜索 ]

排好序数组,x跟中间的对比,再依次重复以上步骤

[ 合并排序 ]

思想:将两个有序的数组合成一个有序的数组解决问题。逐个比较a1和a2中元素大小,依次取小的存入a3

[ 快速排序 ]

将数组第一个设为基准值,i在最左边,j在最右边,两个都往中间靠。当i碰到比基准数大的数和j碰到比基准数小的数时,就将两个数交换;当i,j汇合时,此时的数和基准值交换。此时,将左边和右边分别拉出来再次快排。每次都需要j先移动,因为当最后i和j相碰时,此时所指向的是j寻找到比基准值小的数字,然后和基准值交换能确保基准值左边的都是小于基准值的数字,但是如果i先右边移动的话,最后i和j相碰时,i和j所指向的是i寻找得比基准值大的数,此时和基准值相交换,基准值左边是有一个比基准值大的数,没有达到我们需要的排序效果。

  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 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.下列算法中通常以自底向上的方式求解最优解的是( 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类问题中 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、数组 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 层次优先遍历 33、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法 34.实现合并排序利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 35.下列是动态规划算法基本要素的是( D )。 A、定义最优解 B、构造最优解 C
### 回答1: 计算机算法设计与分析计算机科学与技术专业的一门重要课程,该课程旨在培养学生解决复杂问题的能力,提高算法设计与分析的能力。复习该课程的期末考试,我建议可以从以下几个方面进行复习: 首先,复习算法的基本知识。包括递归与分治策略、动态规划贪心算法、回溯算法等常见算法的基本原理和代码实现方法。 其次,深入理解常见的时间复杂度和空间复杂度分析方法,熟悉不同算法的优缺点,并能在不同问题场景下选择合适的算法。 然后,重点复习常见的排序算法和查找算法,如冒泡排序、插入排序、选择排序、快速排序、堆排序等,以及线性查找、二分查找等。 另外,复习算法,包括图的表示方法、图的遍历算法、最短路径算法(Dijkstra算法、Floyd-Warshall算法)和最小生成树算法(Prim算法、Kruskal算法)等。 最后,通过做一些实例题和习题,加深对算法的理解和应用能力,提高解题的效率。 在复习过程中,可以参考csdn等一些相关的学习资源,查找更多的学习资料和参考题目,加深对算法的认识。同时也可以结合自己的课堂笔记、教材和讲义,全面复习和总结。 总之,计算机算法设计与分析期末考试的复习需要全面、系统地复习相关算法和数据结构的知识,并能够熟练应用到实际问题中。通过不断的实践和练习,提高解题的能力和效率。 ### 回答2: 计算机算法设计与分析期末考试复习题介绍了一些重要的算法和数据结构,学生们可以通过复习这些题目来准备考试。以下是一些常见的题型和解答思路: 1. 排序算法:考察对常见排序算法的理解和分析。如快速排序、归并排序、堆排序等。需要掌握它们的时间复杂度、原理和实现方式,以及它们在不同场景下的优劣势。 2. 搜索算法:考察对常见搜索算法的掌握程度。如深度优先搜索(DFS)、广度优先搜索(BFS)、二分查找等。需要了解它们的原理、如何实现以及最优应用场景。 3. 图算法:考察对图算法的熟悉程度。如最短路径算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成树算法(如Prim算法、Kruskal算法)等。需要了解它们的原理、时间复杂度和应用场景。 4. 动态规划:考察对动态规划算法的理解和应用。需要掌握动态规划的基本概念、状态转移方程的建立和求解。重点理解背包问题、最长公共子序列等常见问题的动态规划解法。 5. 数据结构:考察对常见数据结构的掌握程度。如数组、链表、栈、队列、二叉树、图等。需要了解它们的基本操作、特性、应用场景以及在算法中的使用方法。 在复习期间,建议学生们重点关注基础概念的理解、算法原理的掌握以及常见题目的解题技巧。同时,通过做大量的练习题来提升自己的算法设计分析能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值