7
A
回答
19
沒有在O(n)時間從堆中構建BST的算法。這樣做的原因是,給定n個元素,你可以在O(n)時間內從它們中構建一個堆。如果您有一組BST值,您可以通過進行中序遍歷將它們排序爲O(n)時間。如果你可以從堆在O(n)的時間建立一個BST,然後你可以有一個O(n)的排序算法通過
- 建立在O(n)的時間堆,
- 轉換堆在O(n)時間到BST,並且在O(n)時間內步行BST以得到排序的序列。
因此,無法將堆轉換爲BST在O(n)的時間(或者在O(N log n)的時間,其中o是little-o notation)。
但是,可以通過反覆從BST中取出最大值並將其作爲樹中最右邊的節點插入,從O(n log n)時間的堆中構建BST。 (你需要在那裏存儲一個指針以便快速訪問;只需重複插入根就會花費時間。)
希望這有助於!
相關問題
- 1. Ruby:將BST時間轉換爲UTC
- 2. 正在將IEnumerable強制轉換爲ArrayList O(N)或O(1)?
- 3. 在PHP或jQuery中將UTS(UTC-0)時間轉換爲BST
- 4. 將BST轉換爲數組
- 5. Binomial堆:證明合併運行在O(日誌n)時間
- 6. Python腳本:如何判斷在O(N)或O(N^2)時間?
- 7. 時間複雜度 - O(n^2)到O(n log n)搜索
- 8. 時間複雜度O(N日誌(log n)的)+ N O(L)
- 9. 將BST轉換爲排序列表
- 10. 當n可能爲0時,將SET ROWCOUNT n轉換爲TOP(n)
- 11. 時間複雜度:O(logN)或O(N)?
- 12. ConfigurationManager.AppSettings將「\ n」轉換爲「\\ n」爲什麼?
- 13. 堆棧排序O(N)
- 14. 在JavaScript中將O(n^3)更改爲O(n^2)
- 15. O(nlog * n)和O(n)之間?
- 16. 創建最大堆的時間複雜度O(n)
- 17. 將varchar轉換爲時間
- 18. 將\ n轉換爲javascript
- 19. 排序在O(n + mlogm)時間陣列
- 20. 在O(n)時間執行連接?
- 21. 將時間轉換爲MySQL時間
- 22. 將時間戳轉換爲時間戳
- 23. python將時間轉換爲utc時間?
- 24. 將UTC時間轉換爲IST時間
- 25. PHP將時間轉換爲時間段
- 26. 將時間轉換爲Unix時間戳
- 27. 將時間戳轉換爲時間()
- 28. 將時間戳轉換爲時間
- 29. 將日期時間轉換爲時間
- 30. SQL Server將日期時間轉換爲n期前
使堆中的BST在O(n)中更有效,然後O(nlogn)。 – user1940350
哦,我的錯誤,對不起。 – hd1