上一页 1 2 3 4 5 6 7 8 9 10 ··· 21 下一页
摘要: 当谈及 Lock-Free 编程时,我们常将其概念与 Mutex 或 Lock 联系在一起,描述要在编程中尽量少使用这些锁结构,降低线程间互相阻塞的机会,以提高应用程序的性能。类同的概念还有 "Lockless" 和 "Non-Blocking" 等。实际上,这样的描述只涵盖了 Lock-Free 编程的一部分内容。本质上说,Lock-Free 编程仅描述了代码所表述的性质,而没有限定或要求代码该如何编写。 阅读全文
posted @ 2014-10-24 08:31 sangmado 阅读(27829) 评论(11) 推荐(22) 编辑
摘要: 在 1977 年,Robert S. Boyer (Stanford Research Institute) 和 J Strother Moore (Xerox Palo Alto Research Center) 共同发表了文章《A Fast String Searching Algorithm》,介绍了一种新的快速字符串匹配算法。这种算法在逻辑上相对于现有的算法有了显著的改进,它对要搜索的字符串进行倒序的字符比较,并且当字符比较不匹配时无需对整个模式串再进行搜索。 Boyer-Moore 算法的主要特点有:对模式字符的比较顺序时从右向左;预处理需要 O(m + σ) 的时间和空间复杂度;匹配阶段需要 O(m × n) 的时间复杂度;匹配阶段在最坏情况下需要 3n 次字符比较;最优复杂度 O(n/m)。 阅读全文
posted @ 2014-10-07 09:15 sangmado 阅读(16722) 评论(3) 推荐(6) 编辑
摘要: 解决字符串匹配的算法包括:朴素算法(Naive Algorithm)、Rabin-Karp 算法、有限自动机算法(Finite Automation)、 Knuth-Morris-Pratt 算法(即 KMP Algorithm)、Boyer-Moore 算法、Simon 算法、Colussi 算法、Galil-Giancarlo 算法、Apostolico-Crochemore 算法、Horspool 算法和 Sunday 算法等。本文主要介绍 Naive 算法和 KMP 算法的基本原理和实现。 阅读全文
posted @ 2014-10-04 21:50 sangmado 阅读(44141) 评论(19) 推荐(42) 编辑
摘要: 斐波那契堆(Fibonacci Heap)同二项堆(Binomial Heap)一样,也是一种可合并堆(Mergeable Heap)。与二项堆一样,斐波那契堆是由一组最小堆有序树构成,但堆中的树并不一定是二项树。与二项堆中树都是有序的不同,斐波那契堆中的树都是有根而无序的。 阅读全文
posted @ 2014-09-17 22:24 sangmado 阅读(6456) 评论(0) 推荐(2) 编辑
摘要: 在计算机科学中,二项堆(Binomial Heap)是一种堆结构。与二叉堆(Binary Heap)相比,其优势是可以快速合并两个堆,因此它属于可合并堆(Mergeable Heap)数据结构的一种。 阅读全文
posted @ 2014-09-17 21:53 sangmado 阅读(5717) 评论(0) 推荐(2) 编辑
摘要: 常见的堆实现为二叉堆(Binary Heap),其实际上是一颗二叉树(Binary Tree),并且是一颗完全二叉树(Complete Binary Tree)。当堆被实现为完全二叉树时,其高度为最小高度。如果堆中有 n 个节点,则最小高度为 Θ(lg n)。 阅读全文
posted @ 2014-09-17 19:18 sangmado 阅读(3473) 评论(5) 推荐(3) 编辑
摘要: 在 1997 年,MIT 的计算机科学实验室研究员 David Karger, Eric Lehman, Tom Leighton, Matthew Levine, Daniel Lewin, Rina Panigrahy 等发表了论文《Consistent hashing and random trees》,提出了一致性哈希(Consistent Hashing)的概念,其设计目标是为了解决大型网络中的热点问题(Hot Spots)。一致性哈希算法应该满足的 4 个性质:平衡性(Balance)、单调性(Monotonicity)、分散性(Spread)、负载均衡(Load)。 阅读全文
posted @ 2014-08-06 08:27 sangmado 阅读(4290) 评论(10) 推荐(7) 编辑
摘要: 哈希表(Hash Table)是普通数组概念的推广。当实际存储的的关键字数比可能的关键字总数较小时,这时采用哈希表就会比使用直接数组寻址更为有效。哈希表是一种动态集合数据结构,在一些合理的假设下,在哈希表中查找一个元素的期望时间是 O(1) 。当关键字的集合是一个不变的静态集合(Static)时,哈希技术还可以用来获取出色的最坏情况性能。如果某一种哈希技术在进行查找时,其最坏情况的内存访问次数为 O(1) 时,则称其为完美哈希(Perfect Hashing)。 阅读全文
posted @ 2014-08-03 18:10 sangmado 阅读(40517) 评论(5) 推荐(23) 编辑
摘要: 二叉查找树(Binary Search Tree)在很多情况下可以良好的工作,但它的限制是最坏情况下的渐进运行时间为 O(n)。平衡查找树(Balanced Search Tree)的设计则是保证其高度在最坏的情况下为 O(log n),其插入、删除和查找可以实现渐进运行时间 O(log n)。本文将介绍 2-3-4 树和 2-3 树的定义及基本操作。 阅读全文
posted @ 2014-07-24 21:52 sangmado 阅读(10261) 评论(1) 推荐(9) 编辑
摘要: BST 算法查找时间依赖于树的拓扑结构,最佳情况是 O(log­2n),而最坏情况是 O(n)。所以实际上我们真正面对的问题是如何保证 BST 的拓扑结构始终保持树高度与节点数量的最佳比例。一种方案就是在不试图让数据源决定数据顺序的情况下,新的节点插入后仍然可以保持 BST 树的平衡。这种能够始终维持树平衡状态的数据结构称为自平衡二叉查找树(self-balancing binary search tree)。本文中我们将主要介绍其中的两种:AVL 树和红黑树。 阅读全文
posted @ 2014-07-24 10:20 sangmado 阅读(9125) 评论(5) 推荐(7) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 21 下一页