
算法入门
常用算法的说明和实现,力求以最简单的方式讲解各类算法的细节。给出自己的理解,供各位在学习算法的过程中参考。
JarvisChu
这个作者很懒,什么都没留下…
展开
-
算法入门7:分支限界法
上一篇回溯法中已经提到过,回溯法的思想是深度优先搜索加剪枝,与之相对,分支限界法的思想是广度优先搜索加剪枝。1. 分支限界法 – 广度优先搜素 1. 简单概述分支限界法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用广度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解原创 2013-11-25 10:38:16 · 8759 阅读 · 0 评论 -
算法入门6:回溯法
一. 回溯法 – 深度优先搜素 1. 简单概述回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。基本思想类同于:图的深度优先搜索二叉树的后序遍历【分支限界法:广度优先搜索思想类同于:图的广度优先遍历二叉树的层序原创 2013-11-13 22:16:45 · 92072 阅读 · 9 评论 -
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 /> 现只有面额为 11元、5元、1元的三种人民币。<br /> 给定一个 数目为 money 的人民币,如何用这三种面额的人民币 找开它,且用的人原创 2010-12-05 22:17:00 · 12616 阅读 · 0 评论 -
算法入门5:贪心算法
贪心算法中“贪心”二字形象的说明了该算法的基本思想:贪心(每一步选择都是眼下的局部最优选择)。比如每次给你1张面额不定的纸币,共10次,你这么选?肯定是每次都要一张100元的。当你要拿第一张时,此时眼下最优的选择就是拿一张100的,不会管拿了之后会不会对后面的9张产生影响。这就是一种贪心,当然这种情况下的贪心选择也是最优的选择,因为局部最优导致了整体的最优。贪心算法常用于求解最优解原创 2013-11-12 20:10:18 · 4402 阅读 · 1 评论 -
动态规划法----多边形游戏问题
一、题目 给出一个多边形,满足: 1. 每个顶点是一个数值 2. 每条边是一个符号 我们将某个边断开,形成一条数值和符号组成的链,然后计算这条链的值。 1· 可以选择任意一条边断开。 2.求链的值时,可以不必按运算符的优先级顺序,任意选择先后 题目的要求是得到最大的值二、示例三、分析 1. 如上图,我们将图的信息保存如下: 顶点数:REAL_SIZE = 3 顶点:v原创 2010-11-13 15:54:00 · 4420 阅读 · 1 评论 -
算法入门4:动态规划
分治算法将规模较大的问题划分成规模较小的子问题,通常,这些子问题是不重叠的。这一篇要介绍的动态规划算法,也是基于问题划分,区别在于划分的子问题是有重叠的(黄色部分),这样在求解的过程中,对于重叠的部分只要求解一次,记录下结果(备忘录方法),其他子问题中直接使用即可,减少了重复计算,效率更高。如下图,在计算子问题A的时候需要计算A的子问题a,b,c,计算B的时候需要计算b,c,d,这里b,c原创 2013-11-11 16:09:41 · 4458 阅读 · 0 评论 -
算法入门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 评论 -
算法入门2:分治算法(上)
上一篇中讲解了算法的基本概念,算法许许多多,按照算法基本思想,大致可分为如下几类:分治算法、贪心算法、动态规划、回溯法、分支限界、概率算法和随机算法等等。这一篇讲解分治算法。分治算法分治即分而治之。一个问题规模过大不容易直接解决,就可以划分成许多小问题,如果小问题不容易求解,那么可以再划分成规模更小的问题,直到规模小到很容易解决为止,解决这些小问题,再将小问题的解合并成大问题的解。这就是分原创 2013-11-05 20:06:51 · 3886 阅读 · 3 评论 -
算法入门1:基本概念
1. 算法是什么算法:顾名思义,一种计算的方法,在程序设计上,就表现为一组指令序列。为了使得算法有意义,还规定算法必须是有限的和确定的,也就是说算法的执行时间有限、执行的过程是确定的。 比如我们写了代码int a = 10; //a,b为输入数据int b = 20;int c = a+b; //c为输出数据,算法为加法运算原创 2013-10-31 20:32:16 · 4242 阅读 · 0 评论