还是不要乱用STL了吧。毕竟炸了这么多回了。 MARK: STL的各种容器,因为内存是动态分配的,所以效率会比较低,内部实现也不如手写(RB_Tree搞得我跟2B一样,STL还说线段树太基础,用RB_Tree好了,然而效率低啊!map, set, etc.)各种数据结构也跟炸了一样(因为要考虑各种各 ...
分类:
其他好文 时间:
2017-05-08 23:29:55
阅读次数:
341
好久没写了,简单水一下吧! 一个是最近没怎么刷题,圣诞,元旦,leetcode暂停的比赛两周,自己最近沉迷于打游戏,没有好好抓住时间。 其实最近看了一点书,是侯捷的 《stl源码剖析》,有一个问题是:vector内存只会增长,不会释放,那么怎么释放vector的内存呢? 参考这个:http://bl ...
分类:
编程语言 时间:
2017-01-12 08:42:32
阅读次数:
215
简介 STL(Standard Template Library),即标准模版库,涵盖了常用的数据结构和算法,并具有跨平台的特点。STL是C++标准函数库的一部分,如下图所示: STL含有容器、算法和迭代器组件,其之间的合作如下图所示: STL的底层机制都是以RB-tree(红黑树)完成的。一个红黑 ...
分类:
其他好文 时间:
2016-07-30 20:58:49
阅读次数:
135
STL中,list的优点是插入、删除性能极佳(时间复杂度只需O(1)即可),而且非常重要的在删除节点后,其迭代器不失效,但list查找却不擅长。map由于其实现的数据结构为rb-tree,因此,其插入、删除以及查找的性能也都是非常不错的。如:插入、删除操作在多数情况下,可能只需要几个简单的数据交换、 ...
分类:
其他好文 时间:
2016-06-28 10:44:11
阅读次数:
254
由于自己最近在看STL中的hash_table,被它精巧的设计所折服。无论是对桶子个数的确定,对链表的维护方式,以及判断元素在哪个桶子里等等方法都考虑到了方方面面。所以自己写了篇总结。
hash_table存储数据的特性
二叉树,AVL树,RB_tree等数据结构各有各的用途,并且具有对数平均时间,但之所以有这样高的效率取决于输入的数据有足够的随机性,那么hash_table这种数...
分类:
其他好文 时间:
2016-06-12 03:16:15
阅读次数:
292
1.红黑树简介
二叉搜索树能够提供对数的元素插入和访问。二叉搜索树的规则是:任何节点的键值一定大于其左子树的每一个节点值,并小于右子树的每一个节点值。
常见的二叉搜索树有AVL-tree、RB-tree(红黑树)。红黑树具有极佳的增、删、查性能,故我们选择红黑树作为关联式容器(associative containers)的底层结构。
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或...
分类:
其他好文 时间:
2016-05-30 15:47:08
阅读次数:
187
rb_tree是一种特殊的二叉搜索树,但是其对平衡的要求比avl_tree低,avl_tree要求左右子树的高度差不能大于1,而rb_tree只要求从一个节点至树的尾端的任何路径的黑节点的个数相等rb_tree必须满足的规则:
1.每个节点不是黑色就是红色;
2.根节点必须为黑色;
3.若节点为红色,则其子节点必须为黑色(红不连);
4.任意节点至树尾端的任何路径的黑色节点的个...
分类:
其他好文 时间:
2016-05-13 01:49:49
阅读次数:
252
Why would we go to such ludicrous lebgths to explain the RB_TREE?
《STL源码剖析》上给了我们一个很好的解释:(见202页)
所谓树形平衡与否,并没有一个绝对的测量标准。“平衡”的大致意义是:没有一个节点过深(深度即就是“根节点至任一节点的路径长度,即所谓该节点的深度”,在数值上与路径长度相等)。不同的平衡条件,造就出不同的...
分类:
编程语言 时间:
2016-05-12 23:45:20
阅读次数:
375
红黑树也是一种而叉搜索树,因此二叉搜索树的性质红黑树都具有,同时,我们知道为了避免最坏情况下的二叉搜索树(就是高度不平衡的情况)衍生出了AVL树,使其任何节点的左右子树的高度差相差最多1,从而达到平衡,以确保最坏情况下的搜索效率。当然红黑树为了比较好的搜索效率降低了对平衡的要求,但是红黑树仍然具有良好的平衡状态。
AVL树与RB_tree
AVL树也称为高度平衡树,其插入,删除...
分类:
其他好文 时间:
2016-05-12 16:42:22
阅读次数:
363