- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是一名 compsci 学生,我在分析与设计 II 课上遇到了以下问题:
The median of an unordered set is an element such that the number of elements less than the median is within one of the number of elements that are greater, assuming no ties.
(a) Write an algorithm thst find the median of 3 distincts values a, b, c.
(b) Determine the number of comparisons your algorithm does in the average case and in the worst case.
从我搜索和了解的一点点来看,这似乎叫做找到未排序数组的第 k 个元素,或者找到中位数的中位数?
但是,我们还没有学习快速排序,我能找到的似乎比这里要求我的要复杂得多。也就是说,我不完全确定我理解这个问题中给出的定义。另外,找到 3 个不同值 a、b、c 的中位数是否意味着找到一组大小为 3 的中位数?
我不一定要寻找答案。只是简单的解释或澄清。谢谢。
尝试 #1
(a) 按照 templatetypedef 的建议,我想出了这个朴素的算法来解决这个问题:
medianOf(int a, int b, int c)
if a < b
if a > c
return a
else //a > b
if a < c
return a
if b < c
if b > a
return b
else //b > c
if b < a
return b
if c < a
if c > b
return c
else //c > a
if c < b
return c
我知道这非常幼稚和丑陋,但我想不出更好的解决方案,而且它已经占用了我太多时间。
(b) 似乎最好的情况是 c < a < b 进行 2 次比较,最坏的情况是 a < c < b 进行 9 次比较?那么,平均值是 (2+9)/2,即 5 或 6 次比较?
还是我现在太天真了?
尝试 #2
(a) 好的,所以,按照 thang 的建议,我非常努力地将比较次数减少到 3。从数学上讲,我理解你的意思。检查a<b, b<c, a<c
就足够了并从中扣除其余状态,但我找不到对其进行编码的方法...这是我最好的尝试:
medianOf(int a, int b, int c)
if a < b 1
if c < a 1
return a //c < a < b
else // a < b && a < c
if b < c 1
return b //a < b < c
else
return c //a < c < b
else //a > b
if c > a 1
return a //c > a > b
else //a > b && a > c
if b > c 1
return b //a > b > c
else
return c //a > c > b
我看不出还有什么比这更好的了:
(b) 最佳情况:1 次比较。平均情况:5/2 = 2 到 3 次比较。最坏情况:5 次比较。
好点了吗?
最终解决方案
感谢thang,千辛万苦,终于搞定了。我最后的算法是正确的,但我的计数是错误的。
(b) 最佳情况:2 次比较。平均情况:2 次比较。最坏情况:3 次比较。
最佳答案
幸运的是,我认为你想多了。 :-) 这样想 - 你能实现这个功能吗?
int medianOf(int a, int b, int c) {
...
}
您不必担心找到任意集合的中位数。只需找到三个输入的中位数即可。
完成此操作后,查看您所做的比较,并考虑最佳情况、最坏情况和平均情况下的比较次数。您可以直接计算您进行了多少次比较,因为您的代码应该非常短。
您所考虑的中位数技术适用于更一般的情况,在这种情况下,您有任意数量的元素并希望取所有元素的中位数。它肯定比这更复杂,但这似乎不是你被要求做的。
希望这对您有所帮助!
关于algorithm - 无序集合的中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28593675/
基本上在 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} 最佳
我是一名优秀的程序员,十分优秀!