首先,折半查找可以借助於一個二叉樹來描述。
為了簡化討論,則把這棵樹近似看成滿二叉樹,設二叉樹的高度為h(h>1)
則,根據二叉樹的性質,它有最大節點數,
則 (2是底數)。那么二叉樹的第j層節點數為:2^(j-1),當最后一層也就是j=h
假定每個元素的查找概率相等,則,pi=1/n (pi為第i個節點的查找概率)
那么平均查找長度為 1/n *(1*2^0+2*2^1+3*2^2+……+j*2^(j-1))
則經過化簡計算,得平均查找長度為:((n+1)/n ) *log2(n+1)-1 (其中對數中的2為底數:即log以2為底(n+1)的對數)
注 : 當n很大時 ,可近似為 log2(n+1)-1
例如:長度為10的折半查找判定樹的具體生成過程:
都遵循這個規律,左孩子結點<根結點<右孩子結點
(1)在長度為10的有序表中進行折半查找,不論查找哪個記錄,都必須和中間記錄進行比較,而中間記錄為
(1+10)/2 =5 (注意要取整) 即判定數的的根結點為5,如圖7-2(a)所示。
(2)考慮判定樹的左子樹,即將查找區域調整到左半區,此時的查找區間為[1,4],那么中間值為(1+4)/2 =2 (注意要取整) ,所以做孩子根結點為2,如圖7-2(b)所示。
(3)考慮判定樹的右子樹,即將查找區域調整到右半區,此時的查找區間為[6,10],那么中間值為(6+10)/2 =8 (注意要取整) ,所以做孩子根結點為8,如圖7-2(c)所示。
(4)重復以上步驟,依次去確定左右孩子

1.折半查找是一棵二叉排序樹,每個根結點的值都大於左子樹的所有結點的值,小於右子樹所有結點的值。
2.折半查找判定數中的結點都是查找成功的情況,將每個結點的空指針指向一個實際上不存在的結點————外結點,所有外界點都是查找不成功的情況,如圖7-2(e)所示。如果有序表的長度為n,則外結點一定有n+1個
折半查找判定數中,某結點所在的層數就是即將要比較的次數,整個判定樹代表的有序表的平均查找長度即為查找每個結點的比較次數之和除以有序表的 長度。
例如:長度為10的有序表的平均查找長度為
ASL=(1*1+2*2+3*4+4*3)/10=29/10;
折半查找判定數中,查找不成功的次數即為查找相應外結點與內結點的比較次數。整個判定樹代表的有序表的平均查找長度。查找失敗時的有序表的平均查找長度即為查找每個外結點的比較次數之和除以外結點的個數。
如圖7-2(e)所示
例如:查找失敗時,。長度為10的有序表的平均查找長度為
ASL=(3*5+4*6)/11=39/11;