Здравствуйте, RealBobEx, Вы писали:
RBE>В описанаии и реализации алгоритма WinDiff от Microsoft есть несколько неясных моментов.
RBE>Может быть кто-нибудь знает его автора или может подсказать где взять более четкое описание?
Конечно, это не WinDiff, но я бы хотел представить вам и остальным свое видение решения
этой задачи. Может быть кому-нибудь это будет интересно.
Для своих целей я решил реализовать это по-своему,
возможно это неэффективно, но работало хорошо: берется текстовый файл и строится
матрица равенства строк между собой, то есть каждая строка сравнивается с каждой.
Эта операция очень быстрая, поэтому сравнение производилось очень быстро.
в итоге, получается матрица такого вида(1, если строки равны, 0, если не равны):
здесь файлы равны
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
здесь файлы неравны
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 <- здесь строка вставлена
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 <- здесь строка удалена
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 <- здесь строка изменена
0 0 0 0 0 0 0 0 1
Вот, такой алгоритм. Анализируя эту матрицу можно узнать многое о сравнении двух текстов.
Может быть этот алгоритм далёк от оптимального, но для несложного приложения его вполне хватает.
Особенно не ругайте!