А вот нагуглил: http://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%D1%8F_%D0%BE%D0%B1%D1%89%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C
Алгоритм Машека и Патерсона отличная вещь. Хорошее время покажет на длинных файлах. Только я долго врубаться в него буду. Попробую, для начала, решить свою задачу дедовским методом. Мне ведь всего-то 1 раз надо программу использовать.
Пользователь решил продолжить мысль 19 Июля 2009, 18:35:49:
Придумал довольно быстрое решение:
У меня частный случай, поэтому крутые алгоритмы можно и не применять.
Возьму из средины 2-го файла паттерн, размером 1 кб (такого размера должно быть достаточно, т.к. вероятность, что встретятся 2 абсолютно одинаковых паттерна длиной 1кб в одном файле в моём случае очень мала).
Узнаю где этот паттерн в файле 1. По теории, он тоже должен быть близко к средине 1-го файла.
Таким образом я узнаю смещение этого паттерна в обоих файлах.
От этого смещения пойду к началу и концу файлов, сравнивая их между собой побайтно.
Таким образом узнаю смещения и длину общей последовательности байт в обоих фалах.ъ
Начал делать, но дело встало сравнении. Функция index() возвращает -1. Посмотрите, что не так. Может я недопонимаю что-то?
#!/usr/bin/perl
my $FileName1 = "file1";
my $FileName2 = "file2";
binmode STDOUT;
open(DAT1, $FileName1);
open(DAT2, $FileName2);
binmode DAT1;
binmode DAT2;
while (read(DAT1, $buf1, 1024)){
$f1.= $buf1;
}
print STDOUT length($f1) . " bytes read from: " . $FileName1 . "\n";
while (read(DAT2, $buf2, 1024)){
$f2.= $buf2;
}
print STDOUT length($f2) . " bytes read from: " . $FileName2 . "\n";
$l2 = length($f2);
$i = int($l2 / 2)-512;
$j = int($l2 / 2)+512;
$st = substr($f2,$i,$j);
print STDOUT index($f1,$st). " " . $i . " " . $j;
ls -l
итого 11700
-rw------- 1 pars pars 2 2009-07-19 17:55 1
-rw-r--r-- 1 pars pars 3971150 2009-06-03 23:37 body -тело
-rw-r--r-- 1 pars pars 2512 2009-06-28 11:57 end1 -окончания
-rw-r--r-- 1 pars pars 8540 2009-06-28 11:57 end2
-rw-r--r-- 1 pars pars 3974920 2009-07-19 14:14 file1 готовые файлы с разными заголовками и окончаниями
-rw-r--r-- 1 pars pars 3980867 2009-07-19 14:16 file2
-rw-r--r-- 1 pars pars 1258 2009-06-28 11:57 head1 -заголовки
-rw-r--r-- 1 pars pars 1177 2009-06-28 11:57 head2