“-d”选项对 diff 有什么影响?

Kus*_*nda 24 diff

diffOpenBSD 上的实现有一个非标准-d选项,其中包含以下文档:

-d

非常努力地产生尽可能小的差异。在处理具有许多更改的大文件时,这可能会消耗大量处理能力和内存。

GNUdiff实现具有与较短文档相同的选项

-d, --minimal

努力找到较小的一组更改

我不时使用此选项只是为了查看它是否生成与diff没有该选项的同一命令不同的任何形状或形式的输出,但我从未见过任何区别(没有双关语意)。

有人可以提供或指出一个示例,其中此选项实际上会从相同的命令中产生不同的结果-d吗?或者,如果有人可以解释此选项启动所需的情况。我也不确定“最小”是指“更少的输出线”还是“更少的大块头”。

一个没有受过教育的猜测是它与非常大的大块头有关。

Jde*_*eBP 15

在 GNU 中diff,也在 FreeBSD 上使用,该--minimal标志触发了 Paul Eggert 的算法变化,导致它“将成本限制在O(N**1.5 log N)为具有差异的大输入产生次优输出的代价”。更具体地说,它导致它应用几种启发式方法,这些启发式方法仅用于寻找接近最佳解决方案,并将“令人困惑”的行作为额外的差异丢弃。

在 OpenBSD 中diff,它使用diff1970 年代的较旧的 Unix算法,所采​​用的算法归功于 Harold Stone,并且--minimal标志触发了一个搜索,该搜索(实际上未)受无符号整数的最大值而不是平方根的限制被比较的行范围的大小(如果更大,则为 256)。

进一步阅读