Вместо хранения всех значений N (общее количество чисел во всех файлах) и их сортировки, вы можете хранить только 100 значений - самые большие в каждый момент.
Удобно ибыстрая структура данных для этой задачи - приоритетная очередь (обычно на основе двоичная куча ).Создайте min -heap со 100 первыми значениями, затем для каждого нового значения проверяйте, больше ли оно вершины кучи.Если да - удалите верхнюю часть, вставьте новый элемент.
Сложность пространства O(K)
, сложность времени O(NlogK)
, здесь K=100
, поэтому сложности могут оцениваться как O(1)
и O(N)
(без учетапостоянный член)
Пример Python, чтобы показать, как он работает:
import heapq, random
pq = [random.randint(0, 20) for _ in range(5)] #initial values
print(pq)
heapq.heapify(pq) #initial values ordered in heap
print(pq)
for i in range(5):
r = random.randint(0, 20) # add 5 more values
if r > pq[0]:
heapq.heappop(pq)
heapq.heappush(pq, r)
print(r, pq)
[17, 22, 10, 1, 15] //initial values
[1, 15, 10, 22, 17] //heapified, smallest is the left
29 [10, 15, 17, 22, 29] //29 replaces 1
25 [15, 22, 17, 29, 25] //25 replaces 10
14 [15, 22, 17, 29, 25] //14 is too small
8 [15, 22, 17, 29, 25] //8 is too small
21 [17, 21, 25, 29, 22] //21 is in the club now