是否需要找到一组中位数的算法或数据结构?


14

我正在为我的课程《随机算法》读本书。在这本特定的书中,有一整章专门介绍了使用随机选择来查找数组的中值,从而导致了更有效的算法。现在,我想知道除理论上的改进外,该算法在计算机科学领域是否还有实际应用。是否需要找到数组中位数的算法或数据结构?


3
您可能需要看一下快速排序:通过选择中位数作为枢轴,可以避免出现最坏情况(最坏情况下运行时= O(n log n)而不是O(n ^ 2)),递归深度将是最小化(log2(n))。
hoffmale

1
@hoffmale:但这不需要您找到中位数。它要求您找到一个合理接近中位数的值。例如,找到不在顶部5%或底部5%内的枢轴可保证O(n log n)。
gnasher729

1
@ gnasher729:但这不会最小化递归深度。这两个属性都很重要,例如在资源有限的实时环境中。
hoffmale

顺便说一下,@ hoffmale通常以2为底的对数符号(特别是在计算机科学家中)是(lg(n))中的“ lg”。
通配符

@ gnasher729由于该主题是随机算法,因此(相当接近)可能正是这些算法正在执行的操作。
康拉德·鲁道夫

Answers:


17

除理论上的改进外,该算法在计算机科学领域是否有实际应用

该算法的应用很简单-只要想计算一组数据(换句话说就是数组)的中位数,就可以使用它。这些数据可能来自不同的领域:天文观测,社会科学,生物学数据等。

但是,值得一提的是何时偏爱中位数而不是均值(或众数)。基本上,在描述性统计中,当我们的数据是完全正态分布时,均值,众数和中位数相等,即它们是重合的。另一方面,当我们的数据偏斜时,即我们的数据的频率分布偏向(左/右)时,均值无法提供最佳的中心位置,因为偏斜将其从典型值向左或向右拖拉,而中位数不受偏斜数据的强烈影响,因此最好保持该位置指向典型值。因此,当您处理偏斜的数据时,计算中位数可能更可取。

同样,机器学习是大量使用统计方法的地方,例如位数聚类k


谢谢!那是非常有帮助的!还有其他可能需要找到中位数的算法或技术吗?
莎朗·杜吉拉拉

5
尽管这是足够正确的(+1),但在应用统计中,数据经常会在找到中位数之前进行排序,因为在许多甚至大多数需要中位数的情况下,至少其他一些阶数也是如此统计。
John Coleman

1
有趣。我听说过均值聚类,但没有听说过k-中位数聚类。kk
1998年

13

中值滤波在减少图像处理中某些类型的噪声方面很常见。尤其是盐和胡椒的声音。它通过在图像的每个局部邻域中选取每个颜色通道中的中值并将其替换来工作。这些社区的大小可能有所不同。常见的滤镜大小(邻域)为3x3和5x5像素。


1
中值不仅适用于图像中的噪声,而且几乎适用于所有传感器读数中的噪声,其中相机只是传感器的一种。学校教科书显示了不错的正弦波和方波形状。在现实世界中,像这样的干净数据几乎永远不会发生。如果是这样,几乎总是这样,因为其他人会在您掌握数据之前先对数据进行平滑处理。例如,需要选择“正确”值的更典型的传感器读取数据:(1、3、5、65、68、70、75、80、82、85、540、555)。我对数据进行了排序,使其更加明显。
Dunk

1
是的,你是对的。但是,如果我们在信号处理中写下所有可以使用的小东西,那将是一个非常漫长而无聊的答案。
mathreadler '17

1
图像处理的中位数也可以用于包含5张左右照片序列的每个像素,这是一种消除时间噪声(又名游客挡住视线)的方法
Hagen von Eitzen

@HagenvonEitzen你是对的!实际上,几天前我在想类似的事情。周围有很多游客...
mathreadler '17

10

计算中位数在随机算法中尤其重要。

341±ϵA34kA(1±ϵ)kA(1ϵ)A(1+ϵ)k

2nn


5

中位数的中位数有一些应用程序:

  • O(nlogn)
  • O(n)O(n2)

1
实际上,使用中位数来选择快速排序的枢轴似乎很可能会减慢算法的运行速度,因为它完全杀死了缓存局部性,这是对快速排序的快速性的主要贡献。但是您对最坏情况的复杂性的评论当然是正确的。
wchargin '17

@wchargin您建议什么替代方法?据我所知,没有实际的快速排序实现使用对缓存敏感的数据透视表,因为这样做会在最糟糕的最坏情况下运行时进行交易。开创性的“工程设计排序功能”文章讨论了替代方案,但这些替代方案都不是缓存感知的(尽管如此,其性能优于单纯的枢轴选择)。
康拉德·鲁道夫

1
@wchargin…回答我自己的问题:Java 7切换到了我不知道的新双枢轴过程。这很有趣,并且可能会使中值枢轴算法过时。
康拉德·鲁道夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.