Мне нужно найти эффективный способ узнать, что отличается между двумя большими отсортированными массивами. Другими словами, мне нужно узнать , что было добавлено/удалено из одного из них на основе сравнений с другим. Сортировка не является обязательной, поэтому, если вы думаете, что мы можем добиться чего-то без заказа, все в порядке со мной.Сравнивать два очень больших сортированных массива эффективно
Эти два массива длиной один миллион элементов, поэтому сравнение их в памяти сразу невозможно.
Фон для этого прост. Я пытаюсь получить все новые строки из удаленной старой таблицы SQL (OpenEdge), которая не имеет никакого способа сообщить, что является новым. Я знаю, это может показаться странным, но это реальность, с которой я работаю. Таким образом, никаких триггеров по данным, никаких временных меток, ничего. Это было разрешено в другом потоке StackOverflow, поэтому Я не ищу способы добавить эту функцию в удаленный стол.
У меня есть копия этой таблицы в локальной базе данных Postgresql, чтобы помочь в сравнении. Я делаю сравнение по сети и используя jRuby с драйвером JDBC для проверки удаленных данных. До сих пор я пытался загружать обе таблицы в массивы Ruby и делать стандарт array - array
, но это поглощает, почему слишком много памяти (таблицы составляют миллион строк).
Какие-либо другие варианты для меня рассмотреть? Любые алгоритмы, о которых я не знаю?
Помните, что у меня нет всего массива сразу. То, что я сейчас делаю, - это сравнение по 1000 элементов от каждого одновременно. Может, мне нужно уточнить мой вопрос. –
@n_x_l Я не могу вспомнить, что нигде не написано и не указано ... –
@n_x_l все же алгоритм должен продолжать работать, даже если вы передадите срезы массива с помощью метода. –