2012-03-17 76 views
3

假設我們有一個可以使用兩個或多個比較函數進行排序的對象。例如具有lengthwidthheightBox。我們可以根據這些字段中的任何一個字段對數組進行排序。使用不同的比較維護相同的排序順序

現在考慮兩個包含相同框的Box對象數組。在第一個數組中,這些盒子按照它們的length的大小順序排列。在第二個數組中,這些盒子按照它們的height的大小順序排列。很可能這兩個排序的數組將按不同的順序列出這些框。

我們希望找到第三個數組,其中包含這些框的子集,並且如果我們按其lengthheight對它們進行排序,則我們將具有相同的排序順序。

這是簡單的找到兩個排序數組之間最長的公共子序列的問題嗎?有沒有更好的方法來做到這一點或在C++中的一個很好的實現,而不必實現LCS的算法,如果這是最實際的方法呢?有沒有任何數據結構可以保持這個屬性的實用性?

+0

這是一個尋找* a *共同子序列的問題;如果你決定選擇最長的常見子序列,那只是一個問題。 (另外,您必須決定如何處理兩個箱子高度相同但長度不同的箱子,反之亦然。) – ruakh 2012-03-17 23:22:57

+0

箱子的子集需要最優化(例如可能的最長子集)? – pmr 2012-03-17 23:23:53

+0

是的,我的第一個想法是找到一個共同的子序列,而子集的子集需要是最優的,所以它將是最長的公共子序列。 – mcorley 2012-03-18 00:18:31

回答