Я работаю над анализом больших двоичных файлов.Я реализовал знаменитый алгоритм Майерса Диффа, который производит минимальный дифференциал.Тем не менее, это O (ND), поэтому для различий двух очень разных файлов размером 1 МБ, я предполагаю, что потребуется время 1 миллион в квадрате = 1 триллион.Это нехорошо!
Мне нужен алгоритм, который создает потенциально неминимальную разность, но делает это намного быстрее.Я знаю, что нужно существовать, потому что Beyond Compare делает это.Но я не знаю как!
Конечно: есть такие инструменты, как xdelta или bdiff, но они производят патч, предназначенный для использования компьютером, который отличается от различий, потребляемых человеком.Патч связан с преобразованием одного файла в другой, поэтому он может выполнять такие вещи, как копирование из предыдущих частей файла.Дифференцированный для человека дифференциал предназначен для визуального отображения различий и может только вставлять и удалять.Например, это преобразование:
"puddi" -> "puddipuddipuddi"
даст небольшой патч из "copy [0,4] в [5,9] и в [10,14] ", но больше различий в" append 'puddipuddi' ".Я заинтересован в алгоритмах, которые производят большую разницу.
Спасибо!