比较两个列表的排序

时间:2010-11-29 15:32:14

标签: algorithm list

是否存在比O(n ^ 2)更好的算法,用于重新排序列表2以匹配列表1

清单1:A B C D

清单2:B D C A

注意:与List 1相比,List 2可以拥有更多,更少甚至完全不同的项目。

3 个答案:

答案 0 :(得分:1)

如果您可以为列表中的项目类型创建总排序,则可以通过对项目进行排序来为列表1创建索引。然后,您可以使用此索引重新排序列表2.此算法的时间为O(n log n),并且在空间中需要额外的O(n)。

答案 1 :(得分:0)

导致O(n Log(n))的一种可能性如下。这需要将列表值读入数组/向量/可排序类型的结构:

  • 根据值对列表1进行排序并保留位置信息。这提供了一种快速查找项目并了解其位置的方法。排序的成本是O(n log n)
  • 使用第一步中的排序列表作为比较功能对列表2进行排序。两个比较两个值,在排序列表1结果中查找它们,并使用相对位置作为两个值之间的比较。这种成本也是O(n log n)。

编辑后,您提到第二个列表可能与第一个列表没有关联。所以比较函数必须考虑到这一点。如果被比较的一个或两个值不在第一个列表中,那么比较函数需要决定是否对值进行排序(例如,它们是在结尾还是在开头?)。

答案 2 :(得分:0)

您正在寻找Diff Algorithm