Який ефект має опція "-d" на відмінності?


24

diffРеалізація на OpenBSD має нестандартний -dваріант з наступною документацією:

-d

Постарайтеся дуже сильно зробити різницю якомога меншою. При обробці великих файлів з великою кількістю змін може знадобитися велика потужність та пам'ять.

Реалізація GNU diffмає той самий варіант, що і коротша документація

-d, --minimal

постарайтеся знайти менший набір змін

Час від часу я використовував цей параметр, щоб побачити, чи він генерує результат, який має будь-яку форму чи форму, відмінну від однієї і тієї ж diffкоманди без параметра, але я ніколи не бачив різниці (жоден каламбур не призначений).

Чи може хтось надати або вказати на приклад, коли цей параметр насправді дає інший результат від тієї ж команди без -d? Крім того, якщо хтось міг би пояснити обставини, необхідні для цього варіанту. Я також не впевнений, чи означає "мінімальний" менше "рядків виводу" чи "менший об'єм".

Неосвіченою здогадкою є те, що це стосується дуже великих хунів.


1
unix.stackexchange.com/questions/472528 викликав вашу цікавість, чи не так? (-:
JdeBP

@JdeBP Так. Це нагадало мені про цей прапор і про те, що я просто не знаю, що він робить, оскільки я ніколи не бачив, щоб він щось робив.
Kusalananda

1
info diff performanceпояснює це IIRC
Stéphane Chazelas

1
Ясно пов'язані . На жаль, жоден приклад мій -> мінімальний результат.
Ісаак

1
Я дуже хотів би отримати приклад, який створив би різні результати gdiff -d, щоб перевірити, чи корисні доповнення до OpenBSD. З моїх тестів я не міг отримати жодних відмінностей, але очевидно, що OpenBSD-код уповільнює продуктивність, яка виглядає як значний вплив, оскільки алгоритм відмінності від Дугласа Макілроя швидше gdiff, якщо ви використовуєте звичайні розміри файлів.
schily

Відповіді:


15

У GNU diff, також використаному на FreeBSD, --minimalпрапор запускає зміну алгоритму Полом Еггертом, що призводить до того, що "обмежувати витрати O(N**1.5 log N)на ціну виробництва неоптимального виходу для великих входів з різницями". Більш конкретно, це призводить до того, що він не застосовує декілька евристик, які стосуються пошуку просто близьких до оптимальних рішень та викидання «заплутаних» ліній як додаткових відмінностей.

У OpenBSD diff, який використовує стару Unix diffалгоритм з 1970 - х років, алгоритм застосовується приписують до Harold Stone, і прапор ініціює пошук , який (ефективно un-) , обмежений максимального значення цілого числа без знака , а не на квадратному корені розміру діапазону ліній, що порівнюються (або 256, якщо він більший).--minimal

Подальше читання


1
Коли я створив кращі відмінності від джерел UNIX, я перевірив, що розширення OpenBSD не знайшов кращих результатів. Зверніть увагу, що в оригінальній функції stone () використовується: `} while ((y = b [++ j])> 0)` і BTW: для нормальних розмірів файлів мій розширений UNIX розріз швидше, ніж GNU diff.
schily
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.