查找链接列表中的数字中位数

时间:2009-05-17 19:18:10

标签: java linked-list median

如何在Java中找到存储为LinkedList的数字列表的中位数?我不明白维基百科所指的选择算法。如果你能解释一下,可以获得奖励积分。

4 个答案:

答案 0 :(得分:3)

最佳算法是QuickSelect

阅读文章并尝试了解QuickSort - 概念类似。

答案 1 :(得分:2)

如果您想要快速编程方式,请对列表进行排序并选择中间元素(或两个中间元素的平均值)。

更高效的选择算法本质上是试图避免对列表中的位进行排序,而这些位实际上并不需要排序以找到给定 n n 元素。 (JDK目前​​不提供开箱即用的算法。)更新:为了扩展我之前的帖子,更有效的方法示例包括:

  • 基于parallel sort的选择,其初始阶段在排序每个桶之前将数据放入多个“桶”中,但随后(在中位数的情况下)您只实际排序中间'桶',因为任何一方的桶中物品的精确顺序都是无关紧要的
  • 基于Quicksort等分而治之的排序算法进行选择,但同样算法实际上并未对超出所需范围的子列表进行排序。

答案 2 :(得分:2)

您基本上有两个主要选择:

  1. 简单快捷的方法 - 在O(nlogn)中对列表进行排序。由于中位数被定义为值的一半大于它的值,而一半的值更小,因此只需取n/2个值 - 即中位值。

  2. 如果这是一项性能至关重要的任务,您可以应用各种选择算法,这些算法可以在良好的情况下为您提供O(n)(但在最坏的情况下仍然无法保证线性)。

  3. 在任何情况下,请查看Selection Algorithms上的维基百科条目,该条目应该会为您提供有关所有可用方法的精彩汇总。

答案 3 :(得分:-1)

中位数是排序列表中间的数字。 (对于具有不均匀条目数的列表很容易,对于具有偶数条目的列表,它可以是包括两个“中间数字”之间的任何数字)

然后对列表进行排序,找出中间数字是什么。