二叉查找树的基本操作包括搜索、插入、删除、取最大和最小值等都能够在O(h)时间复杂度内实现,因此能在期望时间O(lgn)下实现,但是二叉查找树的平衡性在这些操作中并没有得到维护,因此其高度可能会变得很高,当其高度较高时,而二叉查找树的性能就未必比链表好了,所以二叉查找树的集合操作是期望时间O(lgn),最坏情况下为O(n)。
红黑树也是一种二叉查找树,它拥有二叉查找树的性质,同时红黑树还...
分类:
其他好文 时间:
2014-08-28 00:58:48
阅读次数:
314
map是关联式的,vector、list、deque是序列式的。
map:底层机制RB-tree(红黑树),元素自动排序,键值对。
vector:操作方式与array相似,动态空间增长。是连续性空间,支持随机访问。
优点:
Ø 内存动态增长,不需要指定内存大小。
Ø 支持随机访问,即支持[]和vector.at()。
缺点:
Ø 在内部进行插入...
分类:
编程语言 时间:
2014-08-27 18:46:38
阅读次数:
194
map内部是用红黑树维持的有序结构。定义:mapmapStudent;查找的时间复杂度为对数级别.1.构造方法学习两种:第一种:用insert函数插入pair数据,mapStudent.insert(pair(0,"jiangjing"));第二种:用数组方式插入数据mapStudent[1] = ...
分类:
其他好文 时间:
2014-08-25 11:38:54
阅读次数:
194
注:以下源码基于jdk1.7.0_11
Set集合其实是对Map集合的封装,Map集合存储的是键值对,那么我们将值隐藏,不向外界暴露,这样就形成了Set集合。
对应Map集合的两个很重要的实现HashMap(基于哈希表),TreeMap(基于红黑树),Set集合也对应了两个类HashSet和TreeSet。由于之前花很多篇幅介绍了HashMap和TreeMap,在此将不再介绍其...
分类:
其他好文 时间:
2014-08-24 00:24:41
阅读次数:
248
注:以下源码基于jdk1.7.0_11
之前介绍了一系列Map集合中的具体实现类,包括HashMap,HashTable,LinkedHashMap。这三个类都是基于哈希表实现的,今天我们介绍另一种Map集合,TreeMap。TreeMap是基于红黑树实现的。
介绍TreeMap之前,回顾下红黑树的性质:
首先,我们要明确,红黑树是一种二叉排序树,而且是平衡二叉树。因而红黑树...
分类:
其他好文 时间:
2014-08-23 23:01:21
阅读次数:
510
特性Trie树属于树形结构,查询效率比红黑树和哈希表都要快。假设有这么一种应用场景:有若干个英文单词,需要快速查找某个单词是否存在于字典中。使用Trie时先从根节点开始查找,直至匹配到给出字符串的最后一个节点。在建立字典树结构时,预先把带有相同前缀的单词合并在同一节点,直至两个单词的某一个字母不同,...
分类:
其他好文 时间:
2014-08-22 00:16:35
阅读次数:
203
本文主要分析g++ stl中哈希表的实现方法。stl中,除了以红黑树为底层存储结构的map和set,还有用哈希表实现的hash_map和hash_set。map和set的查询时间是对数级的,而hash_map和hash_set更快,可以达到常数级,不过哈希表需要更多内存空间,属于以空间换时间的用法,...
分类:
其他好文 时间:
2014-08-21 22:44:34
阅读次数:
387
注意:区间树和线段树不一样哦,线段树是一种特殊的区间树。
区间树:
区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值是区间的左端点。通过建立这种特定的结构,可是使区间的元素的查找和插入都可以在O(lgn)的时间内完成。相比于基础的红黑树数据结构,增加了一个max[x],即以x为根的子树中所有区间的断点的最大值。逻辑结构如下所示:...
分类:
其他好文 时间:
2014-08-21 17:22:04
阅读次数:
331
SGI STL中的map底层以红黑树实现,hash_map以hash table实现。
hash_map不允许插入重新键值,hash_multimap允许插入重复键值。这两者的关系就像map和multimap的关系。底层的hash table提供的大部分的操作,hash_map(hash_multimap)大部分都是直接调用hash table的函数。...
分类:
其他好文 时间:
2014-08-18 18:45:49
阅读次数:
363
STL只规定接口和复杂度,对于具体实现不作要求。set大多以红黑树实现,但STL在标准规格之外提供了一个所谓的hash_set,以hash table实现。hash_set的接口,hash_table都提供了,所以几乎所有的hash_set操作都是直接调用hash_table的函数而已。
除了hash_set,还有hash_multiset,它们两个的关系就像set和multiset的关系,一个不允许键值重复,另外一个允许键值重复。其他实现一样。...
分类:
其他好文 时间:
2014-08-18 09:15:43
阅读次数:
267