假设我们有一个可以使用两个或更多比较函数进行排序的对象。例如Box
length
,width
和height
。我们可以根据任何这些字段对一组盒子进行排序。
现在考虑两个包含相同框的Box
个对象数组。在第一个数组中,框按照length
的大小增加的顺序排序。在第二个数组中,框按照height
的大小增加的顺序排序。这两个排序的数组很可能会以不同的顺序列出这些框。
我们希望找到第三个包含框子集的数组,并且具有如果我们按照length
或height
对它们进行排序的属性,我们将具有相同的排序顺序。
这只是在两个排序数组之间找到最长公共子序列的问题吗?有没有更好的方法来实现这个或在C ++中实现一个很好的实现而不必为LCS实现算法,如果这是最实用的方法?是否有任何数据结构可以自行维护这个属性?
答案 0 :(得分:4)
你刚刚描述的是longest common subsequence problem的一个实例,它是NP难的。
直观地说,您可以将其视为matryoshka嵌套问题。满足关系的唯一元素必须完全适合彼此,但使用最长边的平方而不是死记硬背。