比较两个项目列表的最快方法是什么?

edu*_*e05 3 c algorithm scripting

我有两个文件夹,每个文件大约有10,000个文件.我想编写一个脚本或程序,可以告诉我这些文件夹是否同步,然后告诉我每个文件夹中缺少哪些文件以使它们同步.

因此,在生成文件列表后,对于唯一文件对它们进行排序的最快算法是什么?我现在想的是比较每个列表上的第一个文件然后如果它们不同则删除一个直到它们相同,然后从列表中删除它们(因为它们不是唯一的.)

有比这更快的算法吗?

小智 8

diff -s [path1] [path2]


小智 5

如果你在C中,使用qsort()按升序对文件列表进行排序,然后使用一种"合并:

从每个列表的开头有两个指针.请执行下列操作:

  • 如果名称相同,则此名称存在于两个列表中 - 推进两个指针
  • 如果list1中的名称> list2中的名称,则列表2是唯一拥有它的名称 - 提前list2的指针
  • 否则list1中的名称仅在list1中 - advance list1的指针
  • 重复

当你在其中一个列表的末尾时,另一个列表中剩下的所有元素显然都缺少第一个.

或者,您可以组合两个列表,同时跟踪每个元素来自哪个列表.然后对组合列表进行排序.扫描已排序的列表.如果您看到两个具有相同值的实例,那么它就在两个列表中.否则你就会知道它来自哪个列表.