2011-08-30 61 views
6

以下問題是從Problems on Algorithms採取(問題653):在陣列中的行置換來消除增加子序列

您正在給定數字的正×2矩陣。找到一個O(n log n)算法,用於對數組中的行進行置換,使得數組的兩列均不包含比⌈ √ n更長的遞增子序列(可能不包含連續數組元素)。 ⌉

我不知道如何解決這個問題。我認爲它可能會使用某種分而治之的復發,但我似乎無法找到一個。

有沒有人有任何想法如何解決這個問題?

+0

長於方*根*的n? –

+1

其書中的653問題'算法上的問題' – GEP

+0

以下是本書pdf的鏈接:http://larc.unt.edu/ian/books/free/license.html – GEP

回答

5

這是我的解決方案。

1)根據第一個元素從最大到最小排序行。

1 6 5 1 
3 3 -\ 3 3 
2 4 -/ 2 4 
5 1 1 6 

2)根據每個組中把它分成⌈√n⌉的基團,並且留下什麼(不多然後⌈√n⌉基)

5 1 5 1 
3 3 -\ 3 3 
2 4 -/ 
1 6 2 4 
     1 6 

3)分類排第二元件從最大到正確性的最低

5 1 3 3 
3 3 5 1 
    -> 
2 4 1 6 
1 6 2 4 

證明:

個在列1中增加子序列可以只發生在單組(大小是< =⌈√n⌉)

在第2欄增加子序列的2個元素是在同一個組(不超過⌈√n⌉組的詳細)

+2

啊,這麼簡單。爲什麼我沒有看到?做得好。 – quasiverse

+0

需要多長時間才能解決問題? – GEP

+1

約5分鐘。我開始思考如何解決1xn問題(單列)。 – kilotaras