如何找到在Java中存储为LinkedList的数字列表的中值?我不明白维基百科引用的选择算法。奖励积分,如果你能解释这一点。查找LinkedList中数字的中位数
2
A
回答
3
最好的算法是QuickSelect
阅读这篇文章,并试图了解快速排序 - 这个概念是相似的。
+0
但是,这个算法仍然是*链接列表中最快的?对于小N来说,一个天真的方法可能会更好。 – 2009-05-17 22:44:06
2
如果您想要快速编程的方式,请对列表进行排序并选择中间元素(或两个中间元素的平均值)。
更高效的选择算法本质上尽量避免排序,你实际上并不需要进行排序,找到ñ个元素为您给出ñ列表位。 (JDK中目前不提供这样的算法开箱即用的。)更新:只是在我先前的职位扩大,更有效的方法的例子将包括:
- 在parallel sort,其初始选择基础阶段在将每个桶分类之前将数据放入多个“桶”中,但是之后(在中间值的情况下),只对实际中间的“桶”进行排序,因为桶中任何一方的物品的精确顺序是不相关
- 以分治法排序算法(如Quicksort)为基础进行选择,但是算法实际上并未对超出所需范围的子列表进行排序。
-1
中位数是排序列表中间的数字。 (易于列出不均匀数量的条目,对于具有偶数条目的列表,它可以是包括在两个“中间数字”之间的任何数字)
因此,对列表进行排序,并找出什么中间数字是。
2
主要通过两种主要选择:
容易和快速的方法 - 按照
O(nlogn)
列表。由于中位数被定义为值的一半大于它的值,一半的值较小,所以只取n/2
th值 - 这是中位数。如果这是一个性能至关重要的任务,那么可以应用各种选择算法,这些算法可以在很好的情况下给出
O(n)
(但仍然无法保证最坏情况下的线性)。
在任何情况下,检查出Selection Algorithms的Wikipedia条目,应该给你的所有可用的方法好圆式。
相关问题
- 1. 在LinkedList中查找元素
- 2. 查找字符串中最后一位数字的位置
- 3. 递归 - 查找数字中的偶数位数
- 4. 查找Python中两个3位数字的最大回文数
- 5. 从表中排序数字列表中查找数字的位置
- 6. 查找字符数组中的字符位置
- 7. 寻找7位数字中位数的比较数
- 8. 在PHP中查找数字的倍数
- 9. 查找数组中的特殊数字
- 10. 查找数组中缺失的数字
- 11. 在Swift中查找数字的总数
- 12. 查找阵列的中位数
- 13. 的Python 3.4,查找列表中位数
- 14. Java中的LinkedList参数
- 15. 查找范围内的数字位置
- 16. 按位操作查找数组中是否存在数字
- 17. 查找一组随机16位数的中位数的检查次数
- 18. 如何查找六位数字的倒数第二位?
- 19. 查找字符串中的数字xslt
- 20. 查找按位数为0的数组中的所有数字对
- 21. MySQL使用字符串函数查找colums中的最后一位数字
- 22. Java中LinkedList的LinkedList?
- 23. 查找数组中的中位数并返回true
- 24. 查找数组中未知字符串的位置
- 25. 查找Flex中位图使用的总字节数
- 26. 查找最接近给定数字的数组中的数字
- 27. 在单元位置查找数字PHP
- 28. 字典查找与数组查找;数组重定位与字典分配
- 29. 阅读文件中的数字并找到中位数C
- 30. 在数据框中查找参数字符串中的数据
可能您的第一步应该是将数据复制到数组/ ArrayList中。 – 2009-05-17 19:48:10
当然,如果你不想找到中位数打扰你的名单副本。但是,如果仅仅为了排序效率,Collections.sort()无论如何都会做到这一点。 – 2009-05-17 21:45:59