算法之道
文章平均质量分 60
独孤_子喻
艰难困苦如同欢乐,终将成为人生最后的财富。
展开
-
快速排序
http://blog.csdn.net/morewindows/article/details/6684558转载 2014-10-29 17:40:33 · 510 阅读 · 0 评论 -
字符串匹配 KMP算法
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。 这种算法不太容易理转载 2014-11-12 09:14:05 · 418 阅读 · 0 评论 -
CRC(循环冗余校验算法)
因为分析Redis的转载 2014-11-04 11:31:30 · 2276 阅读 · 1 评论 -
Counting-the-number-of-set-bits-in-an-integer
判断一个整数表示为二进制数时,二进制位为1的数目基本思想:设整数X,则X&(X-1):即把X的二进制表示的最右边的1设为0,因此循环二进制1的数目的次数即能使的X变为全0,而循环的次数即为其中1的数目。另外一个结论:判断正整数X是否为2的N次方注意以上的逆命题不成立。原创 2014-10-31 17:15:35 · 896 阅读 · 0 评论 -
最小生成树(MST)——Kruskal算法
最小生成树Kruskal算法是在处理一个森林——树的集合。开始时将图的每个顶点看做一棵树(集合),然后采用贪婪策略,每次从所有边中依次选出(Find)权值最小的边,当改边的两个端点不在同一集合时,则将终点所在集合与起点集合合并(Union),直到依次处理完所有的边,算法终止,此时所有的顶点在一个树中,即为最小生成树。原创 2015-03-25 10:23:39 · 876 阅读 · 0 评论 -
单源最短路径问题——Dijkstra算法
解决单源最短路径问题的一般方法是Dijkstra算法,该算法是贪婪算法的典型应用。其基本思想是对有向赋权图以开始顶点出发,逐层外扩(即广度优先搜索),以寻找当前最短路径。 1、从顶点V1为出发顶点,其距离dv1=0,为最小值,因此选择处理v1,将v1设为已知,与V1连接的顶点为v2、v4。其距离均小于当前dv4 和dv2的无穷大,因此更新:dv4=1,dv2=2; 2、选择当前距离最小未知顶原创 2015-03-27 16:15:07 · 1088 阅读 · 0 评论 -
红黑树—Red Black Tree
红黑树是具有以下五条性质的二叉查找树:1、每个结点要么是红的要么是黑的。 2、根结点是黑的。 3、每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。 4、如果一个结点是红的,那么它的两个儿子都是黑的。 5、 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。 正是由于红黑树的以上五个性质,使得其高度最多是2log(N+1),从而保证红黑树的查找、插入、删除的时间复杂度最坏为O(log n)。 在插入、删除过程中最关键的就是时刻保证RBT的五个性质原创 2015-03-28 21:47:10 · 1132 阅读 · 0 评论 -
最小生成树(MST)——Prim算法
一个无向图的最小生成树由该无向图的那些连接相互连接的顶点的边构成的树,且使得该树的所有边的总权值和最小。最小生成树问题在实际生活中也广泛存在,例如:要在一个村庄修建一条公路,连通到村里的每户人家,选择怎么的路线铺设道路使得总的距离最短(造价最低)。 最小生成树算法之一:Prim算法,将整个顶点集合分为两个子集U、V,U中存放已经在生成树中的顶点,V中存放未在生成树中的顶点。算法核心的每一步将从U、V中各选一顶点,使得边的权值w(u,v)最小,然后将该顶点v从V中移到U中,如此直到集合V为空,即完成。该过程原创 2015-03-24 23:11:53 · 1823 阅读 · 0 评论 -
逆序输出链表节点
注意:递归的本质是栈#include <list>#include <stack>#include <iostream>using namespace std;//递归实现逆序输出链表节点void PringListReversingly( list<int> &L, list<int>::iterator &it){ if(it!=L.end()) { list<int>原创 2015-04-05 00:28:27 · 474 阅读 · 0 评论