如何使用堆在线性时间内找到数字的中位数?

2024-02-26

维基百科 http://en.wikipedia.org/wiki/Heap_(data_structure)#Heap_applications says:

选择算法:找到最小值, 最大值,最小值和最大值,median, 或者 甚至第 k 大元素也可以是 使用堆在线性时间内完成。

它只说可以做到,而不是如何做到。

您能给我一些关于如何使用堆来完成此操作的开始吗?


您可以使用最小-最大-中值堆在恒定时间内查找最小值、最大值和中值(并花费线性时间来构建堆)。您可以使用顺序统计树来查找第 k 个最小/最大值。这两种数据结构都在这篇关于最小-最大堆的论文 [PDF] http://cg.scs.carleton.ca/%7Emorin/teaching/5408/refs/minmax.pdf。最小-最大堆是在最小堆和最大堆之间交替的二元堆。

来自论文:

最小-最大-中值堆是具有以下属性的二叉树:

  1. 所有元素的中位数位于根

  2. 根的左子树是大小为上限[((n-1)/2)]的最小-最大堆Hl,包含小于或等于中位数的元素。右子树是大小为 Floor[((n-1)/2)] 的最大最小堆 Hr,仅包含大于或等于中位数的元素。

论文接着解释了如何构建这样的堆。

更彻底地阅读本文后,似乎构建最小-最大-中值堆需要您首先找到中位数(FTA:“使用任何一种已知的线性时间算法查找所有 n 个元素的中值”)。也就是说,一旦构建了堆,您只需保持左侧的最小-最大堆和右侧的最大-最小堆之间的平衡即可维持中位数。 DeleteMedian 将根替换为最大-最小堆的最小值或最小-最大堆的最大值(以保持平衡的为准)。

因此,如果您计划使用最小-最大-中值堆来查找固定数据集的中值,那么您就可以了,但是如果您在变化的数据集上使用它,则这是可能的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用堆在线性时间内找到数字的中位数? 的相关文章

  • 在 Access 2007 中使用 Group By 计算中位数的最佳方法

    我有一个表 其中包含一本书 然后包含该书的多个价格 这是一个高度简化的示例 ID BOOK PRICE 1 BOOK1 10 2 BOOK1 15 3 BOOK1 12 4 BOOK2 8 5 BOOK2 2 我很容易计算平均值 但是一定有
  • iOS心率检测算法

    我正在尝试在我正在开发的应用程序中实现心跳记录功能 首选方法是使用 iPhone 的摄像头 在灯亮的情况下 让用户将手指放在镜头上 然后检测视频源中与用户心脏相对应的波动 我通过以下堆栈溢出问题找到了一个非常好的起点here https s
  • 如何验证无锁算法?

    从理论上讲 至少应该可以对无锁算法进行暴力验证 只有这么多的函数调用组合 是否有任何工具或正式推理过程可以实际证明无锁算法是正确的 理想情况下它还应该能够检查竞争条件和 ABA 问题 注意 如果你知道一种方法来证明一点 例如 只证明它不受
  • Python:for 循环 - for i in range(0,len(list) 与 for i in list

    这是一个非常简单的Python 力学问题 为什么我不能只说 for i in range original list 而不是 for i in range 0 len original list 人们通常使用范围而不是前者吗 谢谢 If I
  • 基数首先排序最重要的还是最不重要的,哪个更快?

    我一直在研究基数排序实现 到目前为止粘贴在下面的代码 代码是用 Java 编写的 但在 C C 中应该也能正常工作 正如您从实现中看到的 我首先执行最高有效位 即整数的第 31 位 这似乎更快 因为一旦子组完成 就不再需要迭代 例如 打个比
  • 地图应用的聚类算法

    我正在研究地图上的聚类点 纬度 经度 对于快速且可扩展的合适算法有什么建议吗 更具体地说 我有一系列纬度 经度坐标和一个地图视口 我正在尝试将靠近的点聚集在一起以消除混乱 我已经有了解决问题的方法 see here http bouldr
  • 如何返回 Solidity 中的结构数组?

    我正在为以太坊智能合约设计一个解决方案bidding 用例包括保留名称 例如 myName 并分配给一个地址 然后 人们可以竞标该名称 在本例中为 myName 可以有多个名称发生多次此类出价 struct Bid address bidO
  • StackOverflowError 计算 BigInteger 的阶乘?

    我正在尝试编写一个Java程序来计算大数的阶乘 它似乎BigInteger无法容纳这么大的数量 下面是我编写的 简单的 代码 public static BigInteger getFactorial BigInteger num if n
  • 用于计算三角函数、对数或类似函数的算法。仅限加减法

    我正在修复 Ascota 170 古董机械可编程计算机 它已经开始工作了 现在我正在寻找一种算法来展示其功能 例如计算三角或对数表 或类似的东西 不幸的是 从数学运算来看 计算机只能进行整数的加减法 从 1E12到1E12的55个寄存器 甚
  • 更合适地说插入未排序动态数组的摊销 O(1) 与 O(n) ?

    这属于 stackoverflow com help on topic 中的 软件算法 在本例中 是一种将项目添加到动态未排序数组的软件算法 This is chart we made in class about the runtimes
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • 有效地合并两个数组 - 一个已排序,另一个未排序

    我正在解决一个问题 该问题有一个由 n 个元素组成的排序数组 后跟一个未排序的长度数组 O logn O 平方 n 如何最有效地对整个列表进行排序 在上述两种情况下我应该使用哪种排序 由于将单个元素插入数组并保持其排序是O n 你不可能变得
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • Python 旅行商贪婪算法 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 因此 我为旅行推销员问题创建了一种排序 并按 x 坐标和 y 坐标进行排序 我正在尝试实施贪婪搜索 但无法做到 此外 每
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进

随机推荐

  • Internet Explorer 中的 HTML5 元素:运行时插入

    我在 Internet Explorer 7 及更高版本中使用 HTML5 元素时遇到问题 未测试 IE6 我知道默认情况下 如果不使用 Javascript shiv IE 会拒绝识别常见的 HTML5 元素 例如 文章 或 标题 我使用
  • 如何在 Node.js 中追加到换行符

    我正在尝试使用 Node js 将数据附加到日志文件 并且工作正常 但它不会进入下一行 n似乎不适用于我下面的功能 有什么建议么 function processInput text fs open H log txt a 666 func
  • rethinkdb 带有过滤器和 getNearest 命令

    如何对其他命令 例如过滤器命令 的结果执行 getNearest 查询 var point r point 122 422876 37 777128 r db test table users filter tags tag getNear
  • 如何强制 Grails 仅使用一种语言?

    我想让我的 Grails 应用程序仅支持一种语言 我可以在某处定义该语言 完全忽略客户端的标头或 lang 参数 我有什么办法可以这样做吗 谢谢 定义一个LocaleResolver豆子在你的config spring resources
  • 我可以将 MVC 2 DataAnnotation 属性添加到现有属性吗?

    我使用生成的类作为模型 并且希望将 DataAnnotation 属性添加到其某些属性 由于它是生成的代码 我不想直接添加注释 还有其他方法可以将它们附加到财产上吗 我考虑过使模型成为一个接口 并使用分部类来获取生成的类来订阅它 假设可行的
  • iOS 5 SDK 以不同方式对待 UIView

    我的应用程序曾经在 xCode 4 0 2 中完美编译 但现在不再使用新 SDK 在 xCode 4 2 中正确编译 我的模态视图的工作方式非常不同 某些状态未被检测到 或者其他解雇不起作用 例如 它可以用来消除 2 个堆叠的模态视图 if
  • React Native:用选项卡动画缩小标题

    Goal 我试图创建一个带有动画收缩标题的视图 其中包含带有滚动内容的选项卡的选项卡视图 参见图片 Setup 我正在使用带有 TabNavigator 的反应导航 header 是一个具有固定高度的组件 当前位于 TabNavigator
  • 使用 googletest 测试受保护成员

    谷歌测试时我对继承感到困惑 我有一个class A具有protected属性 如果我想访问那些我必须扩展该类 但同时我也需要扩展public testing Test唯一的目的是gtest 这个问题最优雅的解决方案是什么 我也在努力避免 d
  • 错误:1210:执行准备好的语句的参数数量不正确

    我正在尝试使用 Python 将数据插入 MySQL 出现这个错误的原因是什么 编程错误 1210 执行的参数数量不正确 准备好的声明 我的Python代码 connection mysql connector connect host l
  • UISearchController 搜索栏在第一次单击时消失

    我在 TableView 中实现了 UISearchController 由导航控制器推动 首先我的问题是 每当我单击搜索栏时 它就会消失 当我输入一些文本时它起作用 但它保持完全空白 然后我设法使用以下代码半解决了该问题 void sea
  • 对 ASP.NET Core 中缺少必需属性的响应

    给定以下控制器 using System ComponentModel DataAnnotations using Microsoft AspNetCore Mvc namespace WebApplication1 Controllers
  • Scala 中未绑定的可比较排序

    我对 Scala 中的排序有点熟悉Ordering的 但是我想对 Java 中定义的一些对象进行排序 他们是Comparable not Comparable T and final final class Term implements
  • Slug 大小对于 Heroku 上的 Flask 应用程序来说太大

    我正在部署一个非常简单的烧瓶应用程序 带有面部识别模型 我只是将 Flask 应用程序代码和模型权重推送到 Heroku 我的 slug 大小仍然是 556M 超过了 500M 的限制 我在requirements txt 中有最低要求 这
  • 为什么从返回 int32_t 的函数返回 0x80000000 不会导致警告?

    考虑 int32 t f return 0x80000000 为什么这不会导致编译器警告 至少在 GCC 上 0x80000000 超出范围int32 t INT32 MAX is 0x7fffffff 我相信这应该会导致隐式转换 这是正确
  • 在 AWS Lambda 函数中使用 Django ORM

    我有一个现有的 Django 应用程序数据存储在 Postgres RDS 下 现在我想通过 lambda AWS 函数和 Django 风格的 ORM 查询 更新数据 我知道理论上这是可能的 如果 使用 lambda 函数打包整个 Dja
  • 如何进行水平视差滚动

    我正在使用最新版本的 Bootstrap JQuery 和 Skrollr 我想要一个静态背景和几个在您通过视差滚动滚动时出现的场景 我可以在您滚动时制作场景 但我正在寻找一种方法 让您看起来不会向下移动页面 我正在寻找像这样的图像的场景
  • 使用 BigQuery 查询地理空间数据

    您好 我想获取基于 GPS 坐标的公共场所 餐厅 酒店 电影院等 邻居列表 BigQuery 可以做到这一点吗 如果您将经纬度或 GPS 坐标作为列 那么您绝对可以使用坐标上的 WHERE 比较从 BigQuery 中获取矩形区域 然后在选
  • 在 Windows 10 中找不到 tools.jar React Native Android

    伙计们 我只是尝试在我的笔记本电脑上安装 React Native 我已遵循所有设置说明 但仍然收到这些错误 What went wrong Execution failed for task app compileDebugJavaWit
  • 使用训练有素的 Spark ML 模型提供实时预测[重复]

    这个问题在这里已经有答案了 我们目前正在测试一个基于 Spark 在 Python 中实现 LDA 的预测引擎 https spark apache org docs 2 2 0 ml clustering html latent diri
  • 如何使用堆在线性时间内找到数字的中位数?

    维基百科 http en wikipedia org wiki Heap data structure Heap applications says 选择算法 找到最小值 最大值 最小值和最大值 median 或者 甚至第 k 大元素也可以