首先,我们回顾一下二叉查找树(binary search tree, BST)。 二叉查找树具有下列性质: BST 的插入 首先执行查找算法,找出被插结点的父亲结点。 若 key 值比当前结点小,则进入左儿子。 若 key 值比当前结点大,则进入右儿子。 最坏情况下,当先后插入的关键字有序时,二叉查 ...
分类:
其他好文 时间:
2017-05-01 22:27:45
阅读次数:
309
路径压缩 前面的并查集的复杂度实际上有些极端情况会很慢。比如树的结构正好是一条链,那么最坏情况下,每次查询的复杂度达到了 O(n)。 路径压缩 的思想是,我们只关心每个结点的父结点,而并不太关心树的真正的结构。 这样我们在一次查询的时候,可以把查询路径上的所有结点的 father[i] 都赋值成为根 ...
分类:
其他好文 时间:
2017-05-01 00:27:21
阅读次数:
391
快速排序 快速排序是一种排序算法,对包含 n 个数的输入数组,最坏情况运行时间为O(n2)。虽然这个最坏情况运行时间比较差,但快速排序通常是用于排序的最佳的实用选择, 这是因为其平均性能相当好:期望的运行时间为O(nlgn),且O(nlgn)记号中隐含的常数因子很小。另外,它还能够进行就地排序,在虚 ...
分类:
编程语言 时间:
2017-04-29 09:52:34
阅读次数:
316
显然: 1、最坏情况下最初的叛徒一定是叶子。 2、若x不是叛徒,那么x的父亲也不是叛徒。 令f[i]表示i不是叛徒的最小x,s[i]表示i的子树大小,那么答案就是所有s[i]>k的f[i]的最大值。 接下来考虑怎么求f[i]。 当i是叶子节点时,因为每个叶子节点都有可能是叛徒,所以f[i]应是1,表 ...
分类:
其他好文 时间:
2017-04-21 09:24:21
阅读次数:
101
codevs1020 孪生蜘蛛 1020 孪生蜘蛛 题目描述 Description 在G城保卫战中,超级孪生蜘蛛Phantom001和Phantom002作为第三层防卫被派往守护内城南端一带极为隐秘的通道。 根据防护中心的消息,敌方已经有一只特种飞蛾避过第二层防卫,直逼内城南端通道入口。但优秀的蜘 ...
分类:
其他好文 时间:
2017-04-07 23:40:24
阅读次数:
357
前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree) ...
分类:
编程语言 时间:
2017-04-05 13:55:20
阅读次数:
222
红黑树是平衡树的一种,保证最坏情况下操作时间复杂度为O(lgo(n))。红黑树的应用比较广泛,比如作为C++中STL的set和map的底层数据结构,Java集合中TreeSet和TreeMap的底层数据结构等。学习红黑树,可以把二叉查找树作为参考,这样有助于加深理解。红黑树的操作主要包括节点旋转、插 ...
分类:
其他好文 时间:
2017-04-04 11:50:14
阅读次数:
226
喵哈哈村与哗啦啦村的大战(二) 发布时间: 2017年3月27日 09:25 时间限制: 1000ms 内存限制: 128M 描述 喵哈哈村因为和哗啦啦村争夺稀有的水晶资源,展开了激烈的战斗。 喵哈哈村与哗啦啦村战斗的地图可以视为一个二维平面。 喵哈哈村准备修建n个防御工事,唯一的要求就是任意两个防 ...
分类:
其他好文 时间:
2017-03-31 01:02:00
阅读次数:
189
快速排序,正如其名,是在平均情况下速度最快的排序,在平均情况下为2ln2(nlogn),大约为1.39nlogn,在同样复杂度为O(nlogn)的排序算法中,是常系数最小的算法,其最坏情况虽然可以高达O(n^2),但是采用改进的随机化快排算法,可以极大的降低最坏情况的出现概率。不仅如此,快速排序还是 ...
分类:
编程语言 时间:
2017-03-30 17:56:40
阅读次数:
232
<转> 一.数据结构部分 1.数组和链表的区别。(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有 ...
分类:
编程语言 时间:
2017-03-27 18:41:08
阅读次数:
240