我正在专门用python进行编码,但现在在为一种算法设计psuedocode的阶段,该算法将获取数据集中具有n个值的数据点,其中n很大,并挑选出10个最小值(或有限个数m << n,其中m是m个最小数)。我希望有一个针对需求的最佳高效算法。
我的想法:
1)对数据进行堆排序,然后选择最小的10个值。 O(nlog(n))
2)或者,使用循环标识运行10次的“冠军”。确定第一个“冠军”后,将其从数据集中删除,然后重复此循环。 O(n)(假设m小)
哪个建议还是最好?
答案 0 :(得分:2)
众多方法中的一种:
获取10个值并对其进行排序。现在一次将最大数值与第11至第n个数值进行比较。每当新值较小时,将其替换为第十个最小值,然后重新使用10个值。
十个值的列表,对它们进行排序等都将非常快地保存在缓存中,即使使用粗糙代码也是如此。整个列表将一次访问一次,因此速度也很快。