图文翔解-数据结构
用清晰的实例图解一些常用的数据结构,让你一目了然,迅速掌握精髓。
yang_yulei
这个作者很懒,什么都没留下…
展开
-
查找——图文翔解HashTree(哈希树)
引在各种数据结构(线性表、树等)中,记录在结构中的相对位置是随机的。因此在机构中查找记录的时需要进行一系列和关键字的比较。这一类的查找方法建立在“比较”的基础上。查找的效率依赖于查找过程中所进行的比较次数。之前我们介绍的各种基于比较的树查找算法,这些查找算法的效率都将随着数据记录数的增长而下降。仅仅是有的比较慢(时间复杂度为O(n)),有的比较快(时间复杂度是O(logn))而已。这些原创 2015-06-10 00:03:23 · 49203 阅读 · 8 评论 -
查找——图文翔解SkipList(跳跃表)
跳跃表跳跃列表(也称跳表)是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(logn)平均时间)。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表,因此得名。所有操作都以对数随机化的时间进行。如上图所示,是一个即为简单的跳跃表。传统意义的单链表是一个线性结构,向有序的链表原创 2015-06-09 00:09:31 · 10385 阅读 · 2 评论 -
查找——图文翔解RadixTree(基数树)
基数树对于长整型数据的映射,如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。radix树就是针对这种稀疏的长整型数据查找,能快速且节省空间地完成映射。借助于Radix树,我们可以实现对于长整型数据类型的路由。利用radix树可以根据一个长整型(比如一个长ID)快速查找到其对应的对象指针。这比用hash映射来的简单,也更节省空间,使用hash映射hash函数难以设计原创 2015-06-08 00:10:31 · 30365 阅读 · 1 评论 -
查找——图文翔解Treap(树堆)
Treap=Tree+Heap。Treap本身是一棵二叉搜索树,它的左子树和右子树也分别是一个Treap,和一般的二叉搜索树不同的是,Treap纪录一个额外的数据,就是优先级。Treap在以关键码构成二叉搜索树的同时,还满足堆的性质。这些优先级是是在结点插入时,随机赋予的,Treap根据这些优先级满足堆的性质。这样的话,Treap是有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树。其基本操作的期望时间复杂度为O(logn)。相对于其他的平衡二叉搜索树,Treap的特点是实现简原创 2015-06-04 00:04:16 · 19871 阅读 · 2 评论 -
查找——图文翔解SplayTree(伸展树)
伸展树伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它由Daniel Sleator和Robert Tarjan创造,后者对其进行了改进。假设想要对一个二叉查找树执行一系列的查找操作。为了使整个查找时间更小,被查频率高的那些条目就应当经常处于靠近树根的位置。于是想到设计一个简单方法,在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。splaytre原创 2015-05-27 00:05:04 · 8586 阅读 · 2 评论 -
查找(二)简单清晰的B树、Trie树详解
查找(二) 散列表散列表是普通数组概念的推广。由于对普通数组可以直接寻址,使得能在O(1)时间内访问数组中的任意位置。在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标。使用散列的查找算法分为两步。第一步是用散列函数将被查找的键转化为数组的一个索引。我们需要面对两个或多个键都会散列到相同的索引值的情况。因此,第二步就是一个处理碰撞冲突的过程,原创 2014-05-18 00:05:30 · 45259 阅读 · 7 评论 -
查找(一)史上最简单清晰的红黑树讲解
查找(一)我们使用符号表这个词来描述一张抽象的表格,我们会将信息(值)存储在其中,然后按照指定的键来搜索并获取这些信息。键和值的具体意义取决于不同的应用。符号表中可能会保存很多键和很多信息,因此实现一张高效的符号表也是一项很有挑战性的任务。我们会用三种经典的数据类型来实现高效的符号表:二叉查找数、红黑树、散列表。二分查找我们使用有序数组存原创 2014-05-18 00:05:19 · 129678 阅读 · 84 评论