http://en.wikipedia.org/wiki/Longest_increasing_subsequence#Efficient_algorithms說最有效的解決方案是O(n log n),因此如果我排序序列,它將是O(n log n),然後如果我遍歷排序的序列,拒絕每個不是因此該算法將在O(n log n + n)中爲〜O(n log n)...爲什麼我不能通過對序列進行簡單排序來解決最長的遞增子序列?
回答
對序列進行排序會改變項目的順序原始序列,並且您的方法將始終返回與原始總序列長度相同的最短序列。 Se Mehrdad的評論。
從你的鏈接:
在二進制範德瓦Corput序列
0,8,4,12,2,10,6,14,1,9,5,13,3,11 ,7,15,...
最長遞增子是現在
0,2,6,9,13,15
讓你的應用algorithim:
排序的原始序列變爲:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
最長增加這裏subsequnce是:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
非常感謝你回答我這個非常愚蠢的想法..我應該用wiki上的結果來測試它..原諒我的天真..但是,你可以請看看: http:// stackoverflow。 com/questions/21435497/knuthmorrispratt-algorithm?noredirect = 1#comment32342555_21435497 – user1479589
沒有理由道歉。在somone指出他們的假設之後,很容易發現我們的假設存在缺陷。這一切都發生在我身上。 –
另外我會在今天晚上看看這個問題。我在工作,現在沒有時間真正地看那一個。 –
「如果我排序序列」 這是爲什麼?當你對它進行排序時,所有子序列會發生什麼? ;-)
如果你排序它,那麼你破壞了輸入,並沒有解決真正的問題。
- 1. 解釋算法來解決'最長的遞增子序列'問題
- 2. 顯示最長的遞增子序列
- 3. 循環最長遞增子序列
- 4. 最長遞增循環子序列
- 5. 遞歸的記憶遞增最長遞增子序列
- 6. 最大最長遞增序列的
- 7. 通過多列對Slickgrid進行排序?
- 8. OCaml searchin增長最長的子序列
- 9. 爲什麼datagridview需要雙擊來對列進行排序
- 10. 通過單擊列標題對列進行排序
- 11. 解決建築橋樑的最長的次序子序列
- 12. 如何使用DP來解決「最長的相似子序列」
- 13. 爲什麼我的對象不能使用sortedArrayUsingDescriptors進行排序?
- 14. 通過單擊標題列對DataGridView中的行進行排序
- 15. 爲什麼不myDictionary.keys()。sort()對myDictionary的鍵列表進行排序?
- 16. 最長增加子序列的應用
- 17. 最長增加的子序列2d
- 18. F# - 如何通過降序和升序來對列表進行排序?
- 19. 爲什麼我不能使用函數對值進行排序?
- 20. 通過不同行數的組對列表進行排序
- 21. 如何找到最長增加子序列的實際序列?
- 22. 最長子序列
- 23. 僅通過交換元素來對列表進行排序
- 24. 我怎麼能進行排序以列表的蟒蛇順序
- 25. 爲什麼我的ICMP序列號不遞增? (C Socket編程)
- 26. 最長遞增子序列遞歸版本
- 27. 最簡單的方法來排序對象列表
- 28. 創建列表進行排序,通過
- 29. 我們如何確保Bitonic序列將從一個最長的遞增子序列和一個最長的遞減子序列形成?
- 30. 爲什麼我的程序沒有對結構進行排序?
什麼問題? – Jatin
*遍歷排序的序列,拒絕不增加的每個項目* - 再次讀取它。這將是完整的序列。你已經對它進行了排序。這並不是真正的算法。 –
[2,3,1]中最長的子序列與[1,2,3]不同。 – Mehrdad