1. 程式人生 > >各種資料結構的複雜度

各種資料結構的複雜度

1.二叉搜尋樹

定義:


1)搜尋(與根元素比較大小,然後再決定左子樹還是右子樹,後面的找最大元素和找最小元素是一樣的)、插入(像find一樣找到合適的位置,進行插入)、刪除、找最大元素、找最小元素的複雜度等於樹高,期望O(\log n),最壞O(n)(數列有序,樹退化成線性表)。

刪除怎麼刪除呢?

分為三種情形:

a.要刪除的節點是葉子節點,則直接刪除。

b.有一個孩子節點,則該節點可以在其父節點調整指標繞過該節點後被刪除。如下所示:


c.如果被刪除的節點,有兩個兒子呢?則如下圖所示:這點非常重要。切記,切記!!


2)構建二叉樹:最差時間複雜度為O(n^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).