
算法设计与分析
one or only
这个作者很懒,什么都没留下…
展开
-
【算法设计与分析】常用算法概述
一、【分治法】分治法,字面上的解释是“分而治之”,就是把一个复杂的问题分成多个的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。递归:直接或间接地调用自身的算法。(包括两个部分:递归的出口和递归函数的表达...原创 2020-04-30 20:59:49 · 1459 阅读 · 0 评论 -
【算法设计与分析】最长递增子序列(动态规划)
public class LongSeries { public static int Long(int []num){ int []dp = new int[num.length]; for(int i = 0;i < dp.length;i++){ dp[i] = 1; //dp[i]代表以num[i]这个数字结尾的最长递增子序列,dp[i]至少为1 } ...原创 2020-04-02 19:53:50 · 507 阅读 · 0 评论 -
【算法设计与分析】最长公共子序列(动态规划)
/** * 求最长公共子序列长度 * @author 刘刘 */public class LcsLength { public static int lcsLength(char []x,char []y){ int m = x.length-1;//3 int n = y.length-1;//5 int [][]c = new int[m+1][n+1]; // c...原创 2020-04-11 19:24:12 · 626 阅读 · 0 评论 -
【算法设计与分析】编辑距离问题(动态规划)
题目描述:已知两个字符串word1和word2,求从word1转化成word2最少需要几步。其中,每一步只能进行以下三个操作之一:插入一个字符 删除一个字符 替换一个字符用动态规划的思路,用dp[i][j]表示word1的前i个字符转化为word2的前j个字符需要的操作次数。根据word1和word2的最后一个字符是否相同,分为两种情况:1、word1[i] == word2...原创 2020-03-30 19:13:09 · 985 阅读 · 0 评论 -
【算法设计与分析】排列问题、Hanio问题(递归算法)
排列问题 :设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}。集合x中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳如下:当n=1时,Perm(R)=(r),其中r是集合中唯一的元素;当n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm...原创 2020-03-24 21:15:54 · 810 阅读 · 0 评论 -
【算法设计与分析】最优装载问题(回溯算法)
问题描述:有一批共n个集装箱要装上两艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且,装载问题要求确定是否有一个合理的装载方案可将这些集装箱装上这两艘轮船。如果有,找出一种装载方案。例如:当n=3,c1=c2=50,且w=[10,40,40]时,则可以将集装箱1和2装到第一艘轮船上,而将集装箱3装到第二艘轮船上;如果w=[20,40,40],则无法将这3个集装箱都装上轮船。基本...原创 2020-03-18 19:41:38 · 6482 阅读 · 0 评论 -
【算法设计与分析】旅行售货员问题(回溯算法)
问题描述:某售货员要到若干城市去推销商品,已知各城市之间的路程,他要选定一条从驻地出发,经过每个城市一遍,最后回到住地的路线,使总的路程最短。算法描述:回溯法,序列树,假设起点为 1,算法开始时 x = [1, 2, 3, ..., n]x[1 : n]有两重含义 x[1 : i]代表前 i 步按顺序走过的城市, x[i + 1 : n]代表还未经过的城市。利用Swap函数进行交换位...原创 2020-03-20 19:58:31 · 4986 阅读 · 0 评论 -
【算法设计与分析】图形的m着色(回溯算法)
问题描述:给定无向连通图G=(V,E) 和 m种不同的颜色,用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称m为该图的色数。这是一道非常典型的回溯题目。解法与“N皇后问题”一样。在填写每一个顶点的颜色时检查与相邻已填顶点的颜色是否相同。如果不同,则填上;如果相同(冲突),则另选一种;如果已没有颜色可供选择,则回溯到上一...原创 2020-03-13 21:08:52 · 1192 阅读 · 0 评论 -
【算法设计与分析】整数划分问题(递归)
例如但n=4时,他有5个划分,{4},{3,1},{2,2},{2,1,1},{1,1,1,1};注意4=1+3 和 4=3+1被认为是同一个划分。该问题是求出n的所有划分个数,即f(n, n)。下面我们考虑求f(n,m)的方法;m为n划分的子数中最大的整数;递归法:根据n和m的关系,考虑以下几种情况:(1)当n=1时,不论m的值为多少(m>0),只有一种划分...转载 2020-02-24 19:55:50 · 1051 阅读 · 0 评论 -
【算法设计与分析】快速排序(分治)
输入:先输入进行排序元素的个数,然后依次随机输入(或随机生成)每个数字。输出:元素排序后的结果。示例:输入:8 9 1 2 4 8 6 15 8,输出:1 2 4 6 8 8 9 15...原创 2020-02-25 21:25:54 · 661 阅读 · 0 评论 -
【算法设计与分析】最大字段和(暴力,分治,动态规划)
问题描述:给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].1.穷举法枚举左右区间然后遍历该区间求解,时间复杂度O(n3)int maxSubSum1(int a[],int size ) { int ...原创 2020-03-04 19:23:55 · 2360 阅读 · 0 评论 -
【算法设计与分析】0-1背包问题(动态规划)
一、问题描述:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?二、总体思路:根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现;三、动态规划的原理及过程: eg:number=4,capacity=8...转载 2020-03-04 19:53:48 · 6007 阅读 · 0 评论 -
【算法设计与分析】活动安排问题(动态规划和贪心算法)
活动选择问题描述假设我们存在这样一个活动集合S={a1,a2,a3,a4,...,an},其中每一个活动ai都有一个开始时间si和结束时间fi保证(0≤si<fi),fi保证(0≤si<fi),活动aiai进行时,那么它占用的时间为[si,fi)[si,fi).现在这些活动占用一个共同的资源,就是这些活动会在某一时间段里面进行安排,如果两个活动aiai和ajaj的占用时间[si,f...原创 2020-03-05 19:58:21 · 7116 阅读 · 0 评论 -
【算法设计与分析】最优装载(贪心算法)
最优装载问题问题描述:有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。最优子结构性质:设(x1,x2,……xn)是最优装载问题的满足贪心选择性质的最优解,则易知,x1=1,(x2,x3,……xn)是轮船载重量为c-w1,待装船集装箱为{2,3,……n}时相应最优装载问题的最优解。因...原创 2020-03-05 20:55:10 · 2559 阅读 · 0 评论 -
【算法设计与分析】批处理作业调度(回溯算法)
问题描述:给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。批处理作业调度问题要求对于给定的n个作业,制定最佳作业调度方案,使其完成时间和达到最小。这3个作业的6种可能的调度方案是1,2...原创 2020-03-11 20:44:18 · 2637 阅读 · 0 评论 -
【算法设计与分析】N皇后(回溯算法)
回溯VS递归很多人认为回溯和递归是一样的,其实不然。在回溯法中可以看到有递归的身影,但是两者是有区别的。回溯法从问题本身出发,在包含问题的所有可能解的解空间树中,从根结点出发,按照深度优先的策略进行搜索,对于解空间树的某个结点,若满足约束条件,则进入该子树继续搜索,否则将以该结点为根结点的子树进行剪枝。寻找可能实现的所有情况。和穷举法的思想相近,不同在于穷举...原创 2020-03-12 21:24:39 · 721 阅读 · 0 评论