![](https://img-blog.csdnimg.cn/20200527150818324.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法分析与设计
详细整理算法笔记与习题,供复习
Matts Tian
这个作者很懒,什么都没留下…
展开
-
问题的复杂性——NP完全问题
注意 NP 不是 not P!!!原创 2020-08-17 17:00:16 · 345 阅读 · 1 评论 -
基于递归的技术——归纳法
归纳法 选择排序 //SelectionSortRec // input : A[1...n] // output : 非降序 A[1...n] 1.sort(1) 过程 sort(i) if (i < n) then k = i; for(j = i+1; j < n; j++) if(A[j] < A[k]) then k = j; if(k != i) A[i] <-> A[k]; sort(i+1); end if 插入排序 /原创 2020-08-10 18:07:50 · 1898 阅读 · 17 评论 -
算法分析基本概念
算法分析基本概念 本章介绍一些简单的算法,特别是与搜索和排序相关的那一类;其次讲述用于算法设计和分析的基本概念。 顺序搜索原创 2020-06-01 10:39:59 · 2155 阅读 · 0 评论 -
算法设计例题
算法设计例题 【动态规划】 例 1 正解: (1)17条 (2)从A到B最短路径的长度是7,从A沿着右下方向取寻找路径,第一次找出距离A一步的点上的条数,第二次找出距离A两步的点上的条数,重复七次,假设 D[i][j] 是对应点上的条数,那么有 D[i][j] = D[i-1][j] + D[i][j-1] 。 (3) 例 2 正解: input: A[1...n] output: (p,q) The pseudocode is as follows operate() { mid =原创 2020-05-15 10:48:05 · 2849 阅读 · 2 评论 -
基于递归的技术——分治
分治 || minmax . . 在数组A[1…n]中同时寻找最大值和最小值 general method x = A[1] , y = A[1] for i=2 to n if A[i]<x then x=A[i] if A[i]>y then y=A[i] end for return (x,y) complexity: 2(n-1) divide and conquer??? call minmax(1...n) process minmax(lo原创 2020-05-17 20:48:39 · 385 阅读 · 2 评论 -
克服困难性——随机算法
随机算法 || 引言 分治、动态规划、贪心法、回溯和分支限界等算法的每一步计算都是确定的,但是在大多数情况下,当算法在执行过程中面临一个选择时,随机性选择常比最优选择省时,因此随机算法可以在很大程度上降低算法的复杂性。随机算法的基本特征是对所求解问题的同一实例用同一随机算法求解两次可能得到完全不同的效果(所需时间或者计算结果)。 举例说明 || 数值随机算法 用随机投点法计算π值 ...原创 2020-04-29 22:40:28 · 491 阅读 · 0 评论 -
克服困难性——回溯法
回溯法 背景: 寻找问题的解比较直观的方法是穷举法,但是有时候候选解的数量非常大,通常是指数级别,甚至是阶乘级别的,即使使用最快的计算机,也只能解决规模很小的问题。因此需要一种系统化检查候选解的方法,借助这种方法,将搜索空间减少到最低的程度。这种系统并有组织的搜索方法,称为回溯法。 基本思想: (1)针对所给问题,定义问题的解空间。 (2)确定易于搜索的解空间结构。 (3)以深度优先方式搜索解空间...原创 2020-04-20 21:01:47 · 550 阅读 · 1 评论 -
最先割技术——贪心算法
下面我们介绍例题 例1 现有一个数组,元素均为非负整数。假设现在你站在第一个元素上,脚下元素的数字代表当前所能前进的最大步数,请用贪心策略求解能不能走到最后一个元素上。 例如: A = [3,1,2,4,5] 可以到达最后的元素 B = [1,2,1,0,4] 不能到达最后的元素 试着给出伪代码和时间复杂度。 ※算法思想: 走一步看一步,接下来要走的步数maxstep一定是在当前选择最大的一步。...原创 2020-04-10 07:57:57 · 495 阅读 · 4 评论 -
基于递归的技术——动态规划
小田田的算法笔记 ---- 动态规划 7.1 背景 与分治算法情况不同,直接实现递推的结果,会导致不止一次递归调用,因此这种技术采取自底向上的方式求递推值,并把中间结果存储起来以便以后用来计算所需要的解。利用这种技术可以设计出特别有效的算法来解决许多组合最优化问题,亦可以改善蛮力搜索算法的时间复杂性。 比如Fibonacci : f(n) = f(n-1) + f(n-2) =2f(n-2) + ...原创 2020-04-04 22:17:22 · 593 阅读 · 0 评论