![](https://img-blog.csdnimg.cn/5346b45e22ca4a40a4db620c96b0083a.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法设计与分析
文章平均质量分 81
摘自:算法设计与分析(第2版)——王红梅 胡明 编著——清华大学出版社
腊十九.w
愿我们都会上岸阳光万里去哪里都鲜花开放
展开
-
算法设计与分析——多段图的最短路径问题(Java)
不失一般性,将多段图的顶点按照段的顺序进行编号,同一段内顶点的顺序无关紧要。假设图中的顶点个数为 n,则源点 s 的编号为 0,终点t的编号为 n-1,并且对图中的任何一条边,顶点 u 的编号小于顶点 v 的编号。设数组 cost[ n ] 存储最短路径长度,cost[ j ] 表示从源点 s 到顶点 j 的最短路径长度,数组 path[ n ] 记录状态转移,path[ j ] 表示从源点 s 到顶点 j 的路径上顶点 j 的前一个顶点,动态规划法求解多段图的最短路径问题的算法如下。原创 2023-01-16 16:18:11 · 3334 阅读 · 0 评论 -
算法设计与分析——数塔问题(Java)
再求解下一阶段的子问题:第 3 层的决策是在第 4 层决策的基础上进行求解,可以看作 3 个 2 层的数塔,如如下图(数塔问题的动态规划求解过程)(b) 所示,对每个数塔进行求解,填写图(数塔问题的决策过程)的第 3 行。再求解下一阶段的子问题:第 4 层的决策是在底层决策的基础上进行求解,可以看作 4 个 2 层数塔,如下图(数塔问题的动态规划求解过程)(a) 所示,对每个数塔进行求解,填写图(数塔问题的决策过程)的第 4 行。依此类推,直到最后一个阶段:第 1 层的决策结果就是数塔问题的整体最优解。原创 2023-01-01 14:49:41 · 2442 阅读 · 0 评论 -
算法设计与分析——假币问题(Java)
对于假币问题,将问题规模减半的算法很容易想到,但实际上,减半不是一个最好的选择,考虑不是把硬币分成两组,而是分成三组,前两组有[ n/3 ] 组硬币,其余的硬币作为第三组,将前两组硬币放到天平上,如果它们的重量相同,则假币一定在第三组中,用同样的方法对第三组进行处理;解决假币问题的最自然的想法就是一分为二,也就是把 n 枚硬币分成两组,每组有 [ n/2 ] 枚硬币,如果 n 为奇数,就留下一枚硬币,然后把两组硬币分别放到天平的两端。1. 如果 n 等于 1,则该硬币即为假币,输出对应的序号,算法结束;原创 2022-12-28 10:17:41 · 2150 阅读 · 0 评论 -
算法设计与分析——淘汰赛冠军问题(Java)
下面考虑采用减治法,开始时将所有选手分成 n/2 组,每组两个选手进行比赛,被淘汰者不参加以后的比赛,然后再将剩余选手分成 n/4 组,每组两个选手进行比赛,......直到剩余最后两个选手,进行一次比赛即可选出最后的冠军。设 n=2,则外层的 while 循环共执行 k 次,在每一次执行时,内层的 for 循环的执行次数分别是 n/2,n/4,…个选手进行竞技淘汰赛,最后决出冠军的选手,请设计竞技淘汰比赛的过程。(第2版)——王红梅 胡明 编著——清华大学出版社。应用扩展递归技术求解这个递推式,得到。原创 2022-12-25 14:11:54 · 3072 阅读 · 2 评论 -
算法设计与分析——插入排序(Java)
最好情况下,待排序序列为正序,每趟只需与有序序列的最后一个记录比较一次,移动两次记录,则比较次数为 n-1,记录的移动次数为 2(n-1),因此,时间复杂性为O(n);最坏情况下,待排序序列为逆序,在第 i 趟插人时,第 i 个记录必须与前面 i-1个记录以及观察哨做比较,并且每比较一次就要做一次记录的移动,则比较次数为。在自 i - 1 起往前查找的过程中,同时后移记录。(1) 将整个待排序的记录序列划分成有序区和无序区,初始时有序区为待排序记录序列中的第一个记录,无序区包括所有剩余待排序的记录;原创 2022-12-13 14:40:01 · 197 阅读 · 0 评论 -
算法设计与分析——堆排序(Java)
堆排序是利用堆(假设利用大根堆)的特性进行排序的方法,其基本思想是:首先将待排序的记录序列构造成一个堆,此时,堆顶记录是堆中所有记录的最大者,将它从堆中移走(通常将堆顶记录和堆中最后一个记录交换),然后将剩余记录再调整成堆,这样又找出了次大记录,依此类推,直到堆中只有一个记录为止,如下图所示。算法 Sift 将根结点与左右子树的根结点进行比较,若不满足堆的条件,则将根结点与左右子树根结点的较大者进行交换,所以,每比较一次,需要调整的完全二叉树的问题规模就减少一半,因此,其时间性能是。已是叶子,则筛选完毕;原创 2022-12-10 09:11:17 · 484 阅读 · 0 评论 -
算法设计与分析——折半查找(Java)
在传统的算法设计技术的分类中,折半查找属于分治技术的典型应用。但是,由于折半查找与待查值每比较一次,根据比较结果使得查找的区间减半,所以,折半查找应该属于减治技术的成功应用。【问题】应用折半查找方法在一个有序序列中查找值为 k 的记录。若查找成功,返回记录 k 在序列中的位置,若查找失败,返回失败信息。【想法】折半查找 (binary search) 利用了记录序列有序的特点,其查找过程是:取有序序列的中间记录作为比较对象,若给定值与中间记录相等,则查找成功;若给定值小于中间记录,则在中间记录的左半区继续查原创 2022-12-04 19:04:36 · 2331 阅读 · 1 评论 -
算法设计与分析——二叉查找树(Java)
二叉查找树 (binary search tree) 是具有下列性质的二叉树:(1) 若它的左子树不空,则左子树上所有结点的值均小于根结点的值;(2) 若它的右子树不空,则右子树上所有结点的值均大于根结点的值;(3) 它的左右子树也都是二叉排序树。在二叉查找树上进行查找,与待查值比较后,根据比较结果只需要查找两个子树之一,因此,二叉查找树也是减治技术的成功应用。【问题】【想法】【问题】在一个无序序列中执行查找操作,可以将无序序列建立一棵二叉查找树,然后在二叉查找树中查找值为k的记录,若查找成功,返回记原创 2022-12-05 16:49:13 · 278 阅读 · 0 评论 -
算法设计与分析——两个序列的中位数(Java)
【问题】设无序序列T=(,,...,),T 的第 k(1 ≤ k ≤ n) 小元素定义为 T 按升序排列后在第 k 个位置上的元素。给定一个序列 T 和一个整数 k,寻找 T 的第 k 小元素的问题称为选择问题(choice problem)。特别地,将寻找第 n/2 小元素的问题称为中值问题( median problem)。【想法】选择问题的一个很自然的想法是将序列 T 排序,然后取第 k 个元素就是 T 的第 k 小元素。但是这个算法的最好时间是应用减治技术可以将算法的平均时间性能提高到O(n)。原创 2022-12-06 13:28:55 · 398 阅读 · 0 评论 -
算法设计与分析——百元买百鸡问题(Java)
表示小鸡的个数,注意到方程组可能有多个解,需要输出所有满足条件的解,设变量 count 表示解的个数,算法用伪代码描述如下。已知公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元三只,用 100 元钱买 100 只鸡,问公鸡、母鸡、小鸡各多少只?注意到小鸡 1 元三只,则小鸡的个数应该是 3 的倍数,因此,在判断总价是否满足方程时要先判断。(第2版)——王红梅 胡明 编著——清华大学出版社。3.如果 count 等于0,则输出无解信息;1.初始化解的个数 count=0;输出:公鸡、母鸡和小鸡的个数。原创 2022-11-22 15:41:00 · 2797 阅读 · 0 评论 -
算法设计与分析——串匹配问题(Java)
算法设计与分析——串匹配问题(Java)KMP算法BF算法原创 2022-11-29 15:50:51 · 1150 阅读 · 0 评论 -
算法设计与分析——背包问题(Java)
算法设计与分析——背包问题(Java)算法设计与分析(第2版)王红梅 胡明 编著原创 2022-10-22 10:44:40 · 3170 阅读 · 2 评论 -
算法设计与分析——两个序列的中位数(Java)
例如,对于两个给定的序列 A={11,13,15,17,19},B={2,4,10,15,20},求序列 A 和 B 的中位数的过程如下表所示,在求解过程中注意保持两个序列的长度相等。ab,则中位数只能出现在 b 和 a 之间,在序列 A 中舍弃 a 之后的元素得到序列 A1,在序列 B 中舍弃 b 之前的元素得到序列 B1。原创 2022-12-02 15:13:15 · 2027 阅读 · 2 评论 -
算法设计与分析——活动安排问题(Java)
算法设计与分析——活动安排问题(Java)算法设计与分析贪心法求解活动安排问题的算法原创 2022-11-12 16:36:52 · 3120 阅读 · 0 评论 -
算法设计与分析——顺序查找(Java)
顺序查找算法和其改进算法的时间复杂性都是 O(n),而系数相差一倍。实验表明,改进算法在表长大于1000时,进行次顺序查找的时间几乎减少一半。为了避免在查找过程中每一次比较前都要判断查找位置是否越界,可以设置观察哨( sentinel ),即将待查值放在查找方向的“尽头”处,则比较位置。的元素,若查找成功,则给出该元素在查找集合中的位置;若查找失败,则给出失败信息。顺序查找( sequential search )是指在查找集合中依次查找值为。(第2版)——王红梅 胡明 编著——清华大学出版社。原创 2022-11-28 14:57:36 · 810 阅读 · 0 评论