我需要编写一个函数来比较2-5个“文件”(实际上2-5组数据库行,但类似的概念),我不知道如何去做。由此产生的差异应该呈现2-5个文件并排。输出应显示添加,删除,更改和未更改的行,每个文件都有一列。比较五个不同的来源
我应该使用什么算法遍历行,从而保持低复杂度?每个文件的行数少于10,000。由于总数据大小在兆字节范围内,因此我可能不需要External Merge。简单易读的代码当然也很好,但这不是必须的。
编辑:这些文件可能来源于某些未知来源,没有其他1-4文件可以与之比较的“原始”所有文件都必须以某种方式与其他人进行比较。
编辑2:我或者更确切地说是我的同事意识到可以对内容进行排序,因为输出顺序是不相关的。这个解决方案意味着在这部分应用程序中使用额外的领域知识,但是差异复杂度是O(N)和较不复杂的代码。这个解决方案很简单,当我关闭赏金时,我会忽略这个编辑的任何答案。不过,我会回答我自己的问题以供将来参考。
您是否对线路比较或字符级比较感兴趣?也就是说,如果在一组中一行是'a,b,c',另一组是'a,b,d',你是否还想让这两行被认为'除了c/d'一样?或者他们是不同的记录,因为他们有不同的数据? – Kaganar
@Kaganar:他们不同,但并不重要。我确定了单独比较器中行的正交性。 –
因此,真正看到的是添加,删除和未更改的行。 (没有'改变'的行,那么因为他们会被视为添加。)另外,给定“编辑2”你想要的是一种模糊。通过大多数定义,一组数据库行是无序的,解决您的问题的方法是重新排序和比较。另一种方法是使用散列进行比较,然后在集合中显示相似的行。但是,这听起来不像是你的原始问题的核心 - 你是否真的想要以行间依赖的方式比较行的行数? – Kaganar