zoukankan      html  css  js  c++  java
  • 算法导论笔记——第二十章 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:

  • 相关阅读:
    【转】为什么要报考系统架构设计师考试
    前端三大主流框架中文文档
    零散知识点-类的区别;函数式编程的简单总结;
    window.location相关方法
    Hybrid相关
    php中file_get_contents与curl的区别
    三级下拉菜单
    微信生成带参数二维码及响应操作
    开发中因长时间不用而遗忘的,持续补充中。。
    项目中用到的几个工具函数
  • 原文地址:https://www.cnblogs.com/justinh/p/7427706.html
Copyright © 2011-2022 走看看