在大型数据集中找到 10 个最小的数字?
Find the 10 smallest numbers in a large dataset?
我正在 python 中专门编写代码,但现在正处于为一种算法设计伪代码的阶段,该算法将采用具有 n 个值的数据集中的所有数据点,n 非常大并选择出 10 个最小值(或有限数 m << n,其中 m 是 m 最小值)。我希望有一个最有效的算法来满足要求。
我的想法:
1) 对数据进行堆排序,然后选择最小的 10 个值。 O(nlog(n))
2) 或者,使用循环来识别运行 10 次的 'champion'。确定第一个 'champion' 从数据集中删除,然后重复此循环。 O(n)(给定 m 较小)
哪个建议或是否有其他建议最好?
许多可能的方法之一:
抓取 10 个值并对它们进行排序。现在将最大的值与第 11 到第 n 个值一次一个地进行比较。每当新值较小时,用它替换第 10 个最小的值并求取您的 10 个值。
10 个值的列表,对它们进行排序等,即使使用粗略的代码,也会如此快速地存储在缓存中。整个列表将被访问一次,因此也会很快。
我正在 python 中专门编写代码,但现在正处于为一种算法设计伪代码的阶段,该算法将采用具有 n 个值的数据集中的所有数据点,n 非常大并选择出 10 个最小值(或有限数 m << n,其中 m 是 m 最小值)。我希望有一个最有效的算法来满足要求。
我的想法:
1) 对数据进行堆排序,然后选择最小的 10 个值。 O(nlog(n))
2) 或者,使用循环来识别运行 10 次的 'champion'。确定第一个 'champion' 从数据集中删除,然后重复此循环。 O(n)(给定 m 较小)
哪个建议或是否有其他建议最好?
许多可能的方法之一:
抓取 10 个值并对它们进行排序。现在将最大的值与第 11 到第 n 个值一次一个地进行比较。每当新值较小时,用它替换第 10 个最小的值并求取您的 10 个值。
10 个值的列表,对它们进行排序等,即使使用粗略的代码,也会如此快速地存储在缓存中。整个列表将被访问一次,因此也会很快。