我正在尋找一種算法來排序數組,但不是通過移動值。相反,我想刪除儘可能少的值,並最終得到一個排序列表。基本上我想找到最長的升序子陣列。刪除元素來排序數組
舉例說明:
1 4 5 6 7 2 3 8
應該成爲(2項刪除)
1 4 5 6 7 8
而不是(5項刪除)
1 2 3
我可以看到我是如何能在這樣做天真的方式,即通過遞歸檢查每個元素的「刪除」和「不刪除」樹。我只是想知道是否有一個更快/更有效的方式來做到這一點。這種問題是否有一個通用的前往算法?
我正在尋找一種算法來排序數組,但不是通過移動值。相反,我想刪除儘可能少的值,並最終得到一個排序列表。基本上我想找到最長的升序子陣列。刪除元素來排序數組
舉例說明:
1 4 5 6 7 2 3 8
應該成爲(2項刪除)
1 4 5 6 7 8
而不是(5項刪除)
1 2 3
我可以看到我是如何能在這樣做天真的方式,即通過遞歸檢查每個元素的「刪除」和「不刪除」樹。我只是想知道是否有一個更快/更有效的方式來做到這一點。這種問題是否有一個通用的前往算法?
您正在尋找longest increasing subsequence問題。有一個algorithm在O(n log n)時間內解決它。
太棒了,謝謝!它知道正確的術語搜索有什麼不同;) – Joost 2013-04-08 10:35:01
網站上有一個O(NlogN)算法比遞歸算法快。
http://www.algorithmist.com/index.php/Longest_Increasing_Subsequence
爲什麼不檢查,如果每個隨後元素是比以前的元件大(和刪除它,如果它不)? – ASGM 2013-04-08 10:29:52
@ASGM:由於該「貪婪」算法沒有給出_longest_遞增子數組。考慮:'9 1 2 3 4 5 6 7 8''。 – Thomas 2013-04-08 10:31:52
啊,好點@Thomas! – ASGM 2013-04-08 10:33:01