extra1 二分查詢與二叉判定樹

2022-08-16 02:51:12 字數 2143 閱讀 2420

目錄二叉判定樹是用於描述解決問題的思路,比如可以使用判定樹描述n個數的比較過程,是一種對過程的描述。

它也可以用於描述二分查詢(即折半查詢,以下都作二分查詢)的過程。

描述二分查詢的二叉判定樹,我們也可以叫折半查詢判定樹,

從這樣的判定樹,我們可以分析二分查詢演算法的效率,

當n=0時,折半查詢判定樹為空;

當n>0時,折半查詢判定樹的根結點是有序表中序號為mid=(n+1)/2的記錄,根結點的左子樹是與有序表r[1] ~ r[mid-1]相對應的折半查詢判定樹,根結點的右子樹是與r[mid+1] ~ r[n]相對應的折半查詢判定樹。

在長度為10的有序表中進行折半查詢,

先和中間記錄進行比較,而中間記錄的序號為(1+10)/2=5,

即判定樹的根結點是5,如圖7-2(a)所示;

考慮判定樹的左子樹,即 將查詢區間調整到左半區,此時的查詢區間是[1,4],也就是,左分支上根結點的值減1,代表查詢區間的上限high,此時,根結點的左孩子是(1+4)/2=2,如圖7-2(b)所示;

考慮判定樹的右子樹,即 將查詢區間調整到右半區,此時的查詢區間是[6,10],也就是,右分支上根結點的值加1,代表查詢區間的下限low,此時,根結點的右孩子是(6+10)/2=8,如圖7-2(c)所示;

重複⑵⑶步,依次確定每個結點的左右孩子,不斷縮小,如圖7-2(d)所示。

折半查詢判定樹 是一顆 二叉判定樹 也是 一棵二叉排序/查詢樹,即每個結點的值均大於其左子樹上所有結點的值,小於其右子樹上所有結點的值;

折半查詢判定樹中的結點都是查詢成功的情況,

而將每個結點的空指標指向的乙個實際上並不存在的結點——稱為外結點,所有外結點即是查詢不成功的情況,

如圖7-2(e)虛線框所示。如果有序表的長度為n,則外結點一定有n+1個。

在折半查詢判定樹中,某結點所在的層數即是查詢該結點的比較次數。

查詢不成功時的比較次數即是查詢相應外結點時與內結點的比較次數。

或者換一種方式說:

成功的折半查詢過程,恰好是走了一條從根到被查記錄的路徑,比較次數恰為該記錄在樹中的層數。

若查詢失敗,則其比較過程是一條根到某個外部結點的路徑,比較次數是該路徑上內部結點的總數。

整個判定樹代表的有序表的平均查詢長度即為查詢每個結點的比較次數之和除以有序表的長度。例如,長度為10的有序表的平均查詢長度為: asl=(1×1+2×2+3×4+4×3)/10=29/10

整個判定樹代表的有序表在查詢失敗時的平均查詢長度即為查詢每個外結點的比較次數之和除以外結點的個數(1+n)。例如,長度為10的有序表在查詢失敗時的平均查詢長度為: asl=(3×5+4×6)/11=39/11

查詢成功:

①(每層結點數 × 比較次數(層數))/n

構造折半二叉樹的流程

例:畫出(3,17,22,27,40,55,61,75,80,91,97)的折半二叉樹

①序列總長度為 n = 11 > 2^3 -1 = 7,即可判定二叉判定樹為4層,第4層不滿

②先畫滿n-1的完全二叉樹

③還剩幾個結點,遵循先右後左補全

④根據中序遍歷順序填入

結果如圖:查詢流程:

比如查詢75:

①查詢成功,查詢到第四層結點

②先拿75和55比較,75大,進入當前結點的左子樹,反之進入右子樹

③重複②,除非得到相等結果 或 找不到 以下一層的外節點表示。

​ 查詢50:

​ ①查詢失敗,查詢到第五層外節點

​ ②先拿50和55比較。55小,進入當前結點的右子樹,反之進入左子樹

​ ③重複②,除非得到相等結果 或 找不到 以下一層的外節點表示。

比較次數:

查詢75:與55比較,與80比較,與61比較,與75比較得到結果——>4次

查詢50:與55比較,與22比較,與27比較,與40比較得到外結點——>4次

查詢成功時的平均查詢長度:【查詢每個結點的比較次數之和除以有序表的長度】

asl=(1×1+2×2+3×4+4×4)/10=33/11=3

查詢失敗時的平均查詢長度:【查詢每個外結點的比較次數之和除以外結點的個數】

asl=(3×4+4×8)/12=44/12=11/3

二分查詢與二分答案(1)

我們在寫程式的時候,經常會遇到這樣一類問題 在乙個陣列中查詢乙個數是不是存在。比如在下圖的陣列中,查詢8是不是存在 如果不要求效率,我們最一般的查詢方法就是順序查詢,依次檢視a 0 a 1 a n 1 檢查是不是等於8。這樣對於長度為n的陣列,平均查詢長度是n 2 如果陣列是有序的,比如是遞增的,就...

二分查詢和二叉查詢樹

二分查詢要求元素排列有序。首先,假設表中元素是按公升序排列,將陣列中間位置的元素與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將陣列分成前 後兩個子陣列,如果中間位置記錄的元素大於查詢關鍵字,則進一步查詢前一子陣列,否則進一步查詢後一子陣列。重複以上過程,直到找到滿足條件的記錄,使...

題目1 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...