1. 程式人生 > >最小堆/雜湊表/二叉樹/平衡二叉樹/紅黑樹的意義

最小堆/雜湊表/二叉樹/平衡二叉樹/紅黑樹的意義

接觸堆資料結構是在排序裡面講的,空間複雜度O(1),時間複雜度O(NlogN),但是在實踐中還是不如快速排序(好像快速排序可以更好的利用硬體特性)。堆 的意義就在於:最快的找到最大/最小值,在堆結構中插入一個值重新構造堆結構,取走最大/最下值後重新構造堆結構 其時間複雜度為O(logN),而其他方法最少為O(N).堆實踐中用途不在於排序,其主要用在排程演算法中,比如優先順序排程,每次取優先順序最高的,時間驅 動,取時間最小/等待最長的 等等 ,分為最大堆/最小堆。

雜湊表主要可以在O(1)時間內對查詢物件定位,但是事實上,如果輸入集合不確定的情況下,可能出現大量的衝突,雖然有很多好的雜湊函式,但是隨著隨機輸入,大量衝突還是不可避免,可能出現最差情況。所以,雜湊表如果用在輸入集合確定(即以後只會做查詢操作)的情況下,選擇合適的函式函式和解決衝突的方法(perfect hash)可以在O(1)時間內完成查詢(有證明,看不懂)。

二叉樹支援動態的插入和查詢,保證操作在O(height)時間,這就是完成了雜湊表不便完成的工作,動態性。但是二叉樹有可能出現worst-case,如果輸入序列已經排序,則時間複雜度為O(N)

平衡二叉樹/紅黑樹就是為了將查詢的時間複雜度保證在O(logN)範圍內。

所以如果輸入結合確定,所需要的就是查詢,則可以考慮使用雜湊表,如果輸入集合不確定,則考慮使用平衡二叉樹/紅黑樹,保證達到最大效率