算法导论 van Emde Boas 树

  1. 结构

    1. vEB(u)表示全域值为{0,1,2,…,u-1} vEB 树
    2. min 表示 vEB 树中最小值,该值元素不出现在任何递归的子树(簇) vEB(u↓\sqrt[\downarrow]{u}↓u​)中
    3. max 表示 vEB 树中最大值
    4. summary 指向 vEB(u↑\sqrt[\uparrow]{u}↑u​)新的树,summary[i]表示子树 cluster[i]的逻辑或
    5. cluster[0…u↑\sqrt[\uparrow]{u}↑u​-1]表示u↑\sqrt[\uparrow]{u}↑u​个簇数组,每个数组元素的结构为递归子树结构 vEB(u↓\sqrt[\downarrow]{u}↓u​)
    6. 任意全域值 x,0<=x<u;
      1. high(x)=x/u↓\sqrt[\downarrow]{u}↓u​ ;表示 x 所在的簇号
      2. low(x)=x mod u↓\sqrt[\downarrow]{u}↓u​; 表示 x 在簇号中的位置
      3. index(x,y) = x u↓\sqrt[\downarrow]{u}↓u​ + y; 根据簇号及簇号在的位置得到一个元素值
  2. 操作

    1. 插入(V 树 insert 插入 x 值)

      1. 如果 V 树是空的,则将 V.min = V.max = x;结束
      2. 如果 x<V.min,则将 x 与 V.min 交换,继续插入 x(值为旧的 V.min)
      3. 如果 V.u >2
        1. 找到 x 对应的簇 high(x),所在簇的位置 low(x),x 对应的子树即为 V.cluster[high(x)]
        2. 如果子树为空,则 V.cluster.min = V.cluster.max = x;V.summary 也要插入 high(x)
        3. 如果子树不为空,则递归插入到子树中。(summary 信息不用更新因为子树已经存在)
      4. 如果 x>V.max,则将 V.max = x;
    2. 是否存在(member)

      1. 先判断 V.min=x 或者 V.max=x,则返回 true
      2. 如果 V.u=2;则返回 false
      3. 否则递归查找子树 V.cluster[high(x)]中的位置 low(x)
    3. 后继(successor)

      1. 如果 V.u = 2;

        1. x=0 ,V.max = 1,则返回 1
        2. 否则返回 null
      2. 如果 x < V.min,则返回 V.min
      3. 找到 x 对应的子树 V.cluster[high(x)]及子树中的位置 low(x)
        1. x 小于子树的最大值,则直接在子树中查找
        2. 否则在 V.summary 中找出 x 对应的后续簇,在后续簇对应的子树中查找
    4. 前驱(predecessor)

      1. 如果 V.u = 2

        1. 如果 x=1,V.min=0,则返回 0
        2. 否则返回 null
      2. 如果 x > V.max,则返回 V.max
      3. 找到 x 对应的子树 V.cluster[high(x)]及子树中的位置 low(x)
        1. 如果 x 大于子树中的最小值,则在子树中找
        2. 否则在 V.summary 中找 x 对应的前驱簇,
          1. 如果前驱簇为 null 且 x>V.min,则返回 V.min
          2. 如果前驱簇不为 null,则直接在前驱簇对应的子树中查找最大值
    5. 删除(delete)

      1. 如果树只有一个元素,则直接将 V.min=V.max = null
      2. 如果树有两个元素,
        1. 如果被删除 x == 0 ,则 V.min = V.max = 1
        2. 否则 V.min = V.max = 0
      3. 树包含两个以上元素
        1. 如果 x = V.min,则将 V.min 改为 x 所在簇的最小值,x 也修改为此值
        2. V.cluster[high(x)]递归删除 x
        3. 如果 V.cluster[high(x)].min = null,则将 V.summary[high(x)]也要删除;如果 V.max = x,则要重新找到 V.cluster 中最大值,并赋给 V.max
        4. 如果 V.max = x,则要同时更新 V.max = V.cluster[high(x)].max
  3. 源代码

    1.https://gitee.com/beimuaihui/LayaAir/blob/my_introduction_to_algorithms/src/samples/algorith/C20VEBTree.ts

  4. 运行结果

    1.[运行结果]

  5. 参考

    1. https://www.geeksforgeeks.org/van-emde-boas-tree-set-1-basics-and-construction/?ref=lbp

算法导论 van Emde Boas 树相关推荐

  1. 算法导论-van Emde Boas树

    van Emde Boas树 van Emde Boas树中文名不知道,所以暂且叫它v树吧.v树是一种数据结构,和二叉树.红黑树类似.一种数据结构被创建出来,肯定有其特别的优点,v树的优点就是实现数据 ...

  2. 算法导论Van Emde Boas树

    #include<iostream> #include<math.h> #define NIL 9999 #define MAX 100 using namespace std ...

  3. 算法导论读书笔记(20)van Emde Boas树

    第五部分 高级数据结构 第20章 van Emde Boas树 van Emde Boas树支持优先队列操作以及一些其他操作,每个操作最坏情况运行时间为O(lglgn).而这种数据结构限制关键字必须为 ...

  4. 《算法导论3rd第二十章》van Emde Boas树

    前言 前面介绍的二叉堆,红黑树以及斐波那契堆,其重要的操作都要O(lgn).当特定条件下,能否够规避Ω(lglgn)下界的限制?在本章中,我们将看到:van Emde Boas树支持优先队列操作及一些 ...

  5. 【算法学习笔记】van Emde Boas树

    参考算法导论第20章 van Emde Boas树 文章目录 1. 基本方法 1.1 直接寻址 1.2 叠加的二叉树结构 `Superimposing a binary tree structure` ...

  6. Van emde boas树Java实现

    简介 VEB树的基础理论在算法导论第三版第20章有详细介绍,这里不再赘述. VEB树的优势 VEB树支持插入.删除.搜索.最大值.最小值.前驱.后继等操作. 这些操作的时间复杂度都是O(lglgu), ...

  7. van Emde Boas 树 数据结构说解

    van Emde Boas 树的定义 直观上看,vEB 树保存了一个有序的集合,并支持以 O(lglgn) 的时间复杂度在 vEB 树上进行最小最大值查询.单值存在性查询.单值前驱后继查询.单值插入维 ...

  8. 原型 van Emde Boas 树

    (对于一些简单的数据结构,我就不写在博客上了,然而这个van Emde Boas 树是真的有问题..) 首先,先介绍在本章中n与u的用法: n:集合中当前元素的个数: u:元素可能的取值范围: 同时, ...

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

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

最新文章

  1. 深入理解阻塞socket和非阻塞socket
  2. 中南大学计算机在线考试答案,中南大学计算机考试复习题
  3. P4768 [NOI2018] 归程(kruskal 重构树)
  4. 2021-2025年中国灯光调光开关行业市场供需与战略研究报告
  5. 5.VMware View 5.0安装与部署-安装view agent与模版
  6. linux连接苹果鼠标,Linux 5.13添加对苹果Magic Mouse 2和微软SAM的支持
  7. 《因果推理原理:基础与学习算法》第一章 因果模型和统计模型
  8. 第四讲 移动互联网接入技术
  9. 【C语言例程】输出101~200之间的素数(质数)
  10. 方程思想应用于化学方程式配平
  11. 将进酒服务器是哪个位置的,李白的《将进酒》是他什么时候写下的?又是在哪里写的呢?...
  12. 求职互联网技术岗应届生面试必备技巧分享
  13. unity3d + lua + 斗地主 系列 (1) 创建扑克对象
  14. 8.3 Convex combinations (凸组合)
  15. java版我的世界附魔指令_我的世界手机版附魔指令 怎么使用附魔指令大全
  16. Application.DoEvent使用
  17. 成功股权激励方案的特点
  18. 微信小程序之多规格选择
  19. 常用英语口语175句
  20. IP协议+以太网协议

热门文章

  1. 苹果入职信:你会热爱的工作
  2. 天天敲代码会使人变聪明嚒?
  3. CentOS 执行 source /etc/profile命令时,报错:-bash: #: 未找到命令
  4. 一种采用耐高压变压器油和超导金属导线的变压器
  5. 涨跌的例题用C语言编辑,仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案...
  6. 他是马化腾的偶像,拒绝过马云的应聘!如今劝年轻人躺平......
  7. ros配置安川gp88
  8. MindManager思维导图实战教程
  9. 微博热搜出了新的功能模块,看什么热搜你说了算
  10. 查询电脑手机出口公网IP地址(含IPv4和IPv6)