当关键字是有界范围内的整数时,能够规避Ω(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树的更多相关文章

  1. BZOJ 3685: 普通van Emde Boas树( 线段树 )

    建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...

  2. bzoj3685普通van Emde Boas树 线段树

    3685: 普通van Emde Boas树 Time Limit: 9 Sec  Memory Limit: 128 MBSubmit: 1932  Solved: 626[Submit][Stat ...

  3. BZOJ_3685_普通van Emde Boas树_权值线段树

    BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x  若x不存在,插入x 2 x  若x存在,删除x 3    输出当前最小值,若不存 ...

  4. bzoj 3685: 普通van Emde Boas树

    3685: 普通van Emde Boas树 Description 设计数据结构支持:1 x  若x不存在,插入x2 x  若x存在,删除x3    输出当前最小值,若不存在输出-14    输出当 ...

  5. 【bzoj3685】普通van Emde Boas树 线段树

    普通van Emde Boas树 Time Limit: 9 Sec  Memory Limit: 128 MBSubmit: 1969  Solved: 639[Submit][Status][Di ...

  6. 浅谈 van Emde Boas 树——从 u 到 log log u 的蜕变

    本文参考算法导论完成. 模板题在此 QwQ 优化的过程比较长,还请读者耐心阅读,认真理解. 最初的想法 我会暴力! 用一个 \(size\) 数组维护每个元素出现的次数. 不细讲,时间复杂度 \(O( ...

  7. BZOJ3685: 普通van Emde Boas树

    显然这题的所有操作都可以用set,但是直接用set肯定要T,考虑到读入量较大,使用fread读入优化,就可以卡过去了. #include<bits/stdc++.h> using name ...

  8. 【BZOJ3685】【zkw权值线段树】普通van Emde Boas树

    原题传送门 因为马上要开始搞树套树了,所以学了一波权值线段树...毕竟是会点zkw线段树的,所以zkw线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数 ...

  9. 【模板】BZOJ 3685: 普通van Emde Boas树——Treap

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3685 据说神犇都是用zkw线段树水过的啊... 我蒟蒻只会写treap,加了fread之后8 ...

随机推荐

  1. js获取和设置属性的方法

    function square(num){    var total = num*num;//局部变量    return total;}var total = 50;//全局变量var number ...

  2. Android之怎样全屏显示

    三种方法: 1 自己定义主题(见设置自己定义样式和主题一节) http://blog.csdn.net/wei_chong_chong/article/details/47438907 2 使用系统自 ...

  3. MongoDB的选举过程(转)

    转自:http://www.mongoing.com/archives/295 MongoDB的复制集具有自动容忍部分节点宕机的功能,在复制集出现问题时时,会触发选举相关的过程,完成主从节点自动切换. ...

  4. mongodb的IO测试工具 mongoperf

    之前没发现mongoperf这个工具,测试IO的状态用的是iostat来进行观察. mongoperf < myjsonconfigfile  echo "{nThreads:2,fi ...

  5. Vim 打开文件同时定位到某一行

    在linux下,当后台某一行报警出错后,想用vim打开文件同时定位到某一行, Vim +某一行 filename 即可.

  6. 特权级概述(哥子就想知道CPU是如何验证特权级的)GATE+TSS

    [0]README text description from orange's implemention of a os . [1]特权级概述 当当前代码段试图访问一个段或者门时,目标段的DPL将会 ...

  7. Unity3D研究院之拓展Scene视图

    Scene视图是编辑游戏模型的地方,其实它还可以进行编辑.如下图所示,我给Scene视图做了简单的编辑. Scene视图的拓展是基于对象的,意思就是你必须在Hierarchy视图中选择一个对象才行.H ...

  8. 如何使用RadioGroup和RadioButton实现FragmentTabHost导航效果?

    目录: 一.概述 最近在做一个新闻类结合社区的APP的时候,需要添加一个侧滑菜单的效果,考虑到可以使用DrawerLayout布局,但是问题是使用了 DrawerLayout布局后,主页内容应该是一个 ...

  9. Django创建项目及app

    主要环境为python3.5,编译环境为pycharm 首先已经安装好Django相关的组件 1.首先创建Django程序: windows系统下pycharm创建步骤: File->New P ...

  10. 字符串的朴素模式和KMP模式匹配

    先复习一下字符串指针: #include <iostream> #include <string.h> using namespace std; int main() { ch ...