
算法
文章平均质量分 84
BetaBin
学
展开
-
Dijkstra算法实现类—提高,邻接表+优先队列
总觉得前点时间写的Dijkstra,有点繁琐,还是用回邻接表和优先队列感觉舒服点。废话就不多说了,原先那篇邻接矩阵的Dijkstra链接如下:http://blog.youkuaiyun.com/betabin/article/details/7375803这次改为优先队列,则需要一个Vertex结构,记录其序号及到起点的cost。每次push进去队列之前,都刷新其最新cost。并且加了些辅助变量,如原创 2012-03-24 16:32:38 · 6089 阅读 · 1 评论 -
快排简单实现
没事再写下经典的快排代码,感觉顺手多了……还是比较懒,Wiki(http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F)介绍如下:算法快速排序是一种“分而治之、各个击破”的观念。快速排序使用分治法(Divide and conquer)策略来把一个序列(lis原创 2012-04-18 19:47:04 · 4651 阅读 · 0 评论 -
堆排序简单实现
(算法导论排序算法部分第一个就介绍堆排序,也得复习复习。)Wiki(http://zh.wikipedia.org/wiki/%E5%A0%86%E6%8E%92%E5%BA%8F#C.E8.AF.AD.E8.A8.80)上也有介绍及代码实现,基本上都是一样的。摘录堆排序定义如下:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时原创 2012-04-17 19:34:26 · 1313 阅读 · 0 评论 -
红黑树类算法实现
继续参考Wiki(http://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91),资料如下:性质红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:性质1. 节点是红色或黑色。性质2. 根是黑色。性质3. 所有叶子原创 2012-04-30 21:12:57 · 3767 阅读 · 0 评论 -
关于数据结构类型大概分类
资料参考来自Wiki。(慢慢添加链接到自己实现的类吧)*数据结构数据结构与算法列表00-1原理AAOE网AVL树B八叉树标签联合BSTRC抽象資料型別查找表D堆 (数据结构)堆栈递归类型队列E二元搜尋樹二叉树二维数组树旋转F斐波那契堆G原创 2012-03-26 06:54:07 · 1458 阅读 · 0 评论 -
Aho-Corasick算法实现类
刚刚翻Aho-Corasick算法,打算看看具体情况,发现一个有趣的网页,可以提供该算法的可视化,就先占个位置,发个链接(http://blog.ivank.net/aho-corasick-algorithm-in-as3.html),今晚有空再看看。——————终于舍得看AC了……囧。学习AC算法,首先要理解状态机(有限状态机)的概念,然后学会Trie的实现。接着,就可以更好的理解原创 2012-04-03 17:45:15 · 5489 阅读 · 0 评论 -
Kruskal算法实现类
昨天写了最小生成树的Prim算法,今天也就到了Kruskal算法了。一个对顶点进行操作,一个对边进行操作。当边稀疏的时候,Kruskal算法还是很牛的。时间复杂度:O(Elog2E)。(感觉更像是一个并查集的使用。http://zh.wikipedia.org/wiki/%E5%B9%B6%E6%9F%A5%E9%9B%86)关于科普,还是复制Wiki上面的了,哈哈。关于Kruskal算法原创 2012-03-24 07:45:04 · 2593 阅读 · 0 评论 -
Back-propagation Neural Net(BP神经网络)算法实现介绍浅析
(AI还没开始学,神经网络方面的知识缺乏。故暂时不能深入了理解。)神经网络,可以理解为一个自动机,一个需要学习的自动机。先给其一些学习数据,帮助其建立一个合适的网络。然后就和自动机类似。CodeProject里(http://www.codeproject.com/Articles/13582/Back-propagation-Neural-Net)有这个BP的,不过代码下载有问题。不过网页上原创 2012-04-21 20:28:48 · 7283 阅读 · 0 评论 -
Boyer-Moore算法实现类——简单封装了下
Boyer-Moore算法,老规矩,Wiki下的介绍如下:“在计算机科学里,Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小,但是通常仅为其它算法的一小部分:它不需原创 2012-04-01 21:33:53 · 2124 阅读 · 0 评论 -
SPFA(Shortest Path Faster Algorithm)算法实现类
继续图论的单源最短路径算法实现,上次学习了Bellman-Ford算法,知道了它的复杂度比较高,主要消耗在松弛操作有点冗余。所以,就有人对其进行优化,西南交通的段凡工前辈提出了这个SPEA算法。在Wiki上看到,有人把其称为Shortest Path Finding Algorithm,也不知道具体是怎样的,不过看在其速度蛮快的份上,我就用Faster了。复杂度快达O(kE)。其中,优化在哪里原创 2012-03-22 15:39:08 · 1496 阅读 · 0 评论 -
二叉查找树实现类——二叉链表
今晚头还是晕晕的,就随便写个数据结构来提神。就选了二叉查找树吧,老规矩,直接参考了Wiki上面的内容。二叉查找树的特性:二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树原创 2012-03-26 21:44:09 · 1678 阅读 · 0 评论 -
Dijkstra算法实现类—邻接矩阵,一般实现
(在后面更新了Dijkstra算法的实现,用邻接表+优先队列实现。链接如下:http://blog.youkuaiyun.com/betabin/article/details/7390403)有向权图关于单源最短路径算法,Dijkstra算法。算法可以形象理解为小城镇(最开始就是起点)的扩张,最后把世界吃掉。每次挑选一个离小城镇最近的地点,然后吃掉,更新各个未吃掉的地点到小城镇的距离。刷新距离主要是原创 2012-03-20 22:10:28 · 3174 阅读 · 0 评论 -
图算法 - 分类整理
隐藏▲查 · 论 · 编图算法基本遍历深度优先搜索 · 广度优先搜索 · A* · Flood Fill 最短路径Dijkstra · Bellman-Ford(SPFA) · Floyd-Warshall · Kneser图 最小生成树Prim原创 2012-03-21 06:59:16 · 1595 阅读 · 0 评论 -
Floyd-Warshall算法实现类
图的最短路径算法就剩下几个了,Floyd-Warshall算法是利用动态规划来实现的,其可以用来统计图的任意点对之间的距离。不过复杂度显而易见,需要O(V^3)。Wiki上有该算法的原理如下:设为从到的只以集合中的节点为中间节点的最短路径的长度。若最短路径经过点k,则;若最短路径不经过点k,则。因此,。代码如下:#include #define原创 2012-03-23 08:06:27 · 3205 阅读 · 0 评论 -
Prim算法实现类
来复习复习最小生成树的算法,其中的prim算法比较简单。虽说用一般的邻接矩阵需要O(V2)的的时间复杂度。但是改为邻接表之后,会稍微提高到O(E log(V))。不过,这个,测试数据输错了,把我郁闷了半个钟头。太大意了。这个Prim算法的原理呢,和Dijkstra算法有些类似。一个小城镇的扩张,慢慢侵蚀离它最近的点,吞噬成为其一部分,然后再继续吞噬。Wiki上给出的比较好懂,我的比原创 2012-03-23 10:22:24 · 1755 阅读 · 0 评论 -
二叉树实现类 —— 三叉链表实现
这天气都能惹上感冒+咳嗽,这幸运。话说回来,复习数据结构,二叉树算是第一个要看的,比较简单,又容易理解。实现方式有很多,大概如下:顺序存储:这种适合于比较完全的二叉树。子节点则为2i + 1和2i + 2,父节点则为floor((i - 1)/ 2)。二叉链表:也就是链表实现,三个属性,值,左子节点指针,右子节点指针。这个空间算是节约,不过找父节点不好找。三叉链表:相对于二原创 2012-03-26 09:29:08 · 4153 阅读 · 0 评论 -
AVL树实现类——二叉链表实现
(一个人感冒咳嗽不悲剧,悲剧的是全家都感冒咳嗽,没人做事……忽冷忽热的天气得注意保暖)首先吧,关于AVL树的知识,还是老规矩,Wiki下。“在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得原创 2012-03-30 10:44:34 · 1598 阅读 · 0 评论 -
Bellman-Ford算法实现类
貌似Bellman-Ford算法和Dijkstra算法类似,只是多了个处理负权值的考虑。不过Bellman-Ford算法比较简单易懂,虽然复杂度较高,有O(VE)。算法类如下,至于介绍吧,维基(http://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm)上面蛮详细的。三个步骤:1、数组Distant[i]记录从源点s到顶点i的原创 2012-03-21 09:58:28 · 1425 阅读 · 0 评论 -
计数排序简单实现
(唠叨完一个电话,开始写计数排序这个简单的线性排序算法。)原理很简单,继续Wiki(http://zh.wikipedia.org/wiki/%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F)之……计数排序的特征当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法原创 2012-04-18 20:49:43 · 1335 阅读 · 0 评论