查詢——平均查詢長度
阿新 • • 發佈:2019-01-05
查詢有以下查詢方式:
- 順序表查詢
- 二分查詢
- 索引表查詢
- 二叉排序樹查詢
- 雜湊表查詢
接下來整理一下上面每個方式的平均查詢長度
順序表查詢ASL
如果每個關鍵字查詢概率相同,則ASL = (n+1)/2。
一般都是概率相同。
二分查詢ASL
舉例說明:
這是一個有序序列(下標和關鍵字相同): 0 1 2 3 4 初始化:low = 0, high = 4 第一次: mid = (0+4)/2 = 2 , 則2為第一次找到的關鍵字。 所以n2 = 1 第二次: 如果mid小了,則low = 3, mid = (3+4)/2=3;則3為第二次找到的關鍵字 如果mid大了,則high = 1, mid = (0+1)/2=0;則0為第二次找到的關鍵字 所以n0 = n3 = 2 第三次: 過程不在贅述 n1 = n4 = 3 所以ASL = (n0+n1+n2+n3+n4)/5 = 11/5
索引表ASL
假設序列分成了n塊,每塊k個元素,那麼ASL = LB + LA
那麼ASL = (1+n)/2 + (1+k)/2
二叉排序樹
根據給定的序列建立好二叉排序樹。
比如序列 20, 12, 42, 31, 18, 14, 28
二叉排序樹如下:
20
12 42
18 31
14 28
假設有n個結點,則ASL =
這裡的hi是每個結點的深度,比如20的深度為1, 12的深度為2等,所以上面例子的ASL = (1+2+2+3+3+4+4)/7 = 19/7。
雜湊表ASL
1.線性探測法:
假設第i個關鍵字的探測次數為Pi
則ASL =
舉例:
已知待雜湊的線性表為(36, 15, 40, 63, 22),雜湊用的一維地址空間為[0..6],假定選用的雜湊函式為H(k) = K mod 7,採用線性探測解決衝突
36 mod 7 = 1
15 mod 7 = 1
40 mod 7 = 5
63 mod 7 = 0
22 mod 7 = 1
所以36的探測次數為0,15的探測次數為1,40的探測次數為0,63的探測次數為0,22的探測次數為2
則ASL = ((0+1) + (1+1) + (0+1) + (0+1) + (2+1)) / 5 = 1.6
2.鏈地址法
還是上面的例子線性表為(36, 15, 40, 63, 22),鏈地址給[0..6]
0 -> 63
1 -> 36 -> 15 -> 22
2 -> NULL
3 -> NULL
4 -> NULL
5 -> 40
6 -> NULL
第一列有3個關鍵字63,36,40; 第二列有1個關鍵字15; 第三列有1個關鍵字22
∴ ASL = (1 * 3 + 2 + 3) / 5 = 1.6