经典算法实现
文章平均质量分 87
阳光下的菜鸟杀手
这个作者很懒,什么都没留下…
展开
-
floyd算法
最近开始学算法,感觉存在电脑总有些不安全,没办法,这不是自己的电脑。 对于最短路径算法,floyd的算法的代码无疑是最容易写出来的,代码量少,而且很简洁。 首先要明确floyd算法的思想:从Vi到Vj的所有可能存在的路径中,选出一条长度最短的路径。 若存在,则存在路径{vi,vj}。// 路径中不含其它顶点 若,存在,则存在路径{vi,v1,vj}。// 路径中所含顶点序号不大于1 若{vi, …, v2}, {v2, …, vj}存在,则存在一条路径{vi, …, v原创 2011-01-31 23:21:00 · 348 阅读 · 1 评论 -
prim算法
<br />prim算法其实和dijkstra算法在实现上基本上一样,也很容易理解。<br /> <br />prim算法的基本思想:<br />取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。在添加的顶点 w 和已经在生成树上的顶点v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有 n个顶点为止。<br /> <br />在生成树的构造过程中,图中 n 个顶点分属两个集合:已落在生成树上的顶点集 U 和原创 2011-02-01 16:46:00 · 671 阅读 · 1 评论 -
kruskal算法
kruskal算法其实也是和prim算法一样求无向图的最小生成树,也属于贪心算法,不过prim算法的复杂度为O(n^2),适用于稠密图,而kruskal算法的复杂度为O(eloge),适用于稀疏图。kruskal算法描述很容易理解,如下 1.设连通网N=(V,{E}),令最小生成树初始状态为只有n个顶点而无边的非连通图T=(V,{F}),每个顶点自成一个连通分量 3.在E中选取代价最小的边,加入到T中,若它的添加使T 中产生回路,则舍去此边,选取下一条代价最小的边 4.依此类推,直至T中有 n-1 条边为止原创 2011-02-02 01:48:00 · 1946 阅读 · 0 评论 -
dijkstra算法
dijkstra算法比较容易理解,但是代码有点复杂。求从源点到其余各点的最短路径的算法的基本思想:其中,从源点到顶点v的最短路径是所有最短短路径中长度最短者。路径长度最短的最短路径的特点:在这条路径上,必定只含一条弧,并且这条弧的权值最小。下一条路径长度次短的最短路径的特点:它只可能有两种情况:或者是直接从源点到该点(只含一条弧); 或者是,从源点经过顶点v1,再到达该顶点(由两条弧组成)。再下一条路径长度次短的最短路径的特点:它可能有三种情况:或者是,直接从源点到该点(只含一条弧); 或者是,从源点经过顶原创 2011-02-01 00:05:00 · 312 阅读 · 0 评论 -
0-1背包问题详解
<br />动态规划是用空间换时间的一种方法的抽象。其关键是发现子问题和记录其结果。然后利用这些结果减轻运算量。<br />比如01背包问题。<br />/* 一个旅行者有一个最多能用M公斤的背包,现在有N件物品,<br />它们的重量分别是W1,W2,...,Wn,<br />它们的价值分别为P1,P2,...,Pn.<br />若每种物品只有一件求旅行者能获得最大总价值。<br />输入格式:<br />M,N<br />W1,P1<br />W2,P2<br />......<br />输出格式: <转载 2011-02-15 18:06:00 · 365 阅读 · 0 评论 -
BM字符串匹配算法
http://www.cnblogs.com/dsky/archive/2012/05/04/2483190.html在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前相当有效又容易理解的一种,一般情况下,比KMP算法快3-5倍。BM算法在移动模式串的时候是从左到右,而进行比较的时候是从右到左的。 BM算法实际上包含两个并行的算法,坏字符算法转载 2013-11-06 19:12:25 · 209 阅读 · 0 评论