我知道我們可以在O(logn)時間的二叉搜索樹中找到最小/最大值。但在C++中的地圖給了我們恆定時間的最小/最大值。我們可以在地圖上使用map::begin和最大值使用map::rbegin找到最小元素。這兩項操作都需要一定的時間。任何人都可以提出一個方法,使找到最小/最大O(1)?O(1)時間內平衡二進制搜索時間的最小/最大元素
回答
C++映射不是由BST實現的。它由紅黑樹實施。如果要通過O(1)在BST中查找最小/最大值,則可以將這兩個指針存儲在樹中最左邊的節點和最右邊的節點上。 否則,您可以使用minheap或maxheap找出O(1)中的最小/最大值。
是的,我們可以做到這一點。但刪除最小/最大節點會更改指針。這仍然需要O(logn)來找到新的最小值/最大值。 –
不,它可以在O(1)中再次完成。即使您在刪除期間刪除最小節點(假設),您也可以將最小指針更新爲最小節點的後繼節點。所以,在任何時候你都可以在O(1)中得到你的最小值,最大值。你可以說你正在增加你在刪除中的複雜性。但那仍然是O(logn)。 –
紅黑樹也是一個二進制搜索樹,只是說 – Exagon
- 1. 在O(1)時間查找最大堆的第10個最大元素時間
- 2. 最大的平衡二進制子樹的大小
- 3. 搜索與大O時間限制
- 4. 何時平衡BST的最佳時間?
- 5. 我可以用O(lgn)時間找到第二大元素,並且最小堆?
- 6. 如何在平衡的二叉搜索樹中保持最小值和最大值O(1)時間,而不用指針?
- 7. 二進制搜索的最差情況時間複雜度
- 8. 在O(1)時間返回ak大小數組的前n個元素時間
- 9. 二進制搜索的運行時間
- 10. 如何在O(n)時間內對雙鏈表進行二進制搜索?
- 11. 時間複雜度,以獲得最大的堆最小元素
- 12. 二進制搜索樹平衡
- 13. 在O(1)時間搜索可能嗎?
- 14. 二進制堆中最小的元素?
- 15. 測試二進制搜索的平均運行時間
- 16. 哪一個更適合平衡二叉搜索樹或提取最大元素的最大堆?
- 17. 計算二叉搜索樹的最大不平衡
- 18. 插入元素二進制最小堆
- 19. 從二進制最大堆中刪除第二小元素
- 20. 尋找最小值與O(1)的時間複雜度堆棧
- 21. SQL彙總時間範圍的最小/最大活動時間
- 22. 獲取最小,最大和平均每次的created_at時間
- 23. 最大和最小時間查詢
- 24. KSum如何最小運行時間爲O(N^k-1)?
- 25. 查詢考勤時間:最小和最大時間分組
- 26. WebElement.isDisplayed方法花費的最大時間來搜索元素的可見性?
- 27. 查找二進制搜索樹中的第n個最小元素
- 28. Hackerrank的最小平均等待時間
- 29. 最大和最小的二進制樹的Haskell元件
- 30. 平衡二元搜索樹問題
存儲兩個指針以及根。 – molbdnilo
std :: map通常是用搜索樹實現的,所以你的意思是通過hashmap實現的std :: unordered_map。由於hashmap不關心訂單,我們無法在O(1)中找到最小值。當你想在O(1)中獲得最小/最大值而不刪除它時,我會建議你使用最小堆或最大堆 – Exagon
@Exagon:我的意思是ordered_map。你可以看看map :: rbegin和map :: begin。 –