
数据结构与算法
文章平均质量分 71
One2zeror
这个作者很懒,什么都没留下…
展开
-
并查集:Union-Find(1)
Disjoint Sets: 我们都知道Sets(集合)是什么,就是一组非重复元素组成的结构。 先让我们来看一下Disjoint Sets(非相交集合) : Disjoint Sets的意思是一堆集合们,它们相互之间都没有交集。没有交集是指:各个集合之间没有拥有共同、相同的元素。中文称作「分离集」。 Disjoint Sets 的性质相当特殊。信息学家仔细观察其特性后,精心设原创 2015-06-04 20:56:09 · 899 阅读 · 0 评论 -
图算法(3):Floyd-Warshall算法
Floyd-Warshall算法(英语:Floyd-Warshall algorithm),中文亦称弗洛伊德算法,是解决任意两点间的最短路径的一种算法,即全源最短路径问题(All-Pairs Shortest Paths Problem),可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。 Floyd-Warshall算法的时间复杂度为O(N^3)[3],空间复杂度为O(N原创 2015-07-12 21:13:49 · 1373 阅读 · 0 评论 -
图算法(1):Dijkstra's algorithm
Dijkstra’s algorithm使用了广度优先搜索解决非负权图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。举例来说,如果图中的顶点表示城市,而边上的权重表示著城市间开车行经的距离,该算法可以用来找到两个城市之间的最短路径。 其基本原理是:每次新扩展一个距离最短的点,更新与其相邻的点的距离。当所有边权都为正时,由于不会存在一原创 2015-07-12 15:10:31 · 4954 阅读 · 0 评论 -
拓扑排序
在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(Topological sorting)。 1)每个顶点出现且只出现一次; 2)若A在序列中排在B的前面,则在图中不存在从B到A的路径。 也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。 什么地方会用到拓扑排序呢?比原创 2015-07-11 23:10:28 · 684 阅读 · 0 评论 -
图算法(2):Bellman-Ford算法
Bellman-Ford算法是由理查德•贝尔曼(Richard Bellman) 和 莱斯特•福特 创立的,求解单源最短路径问题的一种算法。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore 也为这个算法的发展做出了贡献。它的原理是对图进行V-1次松弛操作,得到所有可能的最短路径。其优于迪科斯彻算法的方面是边的权值可以为负数、实现简单,缺点是时间原创 2015-07-12 16:07:42 · 1525 阅读 · 0 评论 -
kd树(k-dimensional tree)(1)
kd树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。 索引结构中相似性查询有两种基本的方式:一种是范围查询(range searches),另一种是K近邻查询(K-neighbor searches)。范围查询就是给定查询点和查询距离的阈值,从数据集中找出所有与查询点距离小于阈值的数据;K近邻查询是给定查原创 2015-06-13 16:24:06 · 2364 阅读 · 1 评论 -
3 way quick sort
3-way partitioning: 将数组分为三份:(小于、等于、大于拆分值) ・Let v be partitioning item a[lo]. ・Scan i from left to right. – (a[i] < v): exchange a[lt] with a[i]; increment both lt and i – (a[i] > v): exchange a[gt原创 2015-06-11 10:59:26 · 1639 阅读 · 0 评论 -
shuffling
Shuffling is a procedure used to randomize a deck of playing cards to provide an element of chance in card games. Shuffling的目标是要Shuffling后所有可能情况的概率一样。 Before: After: 这里介绍两种简单的shuffling算法:原创 2015-06-10 21:06:19 · 1618 阅读 · 0 评论 -
哈希表(Hash table)(1)
哈希表(Hash table)经常被用来做字典(dictionary),或称符号表(symbol-table) 直接存取表(Direct-access table): • 直接存取表(Direct-access table)的基本思想是:如果key的范围为0~m-1而且所有key都不相同, 那么可以设计一个数组T[0..m-1],让T[k]存放key为k的元素, 否则为空(NIL) • 显然,原创 2015-06-10 16:50:30 · 1013 阅读 · 0 评论 -
Ternary Tree
前一篇文章介绍了Trie树,它实现简单但空间效率低。如果要支持26个英文字母,每个节点就要保存26个指针,由于节点数组中保存的空指针占用了太多内存,让我来看看Ternary Tree。 When you have to store a set of strings, what data structure should you use? You could use hash tables, w原创 2015-06-30 20:22:07 · 979 阅读 · 0 评论 -
Trie树(字典树)(1)
Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构。 Trie树与二叉搜索树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀(prefix),也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。 A trie, pronounced原创 2015-06-30 14:53:36 · 1190 阅读 · 0 评论 -
Leetcode题解(3):L215/Kth Largest Element in an Array
L215: Kth Largest Element in an Array Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.For example, Gi原创 2015-06-06 21:15:23 · 824 阅读 · 0 评论 -
Morris Traversal遍历二叉树(非递归)
这里介绍非递归法遍历二叉树,与使用stack递归不同,该方法只需要O(1)空间,而且同样可以在O(n)时间内完成。要使用O(1)空间进行遍历,最大的难点在于,遍历到子节点的时候怎样重新返回到父节点(假设节点中没有指向父节点的p指针),由于不能用栈作为辅助空间。为了解决这个问题,Morris方法用到了(线索二叉树threaded binary tree)的概念。在Morris方法中不需要为每个节点额外原创 2015-06-27 17:44:30 · 787 阅读 · 0 评论 -
B+-树(B+-tree)(1)
简介: B-tree(也就是B树,多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。 B+-树使用广泛,一般用于数据库的索引,综合效率较高。 B-树是Rudolf Bayer, Edward M. McCreight(1970)写的一篇论文《Organization and Maintenance of Lar原创 2015-06-05 16:12:20 · 1405 阅读 · 0 评论 -
线索二叉树(Threaded Binary Tree)
A threaded binary tree is a binary tree variant that allows fast traversal: given a pointer to a node in a threaded tree, it is possible to cheaply find its in-order successor (and/or predecessor).原创 2015-06-27 17:38:42 · 1218 阅读 · 0 评论 -
Bloom Filter(布隆过滤器)
布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制矢量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash tab原创 2015-08-03 21:17:57 · 1313 阅读 · 0 评论