- 博客(26)
- 资源 (3)
- 收藏
- 关注
原创 分支限界法-旅行售货员问题
旅行售货员问题的解空间树是一颗排序树。与前面关于子集树的讨论类似,实现对排列树搜索的优先队列式分支限界法也可以用两种不同的实现方式。一种是仅使用一个优先队列来存储活结点。优先队列中的每个活结点都存储从根到该活结点的相应路径。另一种是用优先队列来存储活结点,并同时存储当前已构造出的部分排列树。在这种方式下,优先队列中的活结点不必再存储从根到该活结点的相应路径,这条路径可在必要时从存储的部分排列树中获...
2018-11-09 14:04:09 17314 1
原创 分支限界法-0-1背包问题
分支限界法类似于回溯法,也是在问题的解空间上搜索问题解的算法。一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出解空间中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。由于求解目标不同,导致分支限界法与回溯法对解空间的搜索也不相同。回溯法以深度优先的方式搜索解空间...
2018-11-09 12:01:20 10236 3
原创 递归、回溯-旅行售货员问题
某售货员到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条路线,经过每个城市一遍最后回到驻地的路线,使得总的路程(或总旅费)最小(默认从1号城市开始)。输入:城市的数目n,城市a,b,以及其之间的路程d。输出:最短的路程,最短的路径方案。运行结果:旅行售货员问题的解空间是一颗排列数,对于排列数的回溯搜索与生成1,2,...,n的所有排列的递归算法Perm类似...
2018-11-08 12:29:07 1193
原创 递归、回溯-图的m着色问题
1、问题描述给定无向连通图G=(V,E)和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。这个问题是图的m可着色判定问题。输入:图的顶点的个数,颜色种类树m。输出顶点a与顶点b,表示a与b之间有一条边。输出:打印所有方案,输出顶点Ai(1<=i<=n)的颜色种类编号,可着色的方案总数。运行结果:...
2018-11-08 10:23:53 6864 1
原创 递归、回溯-0-1背包问题
0-1背包问题是子集选取问题。一般情况下,0-1背包问题是NP难的,0-1背包问题的解空间可用子集树表示。解0-1背包问题的回溯法与解装载问题的回溯法十分相似。在搜索解空间树时,只要其左儿子结点是一个可行结点,搜索就进入其左子树。当右子树有可能包含最优解时才进入右子树搜索,否则将右子树剪去。设r是当前剩余物品价值总和:cp是当前价值;bestp是当前最优价值。当cp+r<=bestp时,...
2018-11-07 20:53:21 1189
原创 递归、回溯-装载问题
之前讨论了最优装载问题的贪心算法,这里讨论最优装载问题的一个变形。1、问题描述:有一批共n个集装箱要装上两艘载重量分别为c1和c2的轮船,其中集装箱为wi,且 要求确是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船?如果有,找出一种装载方案。例如,当n=3,c1=c2=50,且w=[10,40,40]时,可将集装箱1和2装上第一艘轮船,而将集装箱3装上第二艘轮船:如果w=[2...
2018-11-07 19:29:51 2019 1
原创 递归、回溯-算法框架
之前已经学习过回溯法的一些问题,从这篇文章开始,继续深入学习一下回溯法以及其他经典问题。回溯法有通用的解题法之称。用它可以系统的搜索一个问题的所有解或任一解,回溯法是一个既带有系统性又带有跳跃性的搜索算法。它的问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖...
2018-11-07 14:52:56 2637
原创 贪心-最优装载问题
有一批集装箱,要装上一艘载重量为c的轮船。其中集装箱i的重量为wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。最优装载问题问题的形式描述:•问题的形式描述是:给定c>0,wi>0,1≤i≤n,求n元0-1向量 (x1, x2, …, xn),使得输入:集装箱的数目n,船的载重量c,集装箱i的重量为wi。输出:集装箱i是否装船,是...
2018-11-07 12:19:24 830
原创 贪心-活动安排问题
顾名思义,贪心算法总是做出当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所做的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优解。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的整体近似。贪心算法的一般框架:•GreedyAlgorithm...
2018-11-07 10:29:17 835 1
原创 动态规划-0-1背包问题
给定n个物品和一个背包。物品i的重量为wi,价值为vi,背包容量为c。问如何选择装入背包中的物品,使得装入背包的物品的价值最大?在装入背包时,每种物品i只有两种选择,装入或者不装入,既不能装入多次,也不能只装入一部分。因此,此问题称为0-1背包问题.0-1背包问题是一个特殊的整数规划问题。输入:物品的数目n,背包的容量c。各个物品的重量wi,各个物品的价值vi。输出:装入背包的最大价值...
2018-11-06 20:26:51 675
原创 动态规划-最长公共子序列问题(LCS)
若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk} 是X的子序列 是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X...
2018-11-06 19:08:24 1457
原创 动态规划-最长上升子序列问题(LIS)
给定n个整数A1,A2,...An,按从左到右的顺序选出尽量多的整数,组成一个上升子序列(子序列可以理为:删除0个或多个数,其他数的顺序不变)。例如序列1,6,2,3,7,5,可以选出上升子序列1,2,3,5,也可以选出1,6,7,但前者更长。选出的上升子序列中相邻元素不能相等。输入:整数的数目n,各个整数A1,A2,...An输出:最长上升子序列长度。运行结果:设d(i)为以...
2018-11-06 13:27:13 348
原创 动态规划-硬币问题
有n种硬币,面值分别为V1,V2,....,Vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。 1<=n<=100 0<=S<=10000 1<=Vi<=S输入:硬币的种类n,各个硬币的面值V1,V2,....Vn,非负整数S输出:输出硬币数目的最小值、最大值、最小值的方案、最大值的方案。运...
2018-11-05 21:16:05 1163
原创 动态规划-嵌套矩阵问题
有向无环图上的动态规划是学习动态规划的基础。很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。嵌套矩阵问题。有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排...
2018-11-04 21:14:03 1476 1
原创 动态规划-数字三角形问题
有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数. 1 3 2 4 10 14 3 2 20从第一行的数开始,每次可以往左下或右下走一格,直到走到最下行,把沿途经过的数全部加起来,如何走才能使得这个和尽量大?输入:三角形的行数n,数字三角形的各个数(从上到下,从左到右)输出:最大的和。运行结果:如果熟悉...
2018-11-04 19:23:44 16321
原创 动态规划-矩阵连乘问题(二)
话不多说,直接代码:void MatrixChain(int *p, int n, int m[][maxn], int s[][maxn]){ int i, j, k, r, t; for(i = 1; i <= n; i++) m[i][i] = 0; for(r = 2; r <= n; r++) for(i = ...
2018-11-04 18:01:04 931
原创 动态规划-矩阵连乘问题(一)
动态规划的理论性和实践性都比较强,一方面需要理解状态、状态转移、最优子结构、重叠子问题等概念,另一方面又需要根据题目的条件灵活设计算法。动态规划是一种用途很广的问题求解方法。它本身并不是一个特定的算法,而是一种思想,一种手段。动态规划算法与分治法类似,其基本思想也是将待求解问题分解为若干个子问题。在分解时,得到的子问题往往不是互相独立的,不同子问题的数目常常只有多项式量级。在用分治...
2018-11-04 16:28:16 1372
原创 递归、分治-棋盘覆盖
在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。用4种不同形态的L型骨牌, 覆盖给定特殊棋盘上除特殊方格以外的所有方格,且任何2个不得重叠。输入:特殊方格的位置(0-size-1),方格的大小size输出:各个方格所属的骨牌的编号,骨牌的编号由放置的顺序决定,越早放编号越小。特殊方格由-1表示。运行结果:当...
2018-11-04 14:18:36 193
原创 递归、分治-整数划分问题
将正整数n表示成一系列正整数之和。n=n1+n2+...+nk;其中n1>=n2>...>=nk>=1, k>=1正整数n这种表示称为正整数n的划分。问题是求正整数n的不同划分个数。例如正整数6有如下11种不同的划分6;5+1;4+2,4+1+1;3+3,3+2+1,3+1+1+1;2+2+2,2+2+1+1,2+1+1+1+1;...
2018-11-03 20:08:18 556
原创 递归、分治-排列问题
之前用暴力求解法求结果全排列,现在我们用分治的方法重新求解一遍。输入:数组P大小n,数组P中的各个元素。输出:数组P的所有全排列。运行结果:设R = {r1,r2,..rn}是要进行排列的n个元素, Ri = R - {ri}.集合X中元素的全排列记为Perm(X).(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳定义如下:...
2018-11-03 14:37:04 222
原创 算法分析初步-最大连续和问题(二)
本节使用刚学到的分治法来解决这个问题。再来回顾一下这个算法:分治算法一般分为如下3个步骤。划分问题:把问题的实例划分成子问题。递归求解:递归解决子问题。合并问题:合并子问题的解得到原问题的解。在本例中,划分就是把序列分成元素个数尽量相等的两半:递归求解就是分别求出完全位于左半或者完全位于右半的最佳序列:合并就是求出起点位于左半、终点位于右半的最大连续和序列,并和子问题的最优解比...
2018-11-03 11:24:54 179
原创 算法分析初步-最大连续和问题(一)
编程者都希望自己的算法高效,但算法在写成程序之前是运行不了的,难道每设计出一个算法都必须写出程序才能知道快不快吗?答案是否定的。本节介绍算法分析的基本概念和方法,力求在编程之前尽量准确地估计程序的时空开销,并作出决策-例如,如果算法又复杂速度又慢,就不要急着写出来了。给出一个长度为n的序列A1,A2,...,An,求最大连续和,换句话说,要求找找到1 <= i <= j <=...
2018-11-02 17:07:35 340
原创 递归、分治-Ackerman函数
之前学习过递归与回溯,现在学习一下递归与分治。分治的思想:对这k个子问题分别求解,如果子问题的规模仍然不够小,则再划分为多个规模更小的子问题,如此的递归进行下去,直到问题规模足够小,很容易求出其解为止。将求出的小规模问题的解,合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。当一个函数及它的一个变量是由函数自身定义时,称这个函数是双递归函数。Ackerman函数A(n,m)有...
2018-11-02 15:31:46 533
原创 动态二维数组
在C++中,我们有时候需要使用二维数组空间,那么怎么开辟呢?这里直接给出代码吧:创建类型为Type的动态二维数组,有rows行和cols列template <class Type>void Make2DArray(Type **&x, int rows, int cols){ int i; x = new Type*[rows]; f...
2018-11-02 13:09:14 136
原创 暴力求解-迭代加深搜索
迭代加深搜索是一个应用范围很广的算法,不仅可以像回溯法那样找一个解,也可以像状态空间搜索那样找一条路径。埃及分数问题。在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理数。例如,2/3 = 1/2 + 1/6,但不允许2/3 = 1/3 + 1/3,因为在加数中不允许有相同的。对于一个分数a/b,表示方法有很多种,其中加数少的比加数多的好,如果加数个数相同,则最小的分数越大...
2018-11-01 19:51:37 254
原创 暴力求解-路径寻找
在此之前介绍过图的遍历,很多问题可以归结为图的遍历,但这些问题中的图却不是事先给定的、从程序读入的,而是由程序动态生成的,称为隐式图。本节和前面介绍的回溯法不同,回溯法一般是要找一个(或者所有)满足约束的解(或者某种意义下的最优解),而状态空间搜索一般是要找到一个从初始状态到终止状态的路径。八数码问题。编号为1-8的8个正方形滑块被摆成3行3列(有一个格子留空),如图所示。每次可以把与空格相邻...
2018-11-01 14:18:40 578
飞机大战-Win32程序开发
2018-12-25
基于MFC实现游戏-飞机大战
2018-09-23
MFC实现简易绘图软件
2018-09-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人