算法学习笔记
文章平均质量分 73
伊二
这世界没有什么是不可能的。
展开
-
常用算法学习
递归和分治1. 递归:直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。2. 分治法的基本思想:将一个规模为n的问题分解为k个规模较小(一般分解为规模大小相等)的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。3. 分治法的一般设计模式:返回类型 分治法(P){If(问题规模(P)<阈值)基本子算法(P);分解(...原创 2018-05-20 11:24:56 · 267 阅读 · 0 评论 -
算法之装载问题
1. 问题描述:有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且集装箱重量总和(w1+w2+…+wn)<c1+c2。试找出一种合理的装载方案将这n个集装箱装上这2艘船。2. 问题分析:如果该装载问题有解,装载策略为:(1) 首先将第一艘船尽可能装满(等价于特殊的0-1背包问题,可采用动态规划算法);(2) 然后将剩余的集装箱都装上第二艘轮船;3. 解题思...原创 2018-05-24 10:52:02 · 4332 阅读 · 0 评论 -
算法之单源最短路径问题
1.问题描述:给出一个有向图G,图中的每一条边都有一个非负边权,要求找出从图的源顶点s到目标顶点t之间的最短路径。例图:从左到右从上到下,序号从0开始依次增大,即顶点个数n=11,A=s,E=t2.问题分析:(1)分支限界法:算法从G的源点s和空队列开始。结点s被扩展之后,他的儿子结点2,3,4被一次插入队列当中。然后取出队头元素,进行下一步扩展。保证每一次扩展时,源到当前节点的和都是最小的。具体...原创 2018-05-28 15:15:03 · 1192 阅读 · 0 评论 -
算法之多机调度问题
1.问题描述:设有n个独立的作业{1,2,…,n},由m台相同的机器进行加工处理。作业i所需处理时间为ti,任何作业可以在任何一台机器上加工处理,但未完工前不允许中断处理,任何作业不可以拆分成更小的子作业。要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。2.问题分析:该问题是NP完全问题,使用贪心选择策略可以得到较好的近似算法,贪心选择策略:最长处理时间作业优先...原创 2018-05-22 21:05:56 · 9382 阅读 · 0 评论 -
算法之最小生成树
1. 问题描述:利用贪心算法设计策略构造一个无向连通带权图的最小生成树。最小生成树:设G=(V,E)是无向连通带权图,即一个网络。E中每条边(v,w)的权为c[v][w]。包含G所有顶点的树且该生成树各边权的总和最小(即耗费最小),则称该生成树为G的最小生成树。设G=(V,E)是无向连通带权图,顶点集V={1,2,…,n}。1. Prim算法基本思想:首先置顶点集S={1},然后只要S是V的真子集...原创 2018-05-22 19:31:02 · 542 阅读 · 0 评论 -
算法之旅行售货员问题
问题描述:售货员要到n个城市去推销商品,已知各城市之间的路程(代价)a[][],试选择一条路,从第一个城市出发经过每个城市一遍,最后回到出发城市所耗费的代价最小。问题分析:分析可知解空间是一棵排列树,每一条从根节点到达叶子结点的路径代表了n个顶点的一种排列。定义x[N]记录可行解。剪枝函数:两个城市之间是否连通,到达当前为止的代价是否已经超过了最优代价,当前城市是否已经走过#include <...原创 2018-05-25 16:38:12 · 5542 阅读 · 0 评论 -
算法之最优装载
1.问题描述:有一批集装箱要装上一艘载重量为c的轮船,其中集装箱i的重量为wi。最优装载问题要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。该问题可以形式化描述为:式中xi=0表示不装入集装箱i,xi=1表示装入集装箱i。2.问题分析:因为体积不受限制,每个集装箱除重量外都一样,所以为了装尽可能的集装箱,可以优先选择重量最轻的集装箱装入,依次类推。3.贪心选择性质:每次选择重量最轻的集...原创 2018-05-21 19:49:16 · 2133 阅读 · 0 评论 -
算法之活动安排问题
1. 问题描述:设有一个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和结束时间fi且si<fi。如果选择了活动i,则它在半开时间区间[si,fi)内占用资源,若区间[si,fi)和区间[sj,fj)不相交,则称活动i与活动j是相容的。活动安排问题就是在所给的活动集合中选...原创 2018-05-21 18:09:37 · 632 阅读 · 0 评论 -
算法之图的m着色问题
问题描述:给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。求解一种着色法,使得G中每条边上的2个顶点着色不同。若一个图最少需要m种颜色才能使图中每2条边连接的2个顶点着色不同,则称这个数m为该图的色数。求一个图的色数的问题称为图的m可着色优化问题。给定图G=(V,E)和m种颜色,如果该图是m可着色的,找出所有不同的着色方案。问题分析:分析可知,该问题的解空间树是...原创 2018-05-25 14:41:50 · 7413 阅读 · 1 评论 -
算法之n皇后问题
1. 问题描述:在n×n的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题等价于在n×n的棋盘上放置n个皇后,任何2个皇后不能放在同一行或同一列或同一斜线上。2. 问题分析:用n元数组x[n]表示问题的解。其中x[i]表示皇后i放在棋盘第i行第x[i]列。由于不允许将2个皇后放在同一列上,所以解向量中的x[i]互不相同,2个皇后...原创 2018-05-25 09:38:35 · 1128 阅读 · 0 评论 -
算法之0-1背包问题
一、问题描述:给定n种物品和一个背包,物品i的重量是wi,其价值是vi,背包的容量为c。问应该如何选择装入背包中的物品,使得装入背包中的物品总价值最大。每种物品只有装入或不装入两种选择,不能装入部分也不能多次装入。形式化描述:给定c>0,wi>0,vi>0,1<=i<=n,要求找出一个n元0-1向量(x1,x2,…,xn),xi={0,1},1<=i<=n...原创 2018-05-21 09:45:58 · 727 阅读 · 0 评论 -
算法之最长公共子序列问题
一、问题描述最长公共子序列(longest common sequence)。什么是子序列呢?即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。子序列每个元素的下标严格递增。 如上图,给定的字符序列: {a,b,c,d,e,f,g,h},它的子序列示例: {a,c,e,f} 即元素b,d,g,h被去掉后,保持原有的元素序列所得到的结果就是子序列。同理,{a,h...原创 2018-05-20 15:59:57 · 3575 阅读 · 0 评论 -
算法之矩阵连乘问题
一.问题描述 给定n个矩阵{A1,A2,……,An},其中Ai与Ai+1是可乘的,i=1,2,……,n-1。 例如: 计算三个矩阵连乘{A1,A2,A3};维数分别为10*100 , 100*5 , 5*50 按此顺序计算需要的次数((A1*A2)*A3):10X100X5+10X5X50=7500次 按此顺序计算需要的次数(A1*(A2*A3)):10X5X50...原创 2018-05-20 11:19:27 · 8252 阅读 · 1 评论 -
算法之循环赛日程表
问题描述:设有n=2^k个运动员要进行网球循环赛。现在要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其它n-1个选手各赛一次; (2)每个选手一天只能比赛一次; (3)循环赛一共进行n-1天。问题分析:按曾要求可将比赛日程表设计成有n行n-1列的表。在表中第i行和第j列表示第i个选手在...原创 2018-05-18 22:03:43 · 1499 阅读 · 0 评论 -
算法之快速排序
快速排序是基于分治策略的排序算法,基本思想是,对于输入的子数组a[p:r],按照以下三个步骤进行排序:(1)分解:以元素a[p]为基准元素,将a[p:r]中比元素a[p]小的元素移动到a[p]的左边,比元素a[p]大的元素移动到a[p]的右边,记录分解完成后a[p]的下标q;(2)递归求解:通过递归调用快速排序算法,分别对子数组a[p:q-1]和a[q+1:r]进行排序;(3)合并:不需要合并算法...原创 2018-05-18 17:17:37 · 411 阅读 · 0 评论 -
算法之合并排序
合并排序算法是用分治策略实现对n个元素进行排序的算法。基本思想:将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成要求的排好序的集合。归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置 第三步:比较两个指针所指向的元素,选...原创 2018-05-18 17:00:31 · 679 阅读 · 0 评论 -
算法之棋盘覆盖
问题描述:棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,任意给定一个与其它方格不同的特殊方格,用如图中4种L型骨牌,实现对除特殊方格外的棋盘实现全覆盖。建立模型如图:问题分析:用分治策略,如上图,当k>0时,将棋盘分割成大小相等的4个部分,则特殊方格必然位于其中一部分棋盘内,假设特殊方格位于左上角棋盘内,则挑选如图L型骨牌覆盖这3个较小棋盘的会合处,将另外这3个较小棋盘也转化成含...原创 2018-05-18 16:49:26 · 435 阅读 · 0 评论 -
算法之二分查找
二分查找算法是运用分治策略的典型例子。给定一组已经排好序的n个元素a[n],从这n个元素中找到一个特定元素x。基本思想:将n 个元素划分成个数大致相同的两部分,取中间元素a[n/2]与x进行比较:如果x=a[n/2],即找到x,算法终止;如果x<a[n/2],则只在数组a的左半部分继续查找x;如果x>a[n/2],则只在数组a的右半部分继续查找x。c++#include <ios...原创 2018-05-18 16:17:15 · 445 阅读 · 0 评论 -
算法之布线问题
问题描述:印刷电路板将布线区域划分成n×m个方格阵列,精确的电路布线问题要求确定连接方格a到方格b的最短布线方案;布线时,电路只能沿着直线或直角(方格)布线;已经布线的方格被锁定,即不允许其它线路穿过。问题分析:从起始位置a开始将它作为第一个扩展结点,与该结点相邻并且可到达的方格成为可行结点被加入到活结点队列中,并且将这些方格标记为1,即从起始方格a到这些方格的距离为1。接着从活结点队列中取出队首...原创 2018-05-28 22:05:47 · 10051 阅读 · 0 评论