OpenBSD 上的实现具有以下文档diff
的非标准选项:-d
-d
非常努力地产生尽可能小的差异。在处理具有许多更改的大型文件时,这可能会消耗大量的处理能力和内存。
GNUdiff
实现与较短的文档具有相同的选项
-d
,--minimal
努力寻找更小的变化
有时我使用此选项只是为了查看它是否生成与diff
没有该选项的同一命令不同的任何形状或形式的输出,但我从未看到任何差异(没有双关语)。
有人可以提供或指出一个示例,其中此选项实际上会从同一命令产生不同的结果,而无需-d
? 或者,如果有人可以解释启用此选项所需的情况。我也不确定“最小”是指“更少的输出行”还是“更少的大块”。
一个未经教育的猜测是它与非常大的帅哥有关。
diff
在也用于 FreeBSD 的GNU中,该--minimal
标志触发了 Paul Eggert 的算法变体,导致它“将成本限制在O(N**1.5 log N)
为具有差异的大输入产生次优输出的代价”。更具体地说,它导致它不应用几种启发式方法,这些启发式方法仅用于寻找接近最佳解决方案,并将“令人困惑”的行作为额外的差异丢弃。diff
在使用 1970 年代较旧的 Unix算法的OpenBSD中,所采用的diff
算法归功于 Harold Stone,并且该--minimal
标志触发的搜索(实际上是非)由无符号整数的最大值而不是平方根限制被比较的行范围的大小(如果更大,则为 256)。进一步阅读