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

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(使用前将#替换为@)

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

  • Seaborn 线图使用中位数而不是均值

    我在用着seaborn lineplot 创建像这样的线图 代表平均值的线 由代表标准差的带包围 sns lineplot x trial y rvalues hue subject err style band ci sd data df
  • 3Leetcode求和算法

    我在使用 3sum 算法的以下输入时遇到问题 我是 得到 超过时间限制 我的算法对于这个输入来说太慢了吗 有什么建议如何改进吗 leetcode原题 给定一个由 n 个整数组成的数组 nums nums 中是否存在元素 a b c 使得 a
  • 在 n log n 时间内打乱链表的算法

    我正在尝试使用分治算法对链表进行洗牌 该算法以线性 n log n 时间和对数 log n 额外空间随机洗牌链表 我知道我可以进行类似于在简单的值数组中使用的 Knuth 洗牌 但我不确定如何通过分而治之来做到这一点 我的意思是 我实际上在
  • DAG 中两个节点之间的路径数

    我想找到 DAG 中两个节点之间的路径数 O V 2 和 O V E 是可以接受的 O V E 提醒我以某种方式使用 BFS 或 DFS 但我不知道如何使用 有人可以帮忙吗 对 DAG 进行拓扑排序 然后从目标向后扫描顶点到源 对于每个顶点
  • 使用 Sethi-Ullman 算法的表达式的代码生成器

    Give a AST tree http en wikipedia org wiki Abstract syntax tree 我想生成一种类似汇编的语言 我正在尝试使用塞西 乌尔曼 http en wikipedia org wiki S
  • 3 维装箱算法

    我面临着 3 维装箱问题 目前正在进行一些初步研究 了解哪些算法 启发式方法目前能产生最佳结果 由于问题是 NP 难问题 我不希望在每种情况下都能找到最佳解决方案 但我想知道 1 最好的精确求解器是什么 分支定界 我期望使用合理的计算资源可
  • 删除两个元素将数组平均分成三部分,时间复杂度为 O(n)

    我遇到一个问题 让您删除数组中的两个元素以使三部分的总和相等 Ex 1 2 4 3 5 2 1 After I drop the 4 and 5 it becomes 1 2 3 2 1 限制条件 1 Numbers are all int
  • 通过 DFS 查找图中的强连通分量

    我正在阅读有关 BFS 和 DFS 的图算法 当我分析通过DFS在图中查找强连通分量的算法时 我想到了一个疑问 为了找到强连通分量 书 Coremen 做了什么 首先它在图上运行 DFS 以获得顶点的完成时间 然后再次以完成时间的降序在图的
  • C++ STL 下一个排列与组合

    我知道我可以使用std next permutation在包含元素的某些容器上 1 2 3 这将生成该序列的 6 种排列 我想做的是给定一些设置 1 2 3 4 5 6 生成大小为 3 的所有可能的排列 因此对于这个例子 4 3 2 将是由
  • 比 O(n) 更好的范围交集算法?

    范围交集是一个简单但不平凡的问题 已经回答过两次了 查找数字范围交集 https stackoverflow com questions 224878 find number range intersection 比较日期范围 https
  • 边界椭圆约束于水平/垂直轴

    背景 我正在尝试将地形图裁剪成围绕多个风力涡轮机的最小尺寸椭圆 以最小化地图的尺寸 执行此地图裁剪的程序可以裁剪椭圆 但仅限轴沿 x 轴和 y 轴对齐的椭圆 我知道边界椭圆问题的算法 https stackoverflow com ques
  • 解释暴力算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 理解 Haskell 中的矩阵转置函数

    这个矩阵转置函数有效 但我试图理解它的逐步执行 但我不明白 transpose a gt a transpose transpose x map head x transpose map tail x with transpose 1 2
  • 在 Java 中从复杂的 HTML 表格中提取数据到二维数组

    如何转换 HTML 表格带有 colspan 和 rowspanJava中的二维数组 矩阵 我在 Python 和 jQuery 中找到了很好的解决方案 但在 Java 中却没有 只有通过 jsoup 的非常简单的表 XSLT 有一种很好的
  • 如何将一个数表示为4个素数之和?

    这是问题所在 四个素数的和 http acm uva es p v101 10168 html 指出 输入的每一行包含一个整数 N N 输入示例 24 36 46 示例输出 3 11 3 73 7 13 1311 11 17 7 我第一眼就
  • 二分图中最小顶点覆盖算法

    我正在尝试找出一种算法来查找二分图的最小顶点覆盖 我正在考虑一个解决方案 将问题减少到二分图中的最大匹配 众所周知 可以使用从 bip 创建的网络中的最大流量来找到它 图形 最大匹配 M 应确定最小匹配 顶点覆盖 C 但我无法处理选择顶点来
  • 如何使用 Trie 进行拼写检查

    我有一个根据单词词典构建的特里树 我想用它来进行拼写检查 并建议字典中最接近的匹配项 也许对于给定数量的编辑x 我想我会在目标单词和字典中的单词之间使用 levenshtein 距离 但是有没有一种聪明的方法可以遍历 trie 而不需要对每
  • 简化债务加权有向图的算法

    我一直在使用我编写的一个小Python脚本来管理室友之间的债务 它有效 但缺少一些功能 其中之一是简化不必要的复杂债务结构 例如 如果下面的加权有向图代表一些人 箭头代表他们之间的债务 爱丽丝欠鲍勃 20 美元 查理欠 5 美元 鲍勃欠查理
  • 硬币数量有限的最小硬币找零问题

    具体来说 问题是 给定面值数组coins 每个硬币的限制数组limits 和数量amount 返回minimum需要的硬币数量 以获得amount 或者如果不可能返回 null 另外填充数组change解决方案中使用的每个硬币的数量 这是我
  • 帮助我在 Python 中实现反向传播

    EDIT2 新的训练集 Inputs 0 0 0 0 0 0 1 0 0 0 2 0 0 0 3 0 0 0 4 0 1 0 0 0 1 0 1 0 1 0 2 0 1 0 3 0 1 0 4 0 2 0 0 0 2 0 1 0 2 0 2

随机推荐

  • 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 大元素也可以