- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
CLRS 第 3 版第 9.3 节“最坏情况线性时间的选择”讨论了“选择”算法(由于 Blum、Floyd、Pratt、Rivest 和 Tarjan,有时称为 BFPRT 算法)用于查找 a 的中值在最坏的情况下在 O(n) 时间内列出。当我试图在白板上运行示例时,我有点困惑。我知道每次调用“选择”时都可以消除一定数量的元素(我读过 30% 被消除,而 70% 需要再次检查),我感到困惑的是数组的哪一部分可以消除,即如果数组被可视化为一个高度为 5,宽度为 n/5 的矩阵,那么被消除的元素位于哪个或哪些象限?我最初认为它是两个对角相邻的象限,但现在我认为它只是一个象限,具体取决于中位数的中位数是多少(请参阅步骤 5、6 和 7 here)。
所以我去维基百科看看有没有比CLRS分析更少的快速解释(为了在我跳回CLRS分析之前理解算法)。我来了this ,特别是“最后,选择“中位数的中位数”作为枢轴。”从维基百科的描述来看,“选择”并没有找到真正的中位数,而是找到了一个足够中位数的元素,以便为快速排序选择一个枢轴。
那么“选择”在真实中位数方面做了什么,它是如何做到的?通过所有这些想到的短语是“部分层次结构”,据我所知,这是“选择”起作用的原因,但是根据这个部分层次结构,您可以根据什么逻辑从列表中消除元素作为中值?
最佳答案
它找到绝对中位数。
正如您所说,“选择”并未找到真正的中值,而是找到一个足够中值的元素,以便为快速排序选择一个基准。特别是它的中值足够大,它是保证在每次迭代中至少丢弃 30% 的数据集。不幸的是,这也是一项昂贵的操作。
关键思想是每5个元素中位数小于等于3个中位数的中位数小于等于3个。因此,对于 5 个一组的一半,每 5 个元素中有 3 个小于或等于 3,因此至少有 30% 的集合小于或等于它。所以它在数据集中最大的 70%。
同样是在最小的70%的数据集中。
这保证您可以避免 quickselect 的潜在陷阱,即选择具有极值的枢轴点。
如果您希望将效率和最坏情况结合起来,您可以将其与快速选择结合起来。例如 4 轮快速选择,然后是 1 轮快速选择,然后是 4 轮快速选择,等等。昂贵的 BFPRT 轮保证 O(n)
,而平均而言快速选择会很快。通过推迟第一轮 BFPRT 直到完成几轮快速选择,您可以使额外的运行时间仅比快速选择平均多几个百分点。 (最坏的情况成本会增加很多,但我们预计不会遇到这种情况。)
关于algorithm - 中位数选择算法 - 它找到绝对中位数,还是接近绝对中位数的 "median of medians"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9004284/
基本上在 excel 中,我想要一个表格,就像下面右边给出的那个(我的数据规模比给出的例子大很多),它有每个主题的中位数,每个条件(例如 TADA、TADP、TPDA , TPDP)。理想情况下,我会
我有一个大小为5000 * 5000的矩阵,其90%的值为0。是否有现成的解决方案可用来计算排除“0”后该矩阵的均值,中位数? 一种粗制解决方案是将所有0更改为NA并使用 median(x, na.
这个问题已经有答案了: Mean per group in a data.frame [duplicate] (8 个回答) 已关闭 9 年前。 我有一个数据框,详细记录了客户花了多少钱,如下所示:
这是我的代码,用于打印所有职业的平均值和中位数。 occupation_lst = ['ALL OCCUPATIONS', 'MANAGEMENT', 'Chief executives', 'Gen
我的 csv 文件中有一个数据集,如下所示: teacher student student grade Jon marin
如何在 C 中不使用数组的情况下找到一组数字的平均值、中位数?问题不是找到平均值或中位数的方法,而是如果不允许使用数组,如何存储一组数字并对它们执行一些操作? 最佳答案 一个有趣的问题。 关键是找到一
我正在使用 SQL Server 2008 如果我有这样的表: Code Value ----------------------- 4 240 4 299 4 21
我正在尝试获取表中一组值的平均值、中位数、众数和范围。我能够得到平均值,但中位数、范围和众数我得到了错误的值。 下面是我为上述概念尝试过的代码。 Select CDS.[Commodity_S
我正在尝试获取表中一组值的平均值、中位数、众数和范围。我能够得到平均值,但中位数、范围和众数我得到了错误的值。 下面是我为上述概念尝试过的代码。 Select CDS.[Commodity_S
我需要从输入文件中查找平均值、中位数、众数和范围。 [input file has the numbers{60,75,53,49,92,71}] 我不知道如何打印范围内的计算结果或计算众数。 这很糟
这个问题已经有答案了: Division of integers in Java [duplicate] (7 个回答) 已关闭 7 年前。 public static double calcMed
当我输入 1,2,3 时我的中位数计算有问题我的中位数是 = 44 我不知道为什么 double wynik = 0; string x1 = textBox1.Text; string[] tab
我的中位数 3 实现在这里运行不正常。我必须为媒体随机选择 3 个数字,这是我的代码,请帮助我。 #include"stdafx.h" #include #include using namespa
我有一个文件,其中有如下几秒钟的数字: 0.01033 0.003797 0.02648 0.007583 0.007491 0.028038 0.012794 0.00524 0.019655 0.
是否有任何函数(作为数学库的一部分)可以计算 mean 、中位数、众数和范围来自一组数字。 最佳答案 是的,似乎确实有第三个库(Java Math 中没有)。出现的两个是: http://opsres
我目前正在尝试从具有两个条件的一系列数据中提取中位数。本质上相当于下面的 AVERAGEIFS(),我工作得很好。 AVERAGEIFS(): =AVERAGEIFS(Analysis!$F:$F,A
我有一个 pandas 数据框,看起来像这样: 给定行中的每个值要么是相同的数字,要么是 NaN。我想计算数据框中所有两列组合的平均值、中位数和获取计数,其中两列都不是 NaN。 例如,上述数据帧的结
我有以下数据: [4.1, 4.1, 4.1, 4.2, 4.3, 4.3, 4.4, 4.5, 4.6, 4.6, 4.8, 4.9, 5.1, 5.1, 5.2, 5.2, 5.3, 5.3, 5
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
一组整数作为输入。您必须返回该集合的子集,以便该子集的均值 - 中位数最大。 示例 1 输入 {1,2,3,4} 输出 {1,2,4} 例子2 输入 {1,2,2,3,3} 输出 {2,2,3} 最佳
我是一名优秀的程序员,十分优秀!