
【数据结构和算法】
laiwenqiang
世间最痛苦的事,莫过于泯然于众人,默默无闻。
展开
-
栈的最小值查找(O1)
问题描述错误的解决思路正确的解决思路问题描述 对栈增加一个获取最小值的方法(getMin),要求, 时间复杂度为O(1)。错误的解决思路定义一个minIndex,存储最小值的下标。每次push的时候比较大小, 如果小于最小值,则minIndex修改为当前下标, 否则不修改。这样貌似可以,但是发现一个严重的问题, 如果pop操作,把最小值出栈后,minIndex就无效了。原创 2017-01-05 00:57:17 · 1744 阅读 · 0 评论 -
在线算法学习网站
近日发现一个国外学习算法的网站,支持在线编程还能发帖讨论,有空闲时可以玩一玩。网址:https://leetcode.com/网址每天会收录不少题目,看样子挺活跃。courses里面有一些题目练手,比如:移除重复数据给定一个排好顺序的数组,然后去除里面重复的元素,并且返回最终数组的长度。不能创建新的数组,只能在原有的数组上操作。例如,传入一个数组 nums =原创 2016-12-29 02:38:46 · 14595 阅读 · 2 评论 -
【查找结构6】动态查找树比较
我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)。这四种树都具备下面几个优势:(1) 都是动态结构。在删除,插入操作的时候,都不需要彻底重建原始的索引树。最多就是执行一定量的旋转,变色操作来有限的改变树的形态。而这些操作所付出的代价都远远小于重建一棵树。这一优势在《查找结构专题(1):静态查找结构概论 》中转载 2014-11-07 15:15:26 · 518 阅读 · 0 评论 -
【查找结构5】多路查找树/B~树/B+树
在前面专题中讲的BST、AVL、RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关。那么降低树高自然对查找效率是有所帮助的。另外还有一个比较实际的问题:就是大量数据存储中,实现查询这样一个实际背景下,平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。那么如何减少树的深度(当然不能减少查询数据量),一个基本的想法就是:1. 每个节点存储多个元素 (但元素数量不转载 2014-11-07 15:15:04 · 428 阅读 · 0 评论 -
【查找结构4】红黑树 [RBT]
红黑树的性质与定义红黑树(red-black tree) 是一棵满足下述性质的二叉查找树:1. 每一个结点要么是红色,要么是黑色。2. 根结点是黑色的。3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含任何关键字信息,所有查询关键字都在非终结点上。4. 每个红色结点的两个子节点必须是黑色的。换句话说:从每个叶子到根的转载 2014-11-07 15:14:16 · 602 阅读 · 0 评论 -
【查找结构3】平衡二叉查找树 [AVL]
在上一个专题中,我们在谈论二叉查找树的效率的时候。不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找)。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法,平衡二叉树出现了。 平衡二叉树的定义 (AVL—— 发明者为Adel'son-Vel'skii 和 Landis) 平衡二叉查找树,又称 AVL树。 它除了具备转载 2014-11-07 15:07:48 · 615 阅读 · 0 评论 -
【查找结构 2】二叉查找树 [BST]
当所有的静态查找结构添加和删除一个数据的时候,整个结构都需要重建。这对于常常需要在查找过程中动态改变数据而言,是灾难性的。因此人们就必须去寻找高效的动态查找结构,我们在这讨论一个非常常用的动态查找树——二叉查找树 。 二叉查找树的特点 下面的图就是两棵二叉查找树,我们可以总结一下他的特点:(1) 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值转载 2014-11-07 15:02:01 · 645 阅读 · 0 评论 -
【查找结构1】静态查找结构概论
在计算机许多应用领域中,查找操作都是十分重要的研究技术。查找效率的好坏直接影响应用软件的性能。比如说:(1) 全文检索技术中对文本建立索引之后,对索引的查找效率将决定搜索引擎的质量。(2) mysql数据库的索引就是B+树结构,查找效率极高。(3) Windows OS的文件系统结构也是采用B+树进行存储的。 在《查找算法》系列文章中,我将主要介绍动态查找树转载 2014-11-07 14:56:49 · 612 阅读 · 0 评论