
计算机算法分析与设计第五版(王晓东)
文章平均质量分 80
冒冒菜菜
中国矿业大学人工智能专业!分享学习中的记录。
展开
-
主定理方法---求解时间复杂度和在大整数乘法里的应用
前言:博主之前整理过一篇求时间复杂度的文章,如下链接所示。但是后来发现一个更简单的主定理公式,于是决定再整理一篇。并加上主定理在大整数乘法里的应用。原创 2023-11-22 20:54:58 · 604 阅读 · 0 评论 -
计算机算法分析与设计(24)---分支限界章节复习
本文介绍了分支限界法,还介绍了分支限界法的三个应用,包括旅行商问题、装载问题、01背包问题。原创 2023-11-22 01:12:35 · 405 阅读 · 0 评论 -
穷举法、回溯法、分支界限法解决旅行商(TSP)问题
穷举法的本质是全排列。如下图对于四个点都连通的图,我们假定从aaa点出发,可以将获得4−1!(4-1)!4−1条路径。(公式为n−1!(n-1)!n−1分支限界法就是先将根结点放入活结点表中,然后循环取出表头结点,如果满足约束条件和限界条件就可以将当前结点的子结点(或者说下一级结点)放入活结点表中,直至得到所求解或者是活结点表为空为止。根据活结点表的存储方式可以将分支限界法分为队列式分支限界法和优先队列式分支限界法。原创 2023-11-19 16:44:39 · 2075 阅读 · 0 评论 -
计算机算法分析与设计(23)---二分搜索算法(C++)
1. 二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是用来在一个 有序数组 中查找某一元素的算法。2. 二分搜索算法基本思想是:将nnn个元素分成个数大致相同的两半,去an2a[n/2]an/2与xxx作比较。如果xan2x=a[n/2]xan/2,则找到xxx,算法终止;如果xan2x原创 2023-11-18 23:01:51 · 862 阅读 · 0 评论 -
计算机算法分析与设计(22)---回溯法(最小重量机器设计问题)
设某一机器由n个部件组成,每种部件都可以从m个不同的供应商处购得。设wij是从供应商j处购得的部件i的重置,cij是相应的价格。设计一个优先队列式分支限界法,给出总价格不超过d的最小重量机器设计。原创 2023-11-02 17:11:10 · 3728 阅读 · 2 评论 -
【C++】无重复数字全排列(三种方法)和有重复数字全排列
因此再往后退一步,退到了状态:__ __ __。第一个空位上除了填过的 1,2,还可以填 3。因此再往后退一步,退到了状态:__ __ __。剩余第三个空位没有填数。第三个空位上除了填过的 1,2,没有其他数字可以填。第一个空位上除了填过的 1,2,3,没有其他数字可以填。第二个空位上除了填过的 2,3,没有其他数字可以填。第二个空位上除了填过的 1,3,没有其他数字可以填。第二个空位上除了填过的 1,2,没有其他数字可以填。假设有 3 个空位,从前往后填数字,每次填一个位置,填的数字不能和前面一样。原创 2023-11-02 00:04:09 · 5560 阅读 · 0 评论 -
计算机算法分析与设计(21)---回溯法(图着色问题)
(2)长期以来,数学家无法证明四种颜色就够了,或者无法找到需要四种以上颜色的地图。直到1976年德国数学家沃尔夫冈·哈肯(Wolfgang Haken,生于1928年)和肯尼斯·阿佩尔(Kenneth Appel,1932年-2013年)使用计算机证明了四色定理,他们将无数种可能的地图缩减为1936种特殊情况,每种情况都由一台计算机进行了总计超过1000个小时的检查。一些简单的“地图”(例如棋盘)仅需要两种颜色(黑白),但是大多数复杂的地图需要更多的颜色。表示没有可用的颜色。,用于存储图中的边。原创 2023-10-28 13:13:47 · 3801 阅读 · 0 评论 -
计算机算法分析与设计(20)---回溯法(0-1背包问题)
因为编号最大的物品之后已经没有编号更大的物品了,因此没有可以考虑的下一种情况,只能在上一个层面上在进行一次回溯才能产生可能的最优解(此处不必考虑只放入2号物品的情况,因为一定不是最优解,原因可以自己思考一下)。回溯过程:每次找出一种满足条件的基本情况就进行一次回溯,找到最后放入包中的物品并将其取出,接着考虑是否放入编号在这个物品之后的第一个物品。由于此时包已经空了,并且最后一次取出的是编号最大的元素,那么说明算法已经完成了所有情况的遍历,算法终止,(9)进行一次回溯,取出背包中最后放入的物品,也就是。原创 2023-10-25 19:10:46 · 2699 阅读 · 4 评论 -
计算机算法分析与设计(19)---回溯法(装载问题)
3. 算法设计:用回溯法解决装载问题时,用子集树表示其解空间显然是最合适的。用可行性约束函数可剪去不满足约束条件。2. 将第一艘轮船尽可能装满等价于选取全体集装箱的一个子集,使该子集中集装箱重量之和最接近。1. 思路: 容易证明,如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。由此可知,装载问题等价于以下的。:剩余集装箱的重量。原创 2023-10-24 00:24:11 · 2359 阅读 · 0 评论 -
计算机算法分析与设计(18)---回溯法(介绍、子集和问题C++代码)
1. 回溯法(back tracking)是一种选优搜索法,又称为试探法,有“通用的解题法”之称,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回到上一步,重新选择,这种走不通就退回再走的技术称为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。2. 回溯是递归的副产品,只要有递归就会有回溯,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。原创 2023-10-23 20:00:46 · 2794 阅读 · 1 评论 -
计算机算法分析与设计(17)---最小生成树(Prim算法和Kruskal算法)
手写了一些Prim和Kruskal算法的原理和一道例题。原创 2023-10-22 23:33:58 · 172 阅读 · 0 评论 -
计算机算法分析与设计(16)---Dijkstra算法(含C++代码)
本文讲述了Dijkstra算法的原理与C++代码的实现!简单易懂。原创 2023-10-22 22:56:01 · 292 阅读 · 0 评论 -
计算机算法分析与设计(15)---贪心算法(虚拟汽车加油问题和最优分解问题)
接下来的一行中有k+1个整数,表示第k个加油站与k-1个加油站之间的距离。第0个加油站表示处出发地,汽车已加满油,第k+1个加油站便是目的地。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少,计算最少加油次数。将计算的最少加油次数输出,如果无法到达目的地,则输出 “No Solution”。思路:因为要使乘积最大,所以要尽量分解为相似大小的数。开始连续的自然数最好,最终分解剩余了一个余数,从分解的最后项依次加。分解为若干互不相同的自然数的和,且使这些自然数的乘积最大。原创 2023-10-21 11:05:04 · 2988 阅读 · 0 评论 -
计算机算法分析与设计(14)---贪心算法(会场安排问题和最优服务次序问题)
3. (1)先为最早开始的活动开辟一个会场,此时会场的最早结束时间为该活动的结束时间。如果没有,说明当前最早结束的会场能容纳当前的活动,更新会场的结束时间点,保证最早结束的会场最先开始下一个活动。可能有同学有疑惑:每个活动的开始时间和结束时间怎么是分开排序的?: 这道题不用关联,这个解法,只需要关心开始时间和结束时间,,只要集合里面的最大结束时间和当前的开始时间就可以。个活动,每个活动的开始和结束时间分别为 {1, 6},{4, 8},{9, 10},{7, 18}。个待安排的活动的开始时间和结束时间。原创 2023-10-20 23:40:55 · 4205 阅读 · 2 评论 -
计算机算法分析与设计(13)---贪心算法(多机调度问题)
贪心求解多机调度问题的贪心策略是最长处理时间作业优先,即把处理时间最长的作业分配给最先空闲的机器,这样可以保证处理时间长的作业优先处理,从而在整体上获得尽可能短的处理时间。原创 2023-10-19 01:07:31 · 5723 阅读 · 1 评论 -
计算机算法分析与设计(12)---贪心算法(最优装载问题和哈夫曼编码问题)
1. 哈夫曼编码是在电讯通信中的应用之一,广泛地用于数据文件压缩的十分有效的编码方法,其压缩率通常在20%~90%之间。在电讯通信业务中,通常用二进制编码来表示字母或其他字符,并用这样的编码来表示字符序列。2. 例如:如果需传送的电文为ABACCDA‘ABACCDA’ABACCDA,它只用到四种字符,用两位二进制编码便可分辨。假设ABCDA, B, C, DABCD的编码分别为0001101100011011,则上述电文便为。原创 2023-10-18 19:54:41 · 1472 阅读 · 0 评论 -
计算机算法分析与设计(11)---贪心算法(活动安排问题和背包问题)
1. 贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。2.注意:贪心算法对有些问题可以快速获得整体最优解。对有些问题虽不能得到整体最优解,却可以得到近似最优解。贪心选择性质:贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来得到,即通过贪心选择来达到。最优子结构性质:一个问题的最优解包含其子问题的最优解。相同:贪心算法和动态规划算法都要求问题具有最优子结构性质。原创 2023-10-16 23:44:43 · 6774 阅读 · 0 评论 -
计算机算法分析与设计(10)---租用游艇问题(含C++代码)
游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站。1. 由于Dijkstra算法用于最短距离,所以这里我们用距离代替租金(本质是一样的)。2. 本题的思路和矩阵链相乘思路很相似,但递推方程不一样。1. 本题采用动态规划思路来解决,需要写出递归方程。3. 之后我们遍历查找确定其他的最小距离。试设计一个算法,计算出从游艇出租站。长江游艇俱乐部在长江上设置了。输出格式:输出从游艇出租站。从确定好的里面进行挑选,当。由于是最少租金,初始时。原创 2023-10-15 01:02:47 · 1940 阅读 · 0 评论 -
计算机算法分析与设计(9)---0-1背包和完全背包问题(含C++代码)
1. 0-1背包问题:给定n种物品和一背包。物品iii的体积是vi,其价值为wi,背包的容量为c。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 2. 在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包和不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。原创 2023-10-10 19:36:19 · 561 阅读 · 0 评论 -
计算机算法分析与设计(8)---图像压缩动态规划算法(含C++代码)
1. 一幅图像的由很多个像素点构成,像素点越多分辨率越高,像素的灰度值范围为0~255,也就是需要8bit来存储一个像素的灰度值信息。注意:在灰度图像中,全0表示黑色,全1表示白色。2. 一幅由n×m像素点构成的图像,所需存储空间大小为:n×m×8bit=8nmbit(这是非常大的,直接传输很慢)。这个时候大家应该有了一些小的疑问:我能不能用更少的位数来表示灰度值?(因为有的灰度值并没有达到255这么大)所以我们引入了图像压缩算法来解决这个问题。原创 2023-10-09 23:38:12 · 4476 阅读 · 2 评论 -
计算机算法分析与设计(7)---合并排序和快速排序(含C++代码)
1. 算法思想:将待排序元素集合分成大小大致相同的2个子集合(当已有数列长度是奇数时,则一半长一半短),直到分离成长度为 1 的 n 个数列(其实就是 n 个数)。将数两两合并,每次合并时进行比较和排序,直到完成排序。2. 图片讲解:先是分离成长度为 1 的 n 个数列,然后再合并,合并过程中两个红色区域代表两两比较,然后将小的放在前面。原创 2023-10-08 23:25:49 · 512 阅读 · 0 评论 -
计算机算法分析与设计(6)---最长公共子序列(含C++代码)
本文详细讲述了最长公共子序列的知识,并附加上C++实现的代码。原创 2023-10-08 00:56:10 · 3547 阅读 · 0 评论 -
计算机算法分析与设计(5)---凸多边形的最优三角划分(含C++代码)
1. 用多边形顶点的逆时针序列表示凸多边形,即P={V0, V1, … Vn-1, Vn}表示具有n+1条边的凸多边形。2. 若Vi和Vj是多边形上不相邻的两个顶点,则线段ViVj称为多边形的一条弦。3. 多边形的三角剖分是将多边形分割成互不相交的三角形。4. 由多边形的边和弦组成三角形上的权w(即三边和)。要求确定该凸多边形的一个三角剖分,使得该三角剖分中的所有三角形上权之和最小。原创 2023-10-03 16:30:02 · 681 阅读 · 0 评论 -
计算机算法分析与设计(4)---矩阵连乘问题(含C++代码)
矩阵相乘,前一个矩阵的列数需等于后一个矩阵的行数。相乘得到的新矩阵,其行数由前一个矩阵决定,其列数由后一个矩阵决定。单个矩阵是完全加括号的。矩阵连乘积X是完全加括号的,则X可表示为2个完全加括号的矩阵连乘积,即Y和Z的乘积并加括号,即 X=(YZ) ,Y和Z也是完全加括号的。例如四个矩阵连乘积ABCD:(A((BC)D))、(A(B(CD)))、((AB)(CD))、(((AB)C)D)、((A(BC))D)。原创 2023-09-26 16:11:26 · 4934 阅读 · 0 评论 -
计算机算法分析与设计(3)---循环赛日程表(含C++代码)
算法思想:(1)按分治策略,我们可以将所有的选手分为两半,则n个选手的比赛日程表可以通过n/2个选手的比赛日程表来决定。(2)递归地用这种一分为二的策略对选手进行划分,直到只剩下两个选手时,比赛日程表的制定就变得很简单。原创 2023-09-19 22:28:33 · 1932 阅读 · 2 评论 -
计算机算法分析与设计(2)---Strassen矩阵乘法(手写)和棋盘覆盖
Strassen矩阵算法其实还是运用了分治的策略,目的是降低时间复杂性,其中也运用了递归树的方法求解时间复杂性。棋盘覆盖其实还是运用了分治的策略,目的是降低时间复杂性,其中也运用了主定理的方法求解时间复杂性。原创 2023-09-09 16:35:10 · 361 阅读 · 0 评论 -
计算机算法分析与设计(1)---求算法时间复杂性(手写例题)
包含了主定理方法和递归树方法求解时间复杂性,可用于课后学习和期末复习。原创 2023-09-09 01:12:30 · 362 阅读 · 0 评论