Вы можете выбрать лучшие элементы K за O(n)
время.См. http://en.wikipedia.org/wiki/Selection_algorithm#Selecting_k_smallest_or_largest_elements.. Вы можете использовать алгоритм Quickselect, чтобы выбрать первые 10 (которые поместили бы их в начало массива), сделать это снова для 10 нижних (поместить в конец массива), а затемзапускать сортировку в фоновом режиме, сортируя элементы с 10 по n-10.
На практике Heapselect работает быстрее, чем Quickselect, когда количество элементов, которые вы хотите выбрать, составляет менее 1% от общего количества элементов.,То есть, чтобы выбрать k
элементов из списка n
, вы должны использовать Heapselect, если k < n/100
.Если k
равно 10, а n
- миллион, Heapselect будет намного быстрее, чем Quickselect.
Недостаток Heapselect заключается в том, что он требует O (k) дополнительного пространства.Но когда k == 10
, это не имеет большого значения.
Это зависит от характера ваших данных.Если общее количество отображаемых строк обычно превышает 1000, вам следует использовать Heapselect.В противном случае используйте Quickselect.Они оба просты в реализации.
См. Когда теория встречается с практикой для получения дополнительной информации о разнице между двумя алгоритмами выбора.