Сравнивание 2х массивов из 10 000 000

120
13 сентября 2019, 21:30

пишу на php, и есть реальная задача сравнения 2х огромных массивов данных. Но загвостка в том, что эти массивы разбиты по файлам...

файл а1 - содержит 5000 цифр файл а2 - содержит 5000 цифр .... И таких файлов очень много Все вместе это массив более 10 000 000 цифр

Так же есть аналогичные файлы б1, б2, б3... С такой же структурой по 5000 цифр, и по сути это тот же массив что и в а1, только какие-то цифры были удалены от туда, а какие то добавлены.

Так вот мне нужно сравнить эти 2 массива, чтобы на выходе получить что туда добавили а что удалили.

Почему я не могу просто собрать 2 массива из 10 000 000 записей и сравнить их array_diff ?? Да потому что по памяти не вывезу, да и записей может быть в теории куда больше.

По этому ищу решения какого нибудь рекурсивного сравнивания

Answer 1

В1:Берете А1 и В1. Одинаковые элементы удалили. К А1 добавили А2, к В1 добавили В2, сравнили, снова одинаковые удалили, и т.д.

В2 (более быстрый):

  1. Берете А1 и В1. Одинаковые элементы удалили.

  2. Берете А2 и В2. Одинаковые элементы удалили.

  3. Сравнили остатки А с В2 и наоборот А2 с В. Одинаковые элементы удалили. (этот пункт делать, если записи могли перемещатся между файлами)

  4. Добавили А2 к остаткам А, В2 к остаткам В.

  5. пп 2-3 в цикле для остальных...

В результате в массиве А останутся те, которые были удалены, а в массиве В, те которые были добавлены.

Для случая, если файлы могут сильно различатся, можно использовать дополнительные алгоритмы выбора очередного файла для сравнения. Например изначально перебрать все файлы и найти медиану чисел в каждом файле. Отсортировать их в порядке увеличения. И в этом порядке их сравнивать. Возможно также учитывать при выборе файлов минимальное и максимальное число в файле.

READ ALSO
Создание плагина wordpress

Создание плагина wordpress

Пишу плагин форма обратной связи, соответственно нужно обрабатывать отправку формы, в связи с этим вопрос, в wordpress есть хук отвечающий за отправку...

124
Зачем добавлять noexcept к функциям с constexpr?

Зачем добавлять noexcept к функциям с constexpr?

В стандартной библиотеке MSVC 2017 поставляется примерно такая реализация std::size:

118
Обработать wheelEvent в QtGraphicsView

Обработать wheelEvent в QtGraphicsView

Хочу реализовать масштабирование в QtGraphicsView через колесико мышиНа данный момент делаю это через фильтр событий следующим способом:

138
Как изменить позицию body в Box2D?

Как изменить позицию body в Box2D?

Мне нужно в один момент времени изменить позицию тела по заданным координатамТо есть летит тело и нужно его "телепортировать" на новую позицию

122