各種資料結構的複雜度
阿新 • • 發佈:2019-01-07
1.二叉搜尋樹
定義:
1)搜尋(與根元素比較大小,然後再決定左子樹還是右子樹,後面的找最大元素和找最小元素是一樣的)、插入(像find一樣找到合適的位置,進行插入)、刪除、找最大元素、找最小元素的複雜度等於樹高,期望,最壞(數列有序,樹退化成線性表)。
刪除怎麼刪除呢?
分為三種情形:
a.要刪除的節點是葉子節點,則直接刪除。
b.有一個孩子節點,則該節點可以在其父節點調整指標繞過該節點後被刪除。如下所示:
c.如果被刪除的節點,有兩個兒子呢?則如下圖所示:這點非常重要。切記,切記!!
2)構建二叉樹:最差時間複雜度為。例如,若該組數值是有序的(從小到大),則建造出來的二叉查詢樹的所有節點, 都沒有左子樹。自平衡二叉查詢樹可以克服上述缺點,其時間複雜度為O(nlog n)
關於樹或二叉樹的一些結構上的定理:
a.一棵樹由N個節點,N-1條邊組成。
b.關於樹的深度和高度的定義見下:
備註:高度是從下往上累加的,深度是從上往下累加的,從0還是從1開始累加看題目。對同一個樹而言,樹的高度和深度是相同的概念,但對於結點而言是不同的概念,其深度和高度是不同的,計算的話就嚴格按照定義來!
c.
d.
2.二叉堆
二叉堆是完全二叉樹!!!
a.二叉堆的性質,對於位置i上的元素,左兒子在位置2i上,右兒子在2i+1上,父親在i/2上。
b.插入操作,單次插入最壞為O(logN),平均來看為O(1)。
記住,插入操作,使用上濾策略!!!
c.DeleteMin操作
記住,用下濾操作。!!!
平均和最壞時間複雜度都為O(logN)
d.BuildHeap
構建堆的時間複雜度為O(N).