使用不同的比较保持相同的排序顺序

时间:2012-03-17 23:11:23

标签: c++ algorithm

假设我们有一个可以使用两个或更多比较函数进行排序的对象。例如Box lengthwidthheight。我们可以根据任何这些字段对一组盒子进行排序。

现在考虑两个包含相同框的Box个对象数组。在第一个数组中,框按照length的大小增加的顺序排序。在第二个数组中,框按照height的大小增加的顺序排序。这两个排序的数组很可能会以不同的顺序列出这些框。

我们希望找到第三个包含框子集的数组,并且具有如果我们按照lengthheight对它们进行排序的属性,我们将具有相同的排序顺序。

这只是在两个排序数组之间找到最长公共子序列的问题吗?有没有更好的方法来实现这个或在C ++中实现一个很好的实现而不必为LCS实现算法,如果这是最实用的方法?是否有任何数据结构可以自行维护这个属性?

1 个答案:

答案 0 :(得分:4)

你刚刚描述的是longest common subsequence problem的一个实例,它是NP难的。

直观地说,您可以将其视为matryoshka嵌套问题。满足关系的唯一元素必须完全适合彼此,但使用最长边的平方而不是死记硬背。

这是两个related questions,a canned implementation in C++