【发布时间】:2010-02-28 16:33:17
【问题描述】:
给定一个包含“N”个数字 (N >100) 的数组。我们如何才能按顺序找到其中最大的 10%? (如果n/10不是整数,可以四舍五入)
我想出了 3 种算法来尝试上述问题,但我不确定哪一种算法在渐近运行时间方面是最好的。我实际上可以进行任何修改以减少渐近时间吗?另外,如果 N 变得非常大,哪种算法可能仍然有效?
我列出了我对以下算法的想法,并且真的可以使用一些帮助来找出最有效的算法。
算法 1
我使用了选择排序,并在 10% 的数字被排序后停止。
算法 2
我建立了一个最大堆并不断删除最大的 10% 的数字
算法 3
还没有实现这个,但我的想法是使用任何顺序统计算法来找到包含前 10% 数字的分区,然后使用归并排序对它们进行排序。
【问题讨论】:
-
数字是正整数还是也可以是双精度数?他们能有多大?
-
“按顺序”是什么意思?它们在原始来源中的顺序是升序还是降序?