差异而不分组不相关的块

时间:2010-01-26 10:27:20

标签: algorithm diff

是否存在不对不相关的块进行分组的差异算法?

例如:

hello world
lorem ipsum dolor sit amet

VS

Hello World
Lorem Ipsum Dolor Sit Amet

比较这些(例如使用标准Unix diff)通常会产生以下结果:

< hello world
< lorem ipsum dolor sit amet
---
> Hello World
> Lorem Ipsum Dolor Sit Amet

然而,如下所示的逐行比较似乎更明智:

< hello world
---
> Hello World

< lorem ipsum dolor sit amet
---
> Lorem Ipsum Dolor Sit Amet

后者,IMO,可以更轻松地分析微小的变化。 (请注意,我在这里关注人类的可读性,而不是机器的可读性。)

我理解差异是一个复杂的问题,但这常常让我感到困惑。

2 个答案:

答案 0 :(得分:4)

虽然intentional diff表现得像{{3}},但你可以通过投掷空行来改变它。这将得到你想要的结果。

1:

hello world

lorem ipsum dolor sit amet

Same

2:

Hello World

Lorem Ipsum Dolor Sit Amet

Same

行号必须固定(n / 2 + 1)。

1c1
< hello world
---
> Hello World
3c3
< lorem ipsum dolor sit amet
---
> Lorem Ipsum Dolor Sit Amet

如果多行替换一行,则输出可能仍然不是您想要的:

1,3c1
< hello world
<
< lorem ipsum dolor sit amet
---
> Hello World

答案 1 :(得分:1)

diff算法是longest common subsequence problem的解决方案。但是,似乎你对另一种算法不感兴趣。因为,相关与否,两条线都发生了变化,您所谈论的是文本中差异的呈现方式。

Thomas Jung显示了original format。维基百科显示了一些variations。但是花时间去试验一下。

diff original new

将生成原始格式。

diff -c original new

将产生context format

diff -u original new

将产生unified format。对于某些琐事,这是最常用的琐事,开源项目的补丁通常是以这种格式请求的。

当然,如果差异呈现给你的方式至关重要,我认为你会发现任何diff viewers都非常优越。