Как работают текстовые приложения? - PullRequest
7 голосов
/ 29 мая 2009

Как такие приложения, как DiffMerge , обнаруживают различия в текстовых файлах и как они определяют, когда строка новая, а не просто в строке, отличной от проверяемого файла?

Это довольно легко реализовать? Уже есть библиотеки для этого?

Ответы [ 4 ]

5 голосов
/ 29 мая 2009

Вот бумага , которая послужила основой для инструмента командной строки UNIX diff .

4 голосов
/ 29 мая 2009

Есть библиотеки. Вот один из них: http://code.google.com/p/google-diff-match-patch/

StackOverflow использует Beyond Compare для сравнения. Я считаю, что это работает, вызывая Beyond Compare из командной строки.

4 голосов
/ 29 мая 2009

Это сложный вопрос. Выполнение различий означает нахождение минимального расстояния редактирования между двумя файлами. То есть минимальное количество изменений, которое вы должны сделать, чтобы преобразовать один файл в другой. Это эквивалентно нахождению самой длинной общей подпоследовательности строк между двумя файлами, и это является основой для различных программ сравнения. Самая длинная распространенная проблема подпоследовательности хорошо известна, и вы сможете найти решение для динамического программирования в Google.

Проблема с подходом динамического программирования состоит в том, что это O (n ^ 2). Таким образом, он очень медленный для больших файлов и непригоден для больших двоичных строк. Сложной частью при написании программы diff является оптимизация алгоритма для вашей проблемной области, чтобы вы получили разумную производительность (и приемлемые результаты). В статье «Алгоритм сравнения дифференциальных файлов» Ханта и Макилроя дается хорошее описание ранней версии утилиты Unix diff.

4 голосов
/ 29 мая 2009

Это на самом деле довольно просто; Программы DIFF - в большинстве случаев - основаны на Longest Common Sequence , которая может быть решена с помощью графического алгоритма.

На этой веб-странице приведены примеры реализации на C #.

...