Есть два файла, скажем FileA и FileB, и нам нужно найти все числа в FileA, которых нет в FileB. Все числа в FileA отсортированы, и все числа в FileB отсортированы. Например,
Вход:
FileA = [1, 2, 3, 4, 5, ...]
FileB = [1, 3, 4, 6, ...]
Выход:
[2, 5, ...]
Память очень ограничена, и даже один файл целиком не может быть загружен в память одновременно. Также необходима линейная или меньшая временная сложность.
Поэтому, если файлы достаточно малы, чтобы поместиться в память, мы могли бы загрузить их и инициализировать их содержимое в виде двух наборов, а затем взять разность наборов, чтобы решить проблему в O (1) или с постоянной сложностью времени.
set(contentsofFileA)-set(contentsofFileB)
Но поскольку файлы настолько велики, они не смогут полностью загружаться в память, и это невозможно.
Кроме того, другой подход заключается в использовании метода грубой силы с пакетной обработкой. Итак, мы загружаем фрагмент или пакет данных из FileA, а затем пакет из FileB, затем сравниваем его, а затем следующий фрагмент из FileB и так далее. Затем, после проверки фрагмента FileA над всеми элементами в FileB, загрузите следующий пакет из FileA, и это продолжится. Но это создаст сложность O (n ^ 2) или квадратичного времени и будет неэффективной для очень большого файла с большими записями.
Проблема должна быть решена с линейной или меньшей временной сложностью и без загрузки всех файлов в память. Любая помощь?