mirror of https://github.com/Wilfred/difftastic/
Add notes on LCS weaknesses
parent
5b18257598
commit
ccd6ac4d44
@ -0,0 +1,48 @@
|
|||||||
|
Consider changing:
|
||||||
|
|
||||||
|
```
|
||||||
|
foo();
|
||||||
|
bar();
|
||||||
|
```
|
||||||
|
|
||||||
|
To:
|
||||||
|
|
||||||
|
```
|
||||||
|
if (true) {
|
||||||
|
foo();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
What we want:
|
||||||
|
|
||||||
|
```
|
||||||
|
+ if (true) {
|
||||||
|
foo();
|
||||||
|
- bar();
|
||||||
|
+ }
|
||||||
|
```
|
||||||
|
|
||||||
|
A longest-common-subsequence algorithm is wrong here. The longest
|
||||||
|
subsequence is five tokens:
|
||||||
|
|
||||||
|
```
|
||||||
|
( ) ( ) ;
|
||||||
|
```
|
||||||
|
|
||||||
|
which leads to:
|
||||||
|
|
||||||
|
```
|
||||||
|
+if+ (+true+) +{+
|
||||||
|
+foo+();
|
||||||
|
-bar-();
|
||||||
|
+}+
|
||||||
|
```
|
||||||
|
|
||||||
|
so we claim `foo` is added. We want the following *four* tokens to be
|
||||||
|
preserved:
|
||||||
|
|
||||||
|
```
|
||||||
|
foo ( ) ;
|
||||||
|
```
|
||||||
|
|
||||||
|
Proposed solution: advance on both sides, keep first match.
|
||||||
Loading…
Reference in New Issue