查找 LinkedList 中数字的中位数

发布于 2024-07-22 05:32:43 字数 77 浏览 10 评论 0原文

如何找到 Java 中存储为 LinkedList 的数字列表的中位数? 我不明白维基百科提到的选择算法。 如果你能解释这一点,就加分。

How do you find the median of a list of numbers stored as a LinkedList in Java? I don't understand the Selection Algorithm that Wikipedia refers to. Bonus points if you can explain that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

故乡的云 2024-07-29 05:32:44

最好的算法是 QuickSelect

阅读文章并尝试理解快速排序——概念是相似的。

The best algorithm is QuickSelect

Read the article and try to understand QuickSort - The concept is similar.

故人爱我别走 2024-07-29 05:32:44

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

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

  • 基于 并行排序,其初始阶段将数据放入多个“桶”中,然后再对每个桶进行排序存储桶,但是(在中位数的情况下)您实际上只对中间的“存储桶”进行排序,因为
  • 基于分而治之的排序算法(例如快速排序)的选择,两侧存储桶中项目的精确顺序是无关的,但同样,算法实际上不会对超出所需范围的子列表进行排序。

If you want a quick-to-program way, sort the list and choose the middle element (or mean of the two middle elements).

More efficient selection algorithms essentially try to avoid sorting bits of the list that you don't actually need to sort to find the nth element for your given n. (The JDK doesn't currently provide such an algorithm out of the box.) Update: just to expand on my earlier post, examples of more efficient methods would include:

  • basing selection on a parallel sort whose initial phase puts the data into a number of 'buckets' before sorting each of the buckets, but then (in the case of the median) where you only actually sort the middle 'bucket', since the precise order of items in buckets either side is irrelevant
  • basing selection on a divide-and-conquer sort algorithm such as Quicksort, but again where the algorithm doesn't actually sort sublists that are outside the required range.
兰花执着 2024-07-29 05:32:44

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

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

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

无论如何,请查看选择算法上的维基百科条目,这应该可以让您对所有可用的方法有一个很好的总结。

You have basically two major options:

  1. Easy and quick method - sort the list in O(nlogn). Since the median is defined as the value which half the values are larger than it, and half are smaller, just take the n/2th value - that's the median.

  2. If this is a performance crucial task, you can apply various selection algorithms which can give you O(n) in good cases (but still cannot guarantee linearity in worst-cases).

In any case, check out the wikipedia entry on Selection Algorithms, that should give you a good round-up on all the available methods.

(り薆情海 2024-07-29 05:32:44

中位数是排序列表中间的数字。 (对于条目数量为奇数的列表很容易,对于条目数量为偶数的列表,它可以是两个“中间数字”之间的任意数字)

所以对列表进行排序,并找出中间数字是什么) 是。

The median is the number in the middle of the sorted list. (Easy for a list with an uneven number of entries, for a list with an even number of entries it can be any number between the two "middle numbers" both included)

So sort the list, and figure out what the middle number(s) are.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文