Есть ли "идеальный" алгоритм сравнения? - PullRequest
0 голосов
/ 18 марта 2012

Существует ли такая вещь, как алгоритм сравнения, который не допускает ошибок? Тот, который точно знает, какие буквы были удалены и какие буквы были вставлены во всех случаях?

Если не существует, это невозможно или просто слишком сложно?

Ответы [ 3 ]

1 голос
/ 18 марта 2012

Это невозможно, потому что, как правило, существует несколько последовательностей правок, которые могли привести вас от оригинала к финалу.

0 голосов
/ 19 марта 2012

Это проблема определения.

Да: всегда можно найти идеальную разницу между двумя файлами в смысле: что отличается между ними.

Нет: Вы, вероятно, хотите знать, например, КАКОЙ из {, который вы удалили, и это может быть слишком сложно, поскольку нет никаких воспоминаний о том, что произошло потом.

0 голосов
/ 18 марта 2012

Алгоритм сравнения, смотрящий на этот оригинальный и новый текст, не может определить реальную последовательность изменений.Таким образом, он не может знать, переместил ли ты ABC из одного места в другое, или удалил его один и вставил в другой.Обычный diff в этом случае просто говорит вам, что что-то было удалено в одном месте, а что-то другое (он даже не знает, что это то же самое) было вставлено где-то еще.

Можно создать инструмент для обоснованных предположенийчто касается правдоподобного набора правок.Наш Smart Differencer использует преимущества структуры кода и сходства фрагментов кода, чтобы предположить, что блоки кода были перемещены, а не вставлены / удалены, даже несмотря на изменение имен переменных.

...