hlebushek
@hlebushek
oceanographer

Какой самый быстрый алгоритм поиска максимального значения в большом файле?

Привет.
Допустим, есть файл, в котором лежит по числу в каждой строке. При этом сам файл может быть крайне большим (например, размером несколько сотен гигабайт) . Как быстрее всего найти максимальное (минимальное) значение в данном файле?
Спасибо.
  • Вопрос задан
  • 700 просмотров
Пригласить эксперта
Ответы на вопрос 5
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Просмотрев все значения. Ваш К.О.
Ответ написан
bitniks
@bitniks
Go/PHP/Symfony developer
MapReduce
Ответ написан
Комментировать
@dimoff66
Кратко о себе: Я есть
Основная оптимизация при условии что числа могут быть любого размера - считывать размерность чисел, сохраняя в массив числа с наибольшей на данный момент или считывать их позиции если файл доступен для чтения полностью а не последовательно. Как только найдется число большей разрядности все прочие ранее сохраненные данные можно обнулить без сравнения.

Если чисел наибольшей размерности набирается слишком много для хранения их в оперативке, тогда можно пройтись по ним циклом и оставить наибольшее...И так далее.
Ответ написан
Комментировать
Думаю самый оптимальный вариант пройтись по файлу один раз при помощи reduce таким образом время работы алгоритма будет линейным к количеству элементов. O(n). Сортировки и прочие способы требуют множество проходов по списку, что потребует большего времени работы алгоритма. Хотя наверное лучше циклом пройтись, поскольку reduce рекурсивный по своей природе, а у вас +100500 элементов в списке, что приведет к огромному потреблению памяти.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Делим файл по смещению с поправкой на конец строки на столько частей, сколько потоков мы будем использовать для поиска значений в асинхронном режиме.
2. Зпускаем асинхронно нужное количество потоков: 1 (или несколько!) потоков на каждую часть файла.
3. После того, как всё отработает - мы сравниваем максимальные и минимальные значения между потоками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы