回覆列表
-
1 # Bruceleexiaokan
-
2 # 枝枝葉葉
當散列表變大,衝突增多時,還能保持常數嗎? 樹搜尋 不論多大,效能都是一個公式,而且實際佔用記憶體 和實際節點數量一樣,散列表 要預先分配記憶體,估計大小。c++ 的辦法,恰恰 解決了 資料多少,都效能平穩,可預測,效率高的特點。python 一個字典裡有1m 個關鍵字,效能還快嗎?
-
3 # 飛翔的天地
雖然散列表的一般時間時間複雜度是O(1),但是它的最差時間複雜度是O(n)。紅黑樹的時間複雜度始終是O(log2n)
另外一點,散列表為了減少碰撞,需要開闢更大的buffer,以空間換時間。紅黑樹沒有這個問題。
-
4 # 惘客gy
你這問題就好比再問有了hash表為什麼還要紅黑樹,所以這種對比沒意義,各有所長,各取所需,而且c++標準庫早就有了基於紅黑樹和hash表的map
-
5 # GAOFENG507
紅黑樹o log n 雜湊表o 1
紅黑樹最大用途是資料是有序儲存的。例如紅黑樹裡儲存了1 2 3 8 9,查詢比6大的第一個key是什麼,會得到8,效率log n
-
6 # bluecore
STL裡東西就太多了,map也有用hash表的,建議你如果想了解清楚,就手擼一下,我們有的產品只有幾百K記憶體,遍歷和查詢幾十條資料都用RB樹
如果從檔案查詢,超過幾十條就在檔案裡建個hash表,因為檔案IO太慢,你們網際網路開發的不會理解
總之建議你自己手擼下,總共也沒多少行程式碼,我們經常連libc都不呼叫的
-
7 # 巽澤淵
java裡有hashmap和treemap,c++有unorderedmap和map。樓主說的這個問題本身就是不成立的。基於紅黑樹的map僅僅只是c++中map的一種實現而已。而且如果你要map中的元素有序,你用hashmap能實現嗎?
回答你這個問題,你需要先理解計算機體系。紅黑樹作為一種樹結構,記憶體不連續,執行演算法需要經常切換主記憶體地址進行IO操作,必然會帶來更多昂貴的匯流排時延。而hash或者堆排序使用的是連續記憶體,具有較好的記憶體IO可預測行,對CPU cache友好,實際效率要比樹結構可能要快很多。