
计算机算法设计与分析
计算机算法设计与分析
清木!
前路浩浩荡荡,万物皆可期待
展开
-
8 NP完全性理论
p问题NP问题NP完全问题 NPC(complete )NP难问题NP-hard。原创 2022-12-25 22:35:40 · 584 阅读 · 0 评论 -
7-5 蒙特卡洛算法
蒙特卡罗算法则在一般情况下可以保证对问题的所有实例都以高概率给出正确解,但是通常无法判定一个具体解是否正确。一些问题,不论采用确定性算法或概率算法都无法保证每次都能得到正确的解答。Monte Carlo 算法。原创 2022-12-25 22:27:58 · 142 阅读 · 0 评论 -
7-4拉斯维加斯算法
拉斯维加斯原创 2022-12-25 22:10:14 · 331 阅读 · 0 评论 -
7.3舍伍得算法
舍伍德算法原创 2022-12-25 21:53:59 · 153 阅读 · 0 评论 -
7-2数值随机化算法
7-2数值随机化算法原创 2022-12-25 23:14:51 · 198 阅读 · 0 评论 -
7 随机化算法
随机数在概率算法设计中十分重要。计算机上无法产生真正的随机数。是一定程度上随机的,是伪随机数。线性同余法是产生伪随机数的最常用方法。7.2数值随机化算法7.3舍伍得算法7.4拉斯维加斯算法7.5蒙特卡洛算法原创 2022-12-06 20:18:39 · 334 阅读 · 0 评论 -
6-6 最大团问题(分支限界)
最大团问题原创 2022-12-06 19:39:02 · 447 阅读 · 0 评论 -
6-5 0-1背包问题(分支限界)
算法的思想先进行预处理:将各物品依其单位重量价值从大到小排列。优先队列的优先级∶已装物品价值+后面物品装满剩余容量的价值算法︰先检查当前扩展结点的左儿子结点。如果该左儿子结点是可行结点,则将它加入活结点优先队列中,如优于当前最优值,则更新当前最优值。当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时(优先级大于当前最优值)才将它加入活结点优先队列。从优先队列中取下一个活结点成为扩展结点,继续扩展。当叶节点为扩展结点时即为问题的最优值,算法结束。优先队列中的结点信息包含:当前背原创 2022-12-06 19:36:25 · 596 阅读 · 0 评论 -
6-4布线问题(分支限界)
印刷电路板将布线区域划分成m*n个方格阵列,如图(1)所示。精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿直线或直角布线,如图(2)所示。为了避免线路相交,已布了线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。算法的思想: 队列式分治限界法每个点的下一步有四个可选位置(上下左右)解空间树是4叉树位置偏移量:int go[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; //上下左右int m,n;//m行n列;int原创 2022-12-03 13:27:46 · 3408 阅读 · 3 评论 -
6-3 装载问题(分支限界)
有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为Wi,且采用下面的策略可得到最优装载方案:(1)将第一艘轮船尽可能装满;(2)将剩余集装箱装上第二艘轮船;原创 2022-11-30 21:40:05 · 3762 阅读 · 0 评论 -
6-1分支限界法
(1)求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解(或一个最优解),而分支限界法的求解目标则是找出满足约束条件的一个解(或最优解)。(2)搜索方式的不同∶回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。原创 2022-11-29 14:17:03 · 715 阅读 · 0 评论 -
5-10 圆排列问题(回溯)
给定n个大小不等的圆c1, c2,…, cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n=3,且所给的3个圆的半径分别为1,1,2时,这3个圆的最小长度的圆排列如图所示。其最小长度为2+4√2。原创 2022-11-29 11:26:16 · 1011 阅读 · 0 评论 -
5-9旅行售货员问题(回溯)
有n个城市,找从一城市出发走遍n个城市的最短问题。原创 2022-11-29 10:19:39 · 970 阅读 · 0 评论 -
5-8 图的m着色问题(回溯)
给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。原创 2022-11-28 20:47:21 · 434 阅读 · 0 评论 -
5-7 最大团问题(回溯)
给定无向图G=(V,E)。如果U包含于V,且对任意u,v∈U,有(u , v)∈E则称U是G的完全子图。完全子图U是G的团当且仅当U不包含在G的更大的完全子图中。G的最大团是指G中所含顶点数最多的团。原创 2022-11-28 11:20:29 · 438 阅读 · 0 评论 -
5-6 0-1背包问题(回溯)
【代码】5-6 0-1背包问题(回溯)原创 2022-11-26 16:16:59 · 142 阅读 · 0 评论 -
5-5 n皇后问题(回溯)
在nxn格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。原创 2022-11-26 15:15:59 · 2465 阅读 · 0 评论 -
5-4 符号三角形(回溯)
下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。原创 2022-11-24 21:02:27 · 1088 阅读 · 0 评论 -
5-3 批处理作业调度(回溯)
n个作业集合{1,2,…,n}。每个作业先由机器1处理,再由机器2处理。作业i需要机器j的处理时间为Mj。对于一个确定的作业调度,设Fi是作业i在机器j上完成的具体时间。所有作业在机器2上完成的具体时间(时刻)之和f称为该作业调度的完成时间和。要求:对于给定的n个作业,制定最佳作业调度方案(一个排列),使其完成时间和达到最小。原创 2022-11-24 17:08:46 · 1261 阅读 · 0 评论 -
5-2 装载问题(回溯)
【代码】5-1 装载问题(回溯)原创 2022-11-23 21:33:13 · 212 阅读 · 0 评论 -
5-1 回溯法
回溯法的解空间树有三种:子集树、排列树 和 完全n叉树。原创 2022-11-24 18:23:32 · 1799 阅读 · 0 评论 -
4-6 最小生成树Prim,Kruskal(贪心)
设G =(V,E)是无向连通带权图,即一个网络。E中每条边(u,v)的权为 c[u][v]。如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称为G的最小生成树(Minimum Spanning Tree ),简称MST。原创 2022-11-17 18:00:30 · 597 阅读 · 0 评论 -
4-5 单源最短路径 Dijikstra迪杰特斯拉算法(贪心)
给定带权有向图G =(V,E),其中每条边的权是非负实数。V中的一个顶点,称为源。计算从源到所有其他各顶点的最短路径长度。这个问题通常称为单源最短路径问题。路径长度是指路径上各边权之和。原创 2022-11-13 11:40:07 · 1881 阅读 · 0 评论 -
汽车加油问题
【代码】汽车加油问题。原创 2022-11-06 14:26:54 · 144 阅读 · 0 评论 -
4-3 最优装载(贪心)
有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。原创 2022-11-06 13:42:12 · 1979 阅读 · 0 评论 -
4-2 背包问题(贪心)
首先计算每种物品单位重量的价值vi/wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总重量未达到w,则选择单位重量价值次高的物品并尽可能多地装入背包。依此策略一直地进行下去直到背包满重为止。算法的主要计算时间在于将各种物品依其单位重量的价值从大到小排序。与0-1背包问题类似,所不同的只是在选择物品i装入背包时,可以选择物品的一部分而不一定要全部,1≤i≤n。因此,算法的计算时间上界为排序的时间复杂度O(nlogn)。原创 2022-11-05 21:26:43 · 604 阅读 · 0 评论 -
4-2 贪心算法
对于一个具体的问题,是否可用贪心算法得到问题的最优解呢?问题应具有2个重要的性质∶。原创 2022-11-05 20:50:13 · 288 阅读 · 0 评论 -
4-1 活动安排问题(贪心)
按结束时间递增排序,使用贪心策略,每次选择相容的且结束时间最早的活动,即a[i].end>a[j].start。原创 2022-10-27 21:44:12 · 364 阅读 · 0 评论 -
3-8 租用游艇问题(动态规划)
长江游艇俱乐部在长江上设置了n个游艇出租站1~n,游客可在这些游艇出租站租用游艇,并在下游的任何出租站归还游艇,限制只能从上游往下游行进,游艇出租站i到出租站j的租金为r(i,j)( 1≤i原创 2022-11-05 17:22:50 · 3300 阅读 · 0 评论 -
3-7四柱汉诺塔问题(动态规划)
四柱汉诺塔问题:设n个盘子的四柱汉诺塔的最少移动次数为f(n )(1)当n=0时,移动次数为0(2)当n=1时,移动次数为1(3)当n>1时,f (n ) =2f ( n-k ) +2^k-1 在0原创 2022-11-05 14:03:14 · 2040 阅读 · 0 评论 -
3-6 0-1背包(动态规划)
【代码】0-1背包(动态规划)原创 2022-11-01 16:27:06 · 139 阅读 · 0 评论 -
3-4最长公共子序列(动态规划)
【代码】3-4最长公共子序列(动态规划)原创 2022-11-01 11:48:31 · 172 阅读 · 0 评论 -
3-3 数字塔问题(动态规划)
【代码】3-3 数字塔问题(动态规划)原创 2022-10-27 20:47:19 · 442 阅读 · 0 评论 -
3-2 动态规划算法总结
同一个问题可以有多种方式刻画它的最优子结构,有些表示方法的求解速度更快(空间占用小,问题维度低)利用问题最优子结构性质,以自底向上的方式通过子问题的最优解逐步构造出整个问题的最优解。(一)动态规划可解决的问题同分治策略解决的问题类似,区别是存在。(1)找出最优解的性质,并刻划其结构特征(最优子结构性质)。矩阵连乘计算次序问题的最优解包含着其子问题的最优解。先假设由原问题的最优解导出的子问题的解不是最优的。(4)根据计算最优值时得到的信息,构造最优解。的求解速度更快(空间占用小,问题的维度低)。原创 2022-11-05 18:59:31 · 647 阅读 · 0 评论 -
3-1 矩阵连乘问题(动态规划和备忘录方法)
给定n个矩阵:A1,A2,…,An,其中Ai与Ai+1是可乘的,i=1,2…,n-1。考察这n个矩阵的连乘积A1A2…An。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。原创 2022-10-27 18:45:11 · 904 阅读 · 0 评论 -
2棋盘覆盖(分治)
在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一个特殊方格,且称该棋盘为一个特殊棋盘。显然,特殊方格在棋盘上出现的位置有 4^k 种情况,即k>=0,有4^k种不同的特殊棋盘。:用4种不同形态的L型骨牌覆盖一个给定的特殊棋盘(即特殊方格的位置已经确定了)上除特殊方格外的所有方格,且任何两个L型骨牌不得重复覆盖。按照规则,我们很容易知道,在2k的棋盘覆盖中,用到的L型骨盘数恰为(4^k-1)/3,即(所有方格个数-特殊方格个数)/3。原创 2022-10-24 22:03:13 · 1781 阅读 · 1 评论 -
2循环赛日程表(分治)
设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次;(2)每个选手一天只能参赛一次;(3)循环赛在n-1天内结束。按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第 i个选手在第j天所遇到的选手。 其中1≤i≤n,1≤j≤n-1。按分治策略,我们可以将所有的选手分为两半,则n个选手的...原创 2019-12-27 11:54:42 · 2703 阅读 · 1 评论 -
2大整数相乘(分治)
假设有两个大整数X、Y,分别设X、Y。利用分治法求X*Y的乘积。1、不超过long型的正整数//大整数乘法 p18 #include<iostream>#include<cmath>using namespace std;long Calculate(long X,long Y,int n){ if (X == 0 || Y == 0) re...原创 2019-12-26 21:20:15 · 557 阅读 · 0 评论 -
2全排列(递归)
全排列全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。1、设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列(所有元素按不同顺序所有的组合)。以{1, 2, 3, 4, 5}为例说明全排列的递归算法。先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头和5的全排列和以5开头和4的全排列。再看后三个数3, 4, 5。它们的全排列为3 4...原创 2019-12-25 21:51:11 · 1190 阅读 · 0 评论 -
2汉诺塔问题(递归)
汉诺塔问题(递归)印度北部贝拿勒斯圣庙里一块黄铜板上插着三根宝石针a,b,c,在其中一根针a上从下到上地穿好了由大到小的64片圆盘,这就是汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片不管在哪根针上小片必须在大片上面僧侣们预言,当所有的圆盘都从梵天穿好的那根针a上移到另外一根针b上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。用递归来...原创 2019-12-25 21:16:53 · 447 阅读 · 0 评论