Здраствуйте.
Господа программисты, ни кто не подскажет, где можно найти алгоритм определения разницы между двумя файлами. То есть, предположим есть две версии некоего файла, необходимо определить данные (пусть множество байт), по которым можно получить вторую версию из первой (или наоборот). Предпологаеться, что все это позволит сократить общий объем информации для хранения множества версий одних и тех же файлов.
Вместе со студией (любой, похоже, до .NET) есть программка windiff, которая сравнивает текстовые файлы, судя по всему, тот же алгоритм используется и source safe-ом. К WinDiff-у есть исходники, надо поискать в мсдн "WinDiff: Graphical File Comparison Tool". :shuffle:
Уже зарегестрировался. И правда — совсем не страшно :)
А за ответ спасибо, буду думать.
Re[4]: Определение разницы между двумя файлами
От:
Аноним
Дата:
03.04.02 11:43
Оценка:
Здравствуйте Кодт, Вы писали:
К>Теперь по теме.
К>Если побайтное сравнение — т.е. файлы условно одинаковой длины, отличаются байтами на некоторых местах — решение простое.
К>На выходе — серия "патчей": К>
К>с позиции i по j - заменить на b[i..j]
К>
К>Сравнение по цепочкам. Т.е. К>
К>файл a = ab1[0..i1) a2[0..i2) ab3[0..i3) ...
К>файл b = ab1[0..i1) b2[0..j2) ab3[0..i3) ...
К>
К>На выходе — патчи вида К>
К>заменить [i1..i2] на b[j1..j2]
К>
К>Так работает windiff (правда, он оперирует не байтами, а строками).
Мне кажеться что вот здесь: К>Сравнение по цепочкам. Т.е. К>
К>файл a = ab1[0..i1) a2[0..i2) ab3[0..i3) ...
К>файл b = ab1[0..i1) b2[0..j2) ab3[0..i3) ...
К>
что то не так. Хотя как должно быть сказать пока не могу.
Мультимедийные потоки — то же, но там, в отличие от текста, изменяются серии кадров (звуковых или видео). (Монтаж)
А в масштабе двух смежных кадров идет побайтная или попиксельная разница. (Коллаж)
Кстати, хорошие термины:
коллаж — побайтная разница
монтаж — нарезка, иногда (для пущей сложности) перестановка.
Алгоритм обнаружения монтажа, конечно, гораздо сложнее, чем коллажа.
Приходится искать совпадающие цепочки, устранять неоднозначность за счет оценок и/или эвристик.
В общем, см. windiff. Они эту задачу как-то решили.