我遇到一个需要支持快速第k个最大元素查找的队列数据结构的问题。

此数据结构的要求如下:

>队列中的元素不一定是整数,但它们必须彼此可比较,即当我们比较两个元素(它们也可以相等时),我们可以知道哪一个更大。

>数据结构必须支持enqueue(在尾部添加元素)和dequeue(删除头上的元素)。

>它可以快速找到队列中第k个最大的元素,注意k不是常量。

>您可以假设操作入队,出队和第k个最大的元素查找都以相同的频率出现。

我的想法是使用一个修改的平衡二叉搜索树。树与普通平衡二叉搜索树相同,除了每个nodei用另一个字段ni进行扩充,ni表示包含在具有根节点的子树中的节点数。上述操作支持如下:

为了简单起见,假设所有元素是不同的。

入队(x):x首先插入到树中,假设对应的节点是nodet,我们将对(x,指向nodet的指针)添加到队列中。

出队:假设(e1,node1)是头部的元素,node1是指向与e1对应的树中的指针。我们从树中删除node1,并从队列中删除(e1,node1)。

第K个最大元素发现:假设根节点是noderoot,它的两个孩子是nodeleft和noderight(假设它们都存在),我们将K与nroot进行比较,可能发生三种情况:

>如果K < nleft我们找到nroot的左子树中的第K个最大的元素;

>如果K> nroot-nright,我们在nroot的右子树中找到(K-nroot nright)最大的元素;

>否则nroot是我们想要的节点。

所有三个操作的时间复杂度为O(logN),其中N是队列中当前的元素数。

如何加快上述操作?有什么数据结构和如何?

寻找第k大的元素Java,java – 支持快速第k个最大元素查找的队列数据结构相关推荐

  1. 鸿蒙系统电视k歌,华为电视怎么k歌?看完两分钟快速开启K歌模式

    原标题:华为电视怎么k歌?看完两分钟快速开启K歌模式 利用智能电视在家k歌,是一个很不错的娱乐活动.那么,家里的华为怎么电视k歌?需要准备什么设备?下面就为大家分享一份详细教程,看完 两分钟快速开启K ...

  2. java替换数组中的元素_如何使用Java 8流快速替换列表中的元素

    java替换数组中的元素 假设您有一个项目清单: List<String> books = Arrays.asList("The Holy Cow: The Bovine Tes ...

  3. 如何使用Java 8流快速替换列表中的元素

    假设您有一个项目清单: List<String> books = Arrays.asList("The Holy Cow: The Bovine Testament", ...

  4. java查找第k大的数字_[经典算法题]寻找数组中第K大的数的方法总结

    今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...

  5. 寻找第K大元素的八大算法、源码及拓展

    寻找第K大元素的八大算法.源码及拓展 http://www.cnblogs.com/bethunebtj/p/4861378.html 一.问题描述 所谓"第(前)k大数问题"指的 ...

  6. [转] 寻找第k大的数

    原文地址:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个 ...

  7. 寻找第(前)k大的数的方法总结

    问题描述 给定一个包含n个数的乱序数组,寻找其中第k大的数. 方法总结 解法1:先将乱序数组按照从大到小排序,然后取出第k大的数.时间复杂度为O(n*logn). 解法2:利用选择排序,k次选择后即可 ...

  8. c++求区间第k大数_寻找第K大的数的方法总结

    今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...

  9. 寻找第k大的数的方法总结

    转自:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的 ...

最新文章

  1. [每天进步一点 -- 流水账]第1周
  2. Link-Cut Tree动态树模板
  3. dubbo中log4j检查(开发环境中建议设置为false)
  4. Resharper4.5:增强你的.net开发
  5. OpenGL入门-3-绘制多边形
  6. linux mint 主题切换,详解如何在 Linux Mint 中更换主题
  7. js 异步执行_js执行机制:同步与异步(宏任务与微任务)
  8. 数商云医药行业SCM供应链管理系统应用场景、运用模式
  9. MySql常用语句汇总
  10. 前馈控制与反馈控制对比
  11. 怎样更改itunes备份位置_什么是iTunes备份文件?
  12. gazebo中计算理想相机模型的fx fy
  13. FinTech头条丨神州信息分布式核心助力广西北部湾银行科技惠民,打造“广西自己的银行”!
  14. 获取svg内text文本元素的高度、宽度及坐标等信息
  15. 计算机数控入门,数控车床入门教程 如何进入CNC加工过程
  16. 卡马克快速平方根倒数
  17. 用Python读取照片拍摄的详细信息(拍摄时间、地址等)
  18. BIT2022年春软件需求工程和UML建模 - 智慧校园数据管理系统 - Week_1
  19. 如何进阶TypeScript功底?一文带你理解TS中各种高级语法
  20. Python脚本—批量图片格式转换

热门文章

  1. (飞鸽传书绿色版)网站
  2. 飞秋下载2010正式版_飞秋下载
  3. 《极品飞车12》官方网站公布发售日
  4. EmEditor Professional 7.02 RC 3
  5. 12月12日习题答案大剖析!再接再厉
  6. jmeter 计数器_JMeter函数
  7. 深入Java中文问题及最优解决方法--上(转)
  8. 生信分析和美图资源推荐!!!
  9. 文章用图的修改和排版(2)
  10. 纯干!那些可能被你忽略的Mac系统自带工具