
算法
vxiao_shen_longv
这个作者很懒,什么都没留下…
展开
-
【分支限界法】旅行商问题(TSP)系列2
题目我们希望在最短的时间内看遍所有的景点,而且同一个景点只能经过一次,如何计划能在最短的时间内看完全部景点回家呢?问题分析这个问题可以把景点看作顶点,把景点间的路径看作边,这样景点地图就可以抽象为一个无向带权图。本题就是求经过所有顶点最后回到起点的最短路径。算法分支限界法分支限界法就是先将根结点放入活结点表中,然后循环取出表头结点,如果满足约束条件和限界条件就可以将当前结点的子结点(或...原创 2019-08-21 19:31:34 · 9556 阅读 · 2 评论 -
【分支限界法】0-1背包问题系列3
问题&&题目分析假设有n个物品和1个背包,每个物品的重量为wi,价值为vi,每个物品只有1件,要么装入,要么不装,不可拆分,背包载重量一定,如何装使背包装入的物品价值最高?算法分支限界法分支限界法就是广度优先搜索,从活结点表中取出队首的活结点,一次性生成所有符合条件的孩子结点,把孩子结点加入活结点表,然后继续下一个结点的扩展,直至得到最优解或者是活结点表为空。算法核心跟...原创 2019-08-05 12:02:28 · 7715 阅读 · 0 评论 -
【回溯法】旅行商问题(TSP)系列1
题目我们希望在最短的时间内看遍所有的景点,而且同一个景点只能经过一次,如何计划能在最短的时间内看完全部景点回家呢?问题分析这个问题可以把景点看作顶点,把景点间的路径看作边,这样景点地图就可以抽象为一个无向带权图。本题就是求经过所有顶点最后回到起点的最短路径。算法这个题使用回溯法的核心就是解空间,约束条件,限制条件和回溯。解空间本题的解空间是排列树(如感兴趣可移步机器零件加工问题),由...原创 2019-08-01 19:50:36 · 3481 阅读 · 0 评论 -
【回溯法】机器零件加工-最优加工顺序
题目有n个机器零件{J1,J2,…,Jn},每个零件必须先由机器1处理,再由机器2处理。零件Ji需要机器1,机器2的处理时间为t(1i),t(2i)。如何安排零件加工顺序,使第一个零件从机器1上加工开始到最后一个零件在机器2上加工完成,所需的总加工时间最短?问题分析要想计算出最短的加工时间,首先要知道一般情况下的加工时间是如何计算的。机器1是连续工作的,就是加工完了这一个,可以继续加工下一个...原创 2019-07-31 22:08:08 · 3011 阅读 · 3 评论 -
【回溯法】n皇后问题-DFS
题目在n * n的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之在同一行,同一列,同一斜线上的棋子。现在在n * n的棋盘上放置n个皇后,使彼此不受攻击。问题分析在放置皇后的过程中,我们要考虑三个方面,不能同行,不能同列,不能同对角线。那么就可以从行出发,即每个皇后放在一行中,这样只需考虑与已放置皇后不同列,不同对角线即可。也可以从列出发,每个皇后先是放在不同的列上,...原创 2019-07-30 11:12:26 · 255 阅读 · 0 评论 -
【回溯法】部落护卫队-极大完全子图
题目原始部落中,居民们为了争夺有限的资源经常发生冲突。几乎每个居民都有自己的仇敌。部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队伍中任何2个人都不是仇敌。问题分析这个问题我们可以转化为图来理解,把居民看作顶点,如果两个居民不是仇敌,那么对应的两个顶点之间就有边,如果是仇敌,那么对应两个顶点之间就没有边,设所有居民及其之间的关系构成的图为G,要使得任意两个居...原创 2019-07-29 18:29:09 · 1443 阅读 · 0 评论 -
【回溯法】0-1背包问题系列2
问题&&题目分析假设有n个物品和1个背包,每个物品的重量为wi,价值为vi,每个物品只有1件,要么装入,要么不装,不可拆分,背包载重量一定,如何装使背包装入的物品价值最高?算法回溯法首先来说几个小概念:孩子:这个结点子树上的所有结点;活结点:有自身,孩子未全部生成的结点;死结点:孩子已全部生成的结点;扩展结点:一个正在生孩子的结点;我觉得回溯法就是深度优先搜索(D...原创 2019-07-27 19:49:06 · 619 阅读 · 0 评论 -
【动态规划】快速计算矩阵连乘
题目给定n个矩阵{A1,A2,…,An},其中Ai和A(i+1)(i=1,2,3,…,n-1)是可乘的。矩阵乘法简单来说就是A(mn)和B(np)两个矩阵相乘,结果矩阵C为m*p阶的,且C(ij)就是A的第i行和B的第j行每个数对应相乘再作和的结果。用加括号的方法表示矩阵连乘的次序,不同的计算次序计算量(乘法次数)是不同的,找出一种加括号的方法使得矩阵连乘的计算量最小。问题分析这个问题求矩阵...原创 2019-07-26 11:34:32 · 1198 阅读 · 0 评论 -
【动态规划】0-1背包问题系列1
问题&&题目分析假设有n个物品和1个背包,每个物品的重量为wi,价值为vi,每个物品只有1件,要么装入,要么不装,不可拆分,背包载重量一定,如何装使背包装入的物品价值最高?算法这部分有参考《趣学算法》,也有很多自己的理解和思考,如有bug,欢迎批评指正(鞠躬)。动态规划之前有写过类似的最优装载问题,那个题目用的是贪心算法,但是这个题目与之前题目的很大不同之处就是这里的物品...原创 2019-07-01 20:54:40 · 260 阅读 · 0 评论 -
【动态规划】小石子游戏-石子合并
题目一群小孩子在玩小石子游戏,游戏有两种玩法。(1)路边玩法有n堆石子堆放在路边,现要将石子有序地合并成一堆,规定每次只能移动相邻的两堆石子合并,合并花费为新合成的一堆石子的数量。求将这N堆石子合并成一堆的总花费(最小或最大)。(2)操场玩法一个圆形操场周围摆放着n堆石子,现要将石子有序地合并成一堆,规定每次只能移动相邻的两堆石子合并,合并花费为新合成的一堆石子的数量。求将这N堆石子合并...原创 2019-06-20 20:03:17 · 1251 阅读 · 0 评论 -
【动态规划】游艇租赁问题
题目长江俱乐部在长江设置了n个游艇出租站1,2,…n,游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j), 现在要求游艇从出租站1到出租站n所需要的最少租金。问题分析在中间不同的出租站停靠就会有不同的租金,那么我们就看在哪些出租站停靠的时候租金最少。算法这部分有参考《趣学算法》,也有一些自己的理解和思考,如有bug,欢...原创 2019-06-19 19:33:47 · 4611 阅读 · 0 评论 -
【动态规划】编辑距离
题目大意&&问题分析给定两个序列X{x1,x2,x3…}和Y{y1,y2,y3…},求从一个序列到另一个序列所需变换的最小次数,这里的变换包括删除,添加和替换,每次只对一个元素进行操作。算法这部分有参考《趣学算法》,也有一些自己的理解和思考,如有bug,欢迎批评指点。(鞠躬)算法序言这个题目有点像之前写的最长公共子序列问题,也是用动态规划的算法。能够应用动态规划的题目有一...原创 2019-06-18 20:00:41 · 348 阅读 · 0 评论 -
【分治】POJ2083 Fractal
题目POJ2083 Fractal问题分析这个题目就是当前图以上一个图为基准单元输出麻将中五饼的形状,递推公式已经给出,用递归实现即可。算法算法核心本题采用分治算法,求解问题先得到子问题的解,就是要画出第n个图,先画出第n-1个图,要画第n-1个图先画第n-2个图,在分解到上一级图的时候按照坐标分解,直至分解到最小子问题也就是只有一个X为止,将结果储存在数组中,最后遍历输出数组即可。...原创 2019-06-16 10:22:52 · 634 阅读 · 0 评论 -
【动态规划】最长公共子序列问题
题目&&问题分析给定两个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},求X和Y的一个最长公共子序列。算法动态规划 vs分治分治是将一个问题分解为若干个规模差不多的子问题,然后分别求解,最后把各个问题的解合并得到最终解。动态规划也是将问题分解,但是不同之处在于动态规划是先求最小子问题的解,然后在求解较大子问题的时候可以直接用之前的结果。举个栗子可能会好理解一...原创 2019-06-15 09:35:49 · 1819 阅读 · 0 评论 -
【分治】二分查找
写在前面在我被二分木棍,二分求解高次方程组等等问题卡精度卡到怀疑人生之后,我决定这次用最简单的例子来介绍一下二分查找这个算法。算法算法核心二分算法的核心就是通过待查找数据与查找域中值的大小关系来缩小查找范围,二分查找的时间复杂度为o(logn)。算法流程num:待查找数据;a[]:查找范围;l:查找范围起始下标;r:查找范围中止下标;mid:查找范围下标中间值;Binarys...原创 2019-06-12 20:12:32 · 423 阅读 · 0 评论 -
【分治】快速排序-HDU1106 排序
题目HDU1106 排序问题分析本题就是把5作为空格,在字符串中把整数一个一个分出来,然后把这些数排序,最后按照从小到大的顺序输出即可。(只是借这个题来熟悉一下快排,如果只是想过题的话,直接写sort就行)算法算法核心本题在排序部分使用快速排序,快速排序看字面就知道这个算法的特点就是快呀,在数据量达到1e5的时候,快排比选择,冒泡,归并都要快。快排首先选取基准元素,如果从小到大排序,将...原创 2019-06-12 19:19:54 · 448 阅读 · 0 评论 -
【分治】合并排序(归并排序)-HDU1106 排序
题目HDU1106 排序问题分析这个题目就是把5看作空格,然后从字符串中把整数分出来,将整数按从小到大的顺序输出即可。(其实只是借这个题目来熟悉一下合并排序,如果只是想过题的话不用这么麻烦,直接写sort就行)算法算法核心本题在排序部分采用合并排序,所谓合并排序就是将一组数分为两组数量差不多的数,然后分别对两组数排序,之后再合并即可。合并排序用递归实现,递归最终是每组只有一个数,那么这...原创 2019-06-11 17:22:15 · 267 阅读 · 0 评论 -
【贪心】畅通工程系列总结-kruskal vs Prim
两种算法kruskal&Prim这两种算法都是求最小生成树的贪心算法,但是出发角度不一样。kruskal算法是从边出发,将边按权值从小到大排序,然后遍历选边;Prim算法是从顶点的角度出发,在V-U中找离U最近的顶点。这就决定了这两种算法的适用范围,kruskal适用于点多边少的情况,适用于稀疏图;Prim算法适用于边多点少的情况,适用于稠密图。一点想法刚开始是在集合论图论中学的两种...原创 2019-06-09 11:06:54 · 227 阅读 · 0 评论 -
【贪心】畅通工程系列4-HDU1233 还是畅通工程-Prim算法
题目http://acm.hdu.edu.cn/showproblem.php?pid=1233问题分析本题求是整个省畅通的最低成本,把村庄作为顶点,把公路作为边,那么本题就是求最小生成树的总边权值。算法算法核心本题可采用Prim算法,其实这也是贪心的一种。设V为顶点的全集,U初始化{v0},每次都选择V-U中到分支U最近的点,然后把该点加入U,更新V-U中的点到U的距离,然后再次选择...原创 2019-06-09 10:37:09 · 242 阅读 · 0 评论 -
【贪心】畅通工程系列3-HDU1879 继续畅通工程-kruskal算法
题目http://acm.hdu.edu.cn/showproblem.php?pid=1879问题分析这个题依旧是把村庄作为顶点,把道路作为边,不过与之前不同的是有的边已经存在,那么计算的时候就不用计算这些已有道路的成本,而是要先考虑这些边对于整个图连通的影响,在此基础上求生成树所需要的最小总边权值。算法算法核心这个题与HDU1863非常相似,区别在于有的道路已经存在,那么在输入循环...原创 2019-06-08 10:45:01 · 196 阅读 · 0 评论 -
【贪心】畅通工程系列2-HDU1232 畅通工程
题目http://acm.hdu.edu.cn/showproblem.php?pid=1232问题分析本题求还需要建设多少条道路使全省畅通,并且给出了已有道路,把村庄作为顶点,已有道路作为边,求出连通分支的个数再-1即可。算法算法核心根据已有道路构建并查集,最后计算出连通分支数-1即可。算法流程首先将所有结点的根结点初始化为本身,然后每输入一条边,就看两个顶点是否在同一个连通分支...原创 2019-06-06 15:07:05 · 235 阅读 · 0 评论 -
【贪心】畅通工程系列1-HDU1863 畅通工程-kruskal算法
题目http://acm.hdu.edu.cn/showproblem.php?pid=1863问题分析这道题目求使全省畅通的最低成本,把村庄作为顶点,把道路作为边,那么该题即求最小生成树的总边权值。算法算法核心其实我觉得kruskal算法也是一种贪心,就是每次都选择权重最小的边(也就是成本最低的道路),看这条边的两个顶点是否处在同一个连通分支中,如果不在同一个连通分支中,那么就选上这...原创 2019-06-06 11:01:50 · 316 阅读 · 0 评论 -
【贪心】Dijkstra-POJ2387 Til the Cows Come Home
题目http://poj.org/problem?id=2387问题分析这个题可以把地标作为顶点,把牛的踪迹作为边,顶点数为n,边数为t,那么所求就是第n个顶点到第一个顶点的最短路长度。算法算法核心本题采用Dijkstra算法,Dijkstra算法是求最短路的贪心算法。有两个点集,设顶点总体为集合V,集合U初始为空,先确定起始顶点,将其加入集合U,然后在集合V中找到离起点最近的顶点,将...原创 2019-06-05 11:00:26 · 164 阅读 · 0 评论 -
【贪心】HDU-acm steps1.3.2-今年暑假不AC
题目http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1§ionid=3&problemid=3问题分析这个题目是想要在有限的时间内看到更多的节目,下一个节目的开始时间要晚于上一个节目的结束时间,这样才能不造成冲突。算法算法核心本题采用贪心算法,即在剩余节目中选择结束时间最早的且不与已选择节目...原创 2019-06-03 21:13:15 · 170 阅读 · 0 评论 -
【贪心】阿里巴巴与四十大盗-背包问题
题目阿里巴巴因为偶然的机会进入了强盗们的宝库,他想拿走一些让乡亲们开开眼。他想每种宝物只拿一个,如果太重就用锤子凿开,但毛驴运载能力有限,怎么才能用毛驴运走最高价值的宝物呢?数据输入第一行:宝物种数n和毛驴的承载重量m之后n行:每行都是一种宝物的重量和价值输出最高价值问题分析这个问题是基础的背包问题,就是看怎么装能使价值最高,就是尽可能装性价比高的宝物,才能在一定的重量范围内得到...原创 2019-06-03 20:09:09 · 793 阅读 · 0 评论 -
【贪心】加勒比海盗船-最优装载问题
题目在北美洲东南部,有一片神秘的海域,那里碧海 蓝天、阳光明媚,这正是传说中海盗最活跃的加勒比海。17 世纪时,这里更是欧洲大陆 的商旅舰队到达美洲的必经之地,所以当时的海盗活 动非常猖獗,海盗不仅攻击过往商人,甚至攻击英国 皇家舰…… 有一天,海盗们截获了一艘装满各种各样古董的 货船,每一件古董都价值连城,一旦打碎就失去了它 的价值。虽然海盗船足够大,但载重量为 C,每件古董的重量为 wi,海...原创 2019-06-03 19:16:57 · 1036 阅读 · 0 评论