我有一个基于最长递增子序列的算法,当每个集合中的对象都是唯一的时,它可以很好地解决相关的业务问题,但是当两个集合中存在许多非唯一对象时往往会给出奇怪的结果。
当存在非唯一对象时,使用 Patience Diff 算法(也基于最长递增子序列)的方法似乎可以提供我想要的结果。但是,在我弄清楚 Patience Diff 是否合适之前,如果合适的话,为了将其应用于我的问题,我需要更好地理解算法。
我了解步骤 1 到 3 中会发生什么,但我不清楚步骤 4 中会发生什么。在 1 到 3 之后,现在仍然存在无法匹配的唯一行块和非唯一行。那么接下来会发生什么——假设与文档剩余的第一行/最后一行不匹配,肯定它还没有终止(因为没有更多的唯一行)?或者它是否将一个文档中的每个非唯一块与另一个文档中的每个非唯一块进行比较,并以某种方式选择最佳匹配?
http://bramcohen.livejournal.com/73318.html
- 如果它们相同,则匹配两者的第一行,然后匹配第二、第三等,直到一对不匹配。
- 如果它们相同,则匹配两者的最后一行,然后匹配倒数第二行,倒数第二行等,直到一对不匹配。
- 找到两边恰好出现一次的所有行,然后在这些行上做最长的公共子序列,将它们匹配起来。
- 在匹配行之间的每个部分执行步骤 1-2