如何确定两个数据列表中的差异

Gus*_*eno 3 algorithm diff edit-distance list

这是CS人士运用该理论的一项练习。

想象一下,您有2个带有元素的容器。文件夹,URL,文件,字符串,这真的没有关系。

什么是计算添加和删除的算法?

注意:如果有很多方法可以解决此问题,请为每个答案发布一个,以便对其进行分析和投票。

编辑:所有的答案用4个容器解决了问题。是否可以仅使用首字母2?

tim*_*tes 5

假设您有两个唯一商品列表,而排序无所谓,则可以将它们都视为集合而不是列表

如果考虑维恩图,列表A为一个圆,列表B为另一个圆,则这两个的交点就是常数池。

从A和B移除此交集中的所有元素,并且删除A中剩余的所有内容,同时添加B中剩余的所有内容。

因此,遍历A查找B中的每个项目。如果找到它,则将其从A和B中删除

然后A是已删除的事物的列表,而B是已添加的事物的列表

我认为...

[编辑]好的,新的“仅2个容器”限制仍然适用:

foreach( A ) { 
  if( eleA NOT IN B ) {
    DELETED
  }
}
foreach( B ) {
  if( eleB NOT IN A ) {
    ADDED
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您无需构建新列表,也不会销毁旧列表...但是,与前面的示例一样,它会花费更长的时间,您可以遍历较短的列表,并从较长的列表中删除元素。在这里您需要做两个清单

我会说我的第一个解决方案没有使用4个容器,它只是破坏了两个;-)