寻找第k大的元素Java,java – 支持快速第k个最大元素查找的队列数据结构
我遇到一个需要支持快速第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个最大元素查找的队列数据结构相关推荐
- 鸿蒙系统电视k歌,华为电视怎么k歌?看完两分钟快速开启K歌模式
原标题:华为电视怎么k歌?看完两分钟快速开启K歌模式 利用智能电视在家k歌,是一个很不错的娱乐活动.那么,家里的华为怎么电视k歌?需要准备什么设备?下面就为大家分享一份详细教程,看完 两分钟快速开启K ...
- java替换数组中的元素_如何使用Java 8流快速替换列表中的元素
java替换数组中的元素 假设您有一个项目清单: List<String> books = Arrays.asList("The Holy Cow: The Bovine Tes ...
- 如何使用Java 8流快速替换列表中的元素
假设您有一个项目清单: List<String> books = Arrays.asList("The Holy Cow: The Bovine Testament", ...
- java查找第k大的数字_[经典算法题]寻找数组中第K大的数的方法总结
今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...
- 寻找第K大元素的八大算法、源码及拓展
寻找第K大元素的八大算法.源码及拓展 http://www.cnblogs.com/bethunebtj/p/4861378.html 一.问题描述 所谓"第(前)k大数问题"指的 ...
- [转] 寻找第k大的数
原文地址:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个 ...
- 寻找第(前)k大的数的方法总结
问题描述 给定一个包含n个数的乱序数组,寻找其中第k大的数. 方法总结 解法1:先将乱序数组按照从大到小排序,然后取出第k大的数.时间复杂度为O(n*logn). 解法2:利用选择排序,k次选择后即可 ...
- c++求区间第k大数_寻找第K大的数的方法总结
今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以 ...
- 寻找第k大的数的方法总结
转自:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的 ...
最新文章
- [每天进步一点 -- 流水账]第1周
- Link-Cut Tree动态树模板
- dubbo中log4j检查(开发环境中建议设置为false)
- Resharper4.5:增强你的.net开发
- OpenGL入门-3-绘制多边形
- linux mint 主题切换,详解如何在 Linux Mint 中更换主题
- js 异步执行_js执行机制:同步与异步(宏任务与微任务)
- 数商云医药行业SCM供应链管理系统应用场景、运用模式
- MySql常用语句汇总
- 前馈控制与反馈控制对比
- 怎样更改itunes备份位置_什么是iTunes备份文件?
- gazebo中计算理想相机模型的fx fy
- FinTech头条丨神州信息分布式核心助力广西北部湾银行科技惠民,打造“广西自己的银行”!
- 获取svg内text文本元素的高度、宽度及坐标等信息
- 计算机数控入门,数控车床入门教程 如何进入CNC加工过程
- 卡马克快速平方根倒数
- 用Python读取照片拍摄的详细信息(拍摄时间、地址等)
- BIT2022年春软件需求工程和UML建模 - 智慧校园数据管理系统 - Week_1
- 如何进阶TypeScript功底?一文带你理解TS中各种高级语法
- Python脚本—批量图片格式转换