
算法设计与分析
JarvisChu
这个作者很懒,什么都没留下…
展开
-
(转)动态规划和贪心算法的区别
<br /> <br />(转自)http://hi.baidu.com/35661327/blog/item/d5463e17f1e8d011972b439c.html<br /> <br />动态规划和贪心算法的区别2009-07-27 13:18动态规划和贪心算法的区别<br />动态规划和贪心算法都是一种递推算法 <br />均有局部最优解来推导全局最优解 <br /><br />不同点: <br />贪心算法: <br />1.贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优转载 2010-12-05 17:17:00 · 29796 阅读 · 1 评论 -
算法入门5:贪心算法
贪心算法中“贪心”二字形象的说明了该算法的基本思想:贪心(每一步选择都是眼下的局部最优选择)。比如每次给你1张面额不定的纸币,共10次,你这么选?肯定是每次都要一张100元的。当你要拿第一张时,此时眼下最优的选择就是拿一张100的,不会管拿了之后会不会对后面的9张产生影响。这就是一种贪心,当然这种情况下的贪心选择也是最优的选择,因为局部最优导致了整体的最优。贪心算法常用于求解最优解原创 2013-11-12 20:10:18 · 4402 阅读 · 1 评论 -
算法入门8:随机算法
之前将的算法都是确定的,即对于相同的输入总对应着相同的输出。但实际中也常常用到不确定的算法,比如随机数生成算法,算法的结果是不确定的,我们称这种算法为(随机)概率算法,分为如下四类:数值概率算法 用于数值问题的求解,通常是近似解蒙特卡洛算法Monte Carlo 能得到问题的一个解,但不一定是正确解,正确的概率依赖于算法运行的原创 2013-11-25 22:18:36 · 7971 阅读 · 0 评论 -
算法入门4:动态规划
分治算法将规模较大的问题划分成规模较小的子问题,通常,这些子问题是不重叠的。这一篇要介绍的动态规划算法,也是基于问题划分,区别在于划分的子问题是有重叠的(黄色部分),这样在求解的过程中,对于重叠的部分只要求解一次,记录下结果(备忘录方法),其他子问题中直接使用即可,减少了重复计算,效率更高。如下图,在计算子问题A的时候需要计算A的子问题a,b,c,计算B的时候需要计算b,c,d,这里b,c原创 2013-11-11 16:09:41 · 4458 阅读 · 0 评论 -
算法入门7:分支限界法
上一篇回溯法中已经提到过,回溯法的思想是深度优先搜索加剪枝,与之相对,分支限界法的思想是广度优先搜索加剪枝。1. 分支限界法 – 广度优先搜素 1. 简单概述分支限界法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用广度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解原创 2013-11-25 10:38:16 · 8758 阅读 · 0 评论 -
算法入门2:分治算法(上)
上一篇中讲解了算法的基本概念,算法许许多多,按照算法基本思想,大致可分为如下几类:分治算法、贪心算法、动态规划、回溯法、分支限界、概率算法和随机算法等等。这一篇讲解分治算法。分治算法分治即分而治之。一个问题规模过大不容易直接解决,就可以划分成许多小问题,如果小问题不容易求解,那么可以再划分成规模更小的问题,直到规模小到很容易解决为止,解决这些小问题,再将小问题的解合并成大问题的解。这就是分原创 2013-11-05 20:06:51 · 3885 阅读 · 3 评论 -
算法入门3:分支算法(下)
分治算法的设计模式 - 大化小,小化了分治算法的主要步骤就是:分解,求解,合并。Divide-and-Conquer(P){ //问题规模足够小,直接解决 if(P≤n0) return(ADHOC(P); //问题规模大,则分解为较小的子问题 P1 ,P2 ,...,Pk divide p into smaller subin原创 2013-11-07 13:19:25 · 3155 阅读 · 1 评论 -
算法入门1:基本概念
1. 算法是什么算法:顾名思义,一种计算的方法,在程序设计上,就表现为一组指令序列。为了使得算法有意义,还规定算法必须是有限的和确定的,也就是说算法的执行时间有限、执行的过程是确定的。 比如我们写了代码int a = 10; //a,b为输入数据int b = 20;int c = a+b; //c为输出数据,算法为加法运算原创 2013-10-31 20:32:16 · 4242 阅读 · 0 评论 -
动态规划法----多边形游戏问题
一、题目 给出一个多边形,满足: 1. 每个顶点是一个数值 2. 每条边是一个符号 我们将某个边断开,形成一条数值和符号组成的链,然后计算这条链的值。 1· 可以选择任意一条边断开。 2.求链的值时,可以不必按运算符的优先级顺序,任意选择先后 题目的要求是得到最大的值二、示例三、分析 1. 如上图,我们将图的信息保存如下: 顶点数:REAL_SIZE = 3 顶点:v原创 2010-11-13 15:54:00 · 4419 阅读 · 1 评论 -
分支限界法----旅行售货员问题
一、问题描述某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程(或总旅费)最小。 如下图:1,2,3,4 四个城市及其路线费用图,任意两个城市之间不一定都有路可达。二、问题理解 1.分支限界法利用的是广度优先搜索和最优值策略。 2.利用二维数组保存图信息City_Graph[MAX_SIZE][MAX_SIZE] 其中City_Graph[i][j]的值代表的是城市i与城市原创 2010-10-29 19:06:00 · 48742 阅读 · 15 评论 -
理解动态规划算法与贪心算法区别----找钱问题
<br />一、说明<br /> <br /> 纠结了很久动态规划法与贪心算法的异同,光看理论文字的说明,没有能彻底搞清楚两者的区别究竟是什么。发现大家举得最多的一个<br />比较两者区别例子就是找钱问题。解决这个找钱问题,可以很大程度上帮助我们理解动态规划法语贪心算法的区别<br /> <br /> <br />二、问题<br /> 现只有面额为 11元、5元、1元的三种人民币。<br /> 给定一个 数目为 money 的人民币,如何用这三种面额的人民币 找开它,且用的人原创 2010-12-05 22:17:00 · 12616 阅读 · 0 评论 -
Prim算法 ----最小生成树
<br />#include <stdio.h>#define N 6#define TRUE 1#define FALSE 0#define MAX_VALUE 9999typedef struct edge{ int from; int to; float weight;}edge;edge path[N]; //保存第1到N-1步的走法float c[N+1][N+1];原创 2010-12-06 22:11:00 · 2187 阅读 · 0 评论 -
回溯法----旅行售货员问题
<br />一、问题<br /> <br /> 同文章 <分支限界法----旅行售货员问题><br /> <br />二、代码实现<br /> 程序实现了 递归回溯 解决该问题<br /> 迭代回溯算法仍在考虑中...<br />/**************************************************************** *问 题:旅行售货员 *算 法:回溯法 *描 述:解空间为 排列树 *************原创 2010-12-06 17:37:00 · 22969 阅读 · 9 评论 -
算法入门6:回溯法
一. 回溯法 – 深度优先搜素 1. 简单概述回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。基本思想类同于:图的深度优先搜索二叉树的后序遍历【分支限界法:广度优先搜索思想类同于:图的广度优先遍历二叉树的层序原创 2013-11-13 22:16:45 · 92062 阅读 · 9 评论