數據結構:二叉查找樹 BST 平均查找長度 ASL 的計算

平均查找長度

ASL(Average Search Length),即平均查找長度,在查找運算中,由於所費時間在關鍵字的比較上,所以把平均需要和待查找值比較的關鍵字次數稱爲平均查找長度。

它的定義是這樣的:在這裏插入圖片描述

其中n爲查找表中元素個數,Pi爲查找第i個元素的概率,通常假設每個元素查找概率相同,Pi=1/n,Ci是找到第i個元素的比較次數。

順序查找平均查找長度的計算

在順序查找(Sequence Search)表中,查找方式爲從頭掃到尾,找到待查找元素即查找成功,若到尾部沒有找到,說明查找失敗。

所以說,Ci(第i個元素的比較次數)在於這個元素在查找表中的位置,如第0號元素就需要比較一次,第一號元素比較2次…第n號元素要比較n+1次。所以Ci=i;所以

查找成功 的平均查找長度:

在這裏插入圖片描述

查找失敗 的平均查找長度:
在這裏插入圖片描述

折半查找平均查找長度的計算

折半查找(Binary Search),首先待查找表是有序表,這是折半查找的要求。在折半查找中,用二叉樹描述查找過程,查找區間中間位置作爲根,左子表爲左子樹,右子表爲右子樹,因爲這顆樹也被成爲判定樹(decision tree)或比較樹(Comparison tree)。

查找方式爲(找k):先與樹根結點進行比較,若k小於根,則轉向左子樹繼續比較,若k大於根,則轉向右子樹,遞歸進行上述過程,直到查找成功或查找失敗。

在n個元素的折半查找判定樹中,由於關鍵字序列是用樹構建的,所以查找路徑實際爲樹中從根節點到被查結點的一條路徑,因爲比較次數剛好爲該元素在樹中的層數。所以:

查找成功 的平均查找長度:
在這裏插入圖片描述
其中,Pi爲查找k的概率,level(Ki)爲k對應內部結點的層次。而在這樣的判定樹中,會有n+!種查找失敗的情況,因爲將判定樹構建爲完全二叉樹,又有n+1個外部結點(用Ei(0<=i<=n)表示)

查找失敗 的平均查找長度:

在這裏插入圖片描述

qi表示查找屬於Ei中關鍵字的概率,level(Ui)表示Ei對應外部結點的層次。

在一顆有n個結點判定樹中,

在這裏插入圖片描述


例子:計算二叉查找樹的平均查找長度

例:給11個數據元素有序表(2,3,10,15,20,25,28,29,30,35,40)採用折半查找。則ASL成功和不成功分別是多少?

先畫出判定樹,
在這裏插入圖片描述

查找成功 的平均查找長度:
在這裏插入圖片描述

查找失敗 的平均查找長度:
在這裏插入圖片描述

參考:http://www.javashuo.com/article/p-ffxcrjbi-ex.html