diff
Реализация на OpenBSD имеет нестандартный -d
вариант со следующей документацией:
-d
Старайтесь изо всех сил, чтобы сделать diff как можно меньше. Это может потребовать много вычислительной мощности и памяти при обработке больших файлов со многими изменениями.
Реализация GNU diff
имеет ту же опцию с более короткой документацией
-d
,--minimal
стараться найти меньший набор изменений
Время от времени я использовал эту опцию, просто чтобы увидеть, генерирует ли она выходные данные в любой форме или форме, отличной от той же diff
команды без опции, но я никогда не видел никакой разницы (без каламбура).
Может ли кто-нибудь предоставить или указать на пример, где эта опция на самом деле дает другой результат, чем та же команда без -d
? В качестве альтернативы, если кто-то может объяснить обстоятельства, необходимые для включения этой опции. Я также не уверен, означает ли «минимальный» «меньшее количество строк вывода» или «меньшее количество фрагментов».
Необразованное предположение состоит в том, что это связано с очень большими кусками.
info diff performance
объясняет это IIRCgdiff -d
, чтобы проверить, полезны ли дополнения к OpenBSD. Из моих тестов я не смог получить никаких отличий, но очевидно, что код OpenBSD замедляет производительность, что выглядит как существенное влияние, поскольку алгоритм сравнения от Douglas McIlroy работает быстрее, чем gdiff, если вы используете файлы нормального размера.Ответы:
В GNU
diff
, также используемом во FreeBSD,--minimal
флаг запускает вариант алгоритма Пола Эггертта, который заставляет его «ограничить стоимостьO(N**1.5 log N)
ценой получения неоптимального выхода для больших входов с различиями». Более конкретно, это заставляет его не применять несколько эвристических методов, которые касаются нахождения просто близких к оптимальным решений и отбрасывания «запутанных» линий в качестве дополнительных отличий.В OpenBSD
diff
, который использует старую Unixdiff
алгоритм с 1970 - х лет, алгоритм применяется приписывают к Harold Stone, и флаг инициирует поиск , который (эффективно un-) , ограниченный максимального значение целого числа без знака , а не на квадратном корне размера диапазона сравниваемых линий (или 256, если он больше).--minimal
дальнейшее чтение
источник