Это интересный вопрос, который я нашел в Интернете. Для данного массива, содержащего n чисел (без информации о них), мы должны предварительно обработать массив за линейное время, чтобы мы могли вернуть k наименьших элементов за время O (k), когда нам дано число 1 <= k <= n
Я обсуждал эту проблему с некоторыми друзьями, но никто не мог найти решение; любая помощь будет оценена!
быстрые примечания: - порядок k наименьших элементов не важен; - элементы в массиве являются числом, могут быть целыми числами, а могут и не быть (так что без сортировки по осям); - число k не известно на этапе предварительной обработки. предварительная обработка - O (n) время. функция (найти k наименьших элементов) за O (k) время.
Ответы:
Предварительно обработать массив из значений за время O ( n ) :N O ( n )
Общее время предвычисления находится в пределахO ( 1 + 2 + 4 + . . . + П ) ⊆ О ( п )
Ответьте на запрос для наименьших элементов в A за время O ( k ) :К A O ( k )
содержит k наименьших элементов.A [ 1 .. k ] К
Ссылки:
источник
Для простоты предположим, что . Используйте алгоритм линейного выбора времени, чтобы найти элементы в позициях 2 m - 1 , 2 m - 2 , 2 m - 3 , … , 1 ; это занимает линейное время. Для данного k найти t таким, что 2 t - 1 ≤ k ≤ 2 t ; обратите внимание, что 2 t ≤ 2 k . Отфильтровать все элементы ранга не более 2 тп = 2м 2м - 1, 2м - 2, 2м - 3, … , 1 К T 2т - 1≤ k ≤ 2T 2T≤ 2 к 2T и теперь используйте алгоритм линейного выбора времени, чтобы найти элемент в позиции за время O ( 2 t ) = O ( k ) .К O ( 2T) = O ( k )
Пояснение: Может показаться, что предварительная обработка занимает время , и это действительно так, если вы неосторожны. Вот как выполнить предварительную обработку за линейное время:Θ ( п журналн )
Разделение на месте выполняется как в быстрой сортировке. Время работы является линейным в , и, следовательно, линейным. В конце концов, массив A удовлетворяет следующим свойством: для каждого к , A [ 0 .. п / 2 K - 1 ] состоит из п / 2 к наименьших элементов.n + n / 2 + n / 4 + ⋯ + 1 < 2 n A К A [ 0 .. n / 2К- 1 ] н / 2К
источник
Фредериксон, Грег Н. , Оптимальный алгоритм выбора в минимальной куче , Инф. Вычи. 104, № 2, 197-214 (1993). ZBL0818.68065 ..
источник
источник