Быстрый бинарный дифференциал для 10 МБ файлов - PullRequest
2 голосов
/ 15 марта 2012

У меня есть два файла по 10 МБ, и я хотел бы найти самую длинную общую подпоследовательность со смещениями, например, результат должен выглядеть так:

42 bytes at offset 5 of the first file and offset 8 of the second file
85 bytes at offset 100 of the first file and offset 55 of the second file
...

Это одноразовая задача, я должен запускать ее только на одной паре файлов.

Мне нет дела до языка программирования, но он должен работать в Linux.

Я пробовал инструменты командной строки bsdiff и xdelta, но их формат выходного файла diff слишком сложен для понимания, и в нем отсутствует какая-либо документация - поэтому мне пришлось бы понимать сложный и недокументированный исходный код C, чтобы получить эти результаты. Это займет несколько часов, и у меня не так много времени для этого, поэтому я сдаюсь на этом пути.

Я пробовал Perl-модуль String :: LCSS_XS, но он слишком медленный (он работает уже час), Perl-модуль Algorithm :: Diff :: XS, но ему требуется слишком много памяти, и Perl-модуль Алгоритм: : LCSS, но это слишком медленно (реализовано в Perl). Я не смог найти ничего полезного в Python (встроенный difflib слишком медленный).

Существует ли инструмент, который работает быстро (т. Е. Менее чем за несколько часов) для файлов размером 10 МБ, и я могу преобразовать его вывод в нужный формат менее чем за час работы?

...