算法导论笔记——第二十章 van Emde Boas树

当关键字是有界范围内的整数时,能够规避Ω(lglgn)下界的限制,那么在类似的场景下,我们应弄清楚o(lgn)时间内是否可以完成优先队列的每个操作。在本章中,我们将看到:van Emde Boas树支持优先队列操作及一些其他操作,每个操作最后情况运行时间为O(lglgn)。而这种数据结构限制关键字必须为0~n-1的整数且无重复。
下面以n为元素个数,u为全域大小。
20.1 基本方法
直接寻址
即位图bitmap方法。
insert,delete和member:复杂度O(1)
minimum,maximum,successor和predecessor最坏情况为O(u)
叠加的二叉树结构
位向量的全部元素组成了二叉树的叶子,并且每个内部结点为1当且仅当其子树中任一个叶节点包含1。

由于树的高度为lgu,每个操作至多沿树进行一趟向上和一趟向下的过程,因此每个操作的最坏情况运行时间为O(lgn)。
叠加的一棵高度恒定的树
叠加的树度数为u1/2。每个操作中,最多对两个大小为u1/2位的簇以及summary数组进行搜索,所以每个操作耗费O(u1/2)时间。(比二叉树渐进差)

使用度为u1/2的树是van Emde Boas树的关键思想。
20.2 递归结构
在本节中,我们对位向量上度为u1/2的叠加树想法进行修改。上一节中,用到了大小为u1/2的summary数组,数组的每项都指向一个大小为u1/2的另一个结构。现在使用结构递归,每次递归都已平方根大小缩减全域。(u,u1/2,u1/4,u1/8,...)
通过变量替换法,能够得到递归式
T(n)=2T([u1/2])+lgn
的解为T(n)=O(lgnlglgn)。考虑一个相似但更简单的递归式:
T(n)=2T(u1/2)+1
其解为T(n)=O(lglgn)。此递归式将指导数据结构上的查找。我们要设计一个递归的数据结构,该数据结构每层以u1/2为因子缩减规模。当一个操作遍历这个数据结构时,在递归到下一层次前,其在每一层耗费常数时间。
20.2.1 原型van Emde Boas结构
有些操作达不到O(lglgn)。



MEMBER:O(lglgu)
MINIMUN:O(lgu)
SUCCESSOR:O(lgulglgu)
INSERT:O(lgu)
DELETE:添加一个属性n来记录其拥有的元素个数
20.3 van Emde Boas树及其操作
全域限制放宽到2k,增加两个属性min和max,分别记录vEB树中的最小和最大元素。而且min不出现在在任何cluster中。


得到T(u)=O(lglgn)。
SUCCESSOR:
INSERT:
DELETE:
算法导论笔记——第二十章 van Emde Boas树的更多相关文章
- BZOJ 3685: 普通van Emde Boas树( 线段树 )
建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...
- bzoj3685普通van Emde Boas树 线段树
3685: 普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MBSubmit: 1932 Solved: 626[Submit][Stat ...
- BZOJ_3685_普通van Emde Boas树_权值线段树
BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x 若x不存在,插入x 2 x 若x存在,删除x 3 输出当前最小值,若不存 ...
- bzoj 3685: 普通van Emde Boas树
3685: 普通van Emde Boas树 Description 设计数据结构支持:1 x 若x不存在,插入x2 x 若x存在,删除x3 输出当前最小值,若不存在输出-14 输出当 ...
- 【bzoj3685】普通van Emde Boas树 线段树
普通van Emde Boas树 Time Limit: 9 Sec Memory Limit: 128 MBSubmit: 1969 Solved: 639[Submit][Status][Di ...
- 浅谈 van Emde Boas 树——从 u 到 log log u 的蜕变
本文参考算法导论完成. 模板题在此 QwQ 优化的过程比较长,还请读者耐心阅读,认真理解. 最初的想法 我会暴力! 用一个 \(size\) 数组维护每个元素出现的次数. 不细讲,时间复杂度 \(O( ...
- BZOJ3685: 普通van Emde Boas树
显然这题的所有操作都可以用set,但是直接用set肯定要T,考虑到读入量较大,使用fread读入优化,就可以卡过去了. #include<bits/stdc++.h> using name ...
- 【BZOJ3685】【zkw权值线段树】普通van Emde Boas树
原题传送门 因为马上要开始搞树套树了,所以学了一波权值线段树...毕竟是会点zkw线段树的,所以zkw线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数 ...
- 【模板】BZOJ 3685: 普通van Emde Boas树——Treap
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3685 据说神犇都是用zkw线段树水过的啊... 我蒟蒻只会写treap,加了fread之后8 ...
随机推荐
- 在dev目录创建一个字符设备驱动的流程
1.struct file_operations 字符设备文件接口 1: static int mpu_open(struct inode *inode, struct file *file) 2: ...
- 必会必知git
git必会必知 1 前言 git前身是BitKeeper,但是他不是开源软件,不符合当时开源趋势,于是就会有了开源的git,git开发只用了十天时间.目前git是公司开发必不可少的一个工具,用于多 ...
- redis错误error记录
早上登服务器,看到程序的redis的报错, 具体如下: (error) MISCONF Redis is configured to save RDB snapshots, but is curren ...
- Ubuntu下安装Oracle JRE运行环境
安装Oracle JDK -linux-i586.tar.gz安装参见在Ubuntu下利用Eclipse调试FFmpeg Linux x64:链接:http://pan.baidu.com/s/1gd ...
- 17 nginx连接memcached
一:配置php扩展memcached wget http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz # tar zvxf memc ...
- 做一个合格的程序员之浅析Spring AOP源代码(十八) Spring AOP开发大作战源代码解析
事实上上一篇文章价值非常小,也有反复造轮子的嫌疑,网上AOP的实例非常多,不胜枚举,事实上我要说的并非这个,我想要说的就是上一节中spring的配置文件: 我们这边并没实用到我们上几节分析的哪几个AO ...
- 3.11 T-SQL语句
T-SQL语句 1.创建表create table Car --创建一个名字是Car的表-- ( Code varchar(50) primary key, --第一列名字是Code 数据类型 ...
- EasyNVR H5无插件摄像机直播解决方案前端解析之:引用videojs无法自动播放
关于videojs自动播放问题 播放流媒体多使用videojs来进行播放,videojs,本身自带自动播放属性: 通过添加autoplay(),来完成视频播放的自动加载: player = video ...
- Grunt 学习笔记【2】---- 配置和创建任务
本文主要讲Grunt任务配置. 说明:本文所有示例都基于Grunt 0.4.5版本. 一 说明 使用Grunt实现项目的打包等工程化工作,实际上是通过Grunt提供的机制和插件,配置一个个任务(例如: ...
- 我的Android进阶之旅------>Android中MediaButtonReceiver广播监听器的机制分析
今天看公司的一段关于MediaButtonReceiver的代码看的比较混乱,幸好看了下面的这篇文章,才能茅塞顿开的理解好代码.在此转载下来,以备以后理解,希望都到这篇文章的人也能够有所帮助. 本文转 ...