顺序查找 折半查找的平均查找长度分析
ASL:平均查找长度
其中n为查找表中元素个数,Pi为查找第i个元素的概率,通常假设每个元素查找概率相同,Pi=1/n,Ci是找到第i个元素的比较次数。
A
S
L
=
∑
i
=
1
n
p
i
c
i
ASL=\sum_{i=1}^{n} p_ic_i
ASL=i=1∑npici
一般顺序查找的平均查找长度:
- 因为顺序查找就是顺序存储 一个一个比较,所以如果查找成功的话说明就和之前不相等的元素已经比较过了。
- 所以第 n 个元素就是比较了 n 次
- 每个元素都比较了其所在位序的次数
- 每个元素被查找的概率都是1/n 所以
A S L 成 功 = 1 n ( 1 + 2 + 3 + … + n ) = n + 1 2 ASL_{成功}=\frac{1}{n}(1+2+3+…+n)=\frac{n+1}{2} ASL成功=n1(1+2+3+…+n)=2n+1
$ASL_{成功}=n+1 $
有序顺序表的平均查找长度:
-
查找成功的 ASL 不影响
-
如果查找不成功的话,因为顺序表有序,所以可以提前结束,从而缩短查找失败的比较次数,需要画个简单【判定树】
-
举个例子,在[10 20 30 40 50 60]中查找
- 失败的一共有 n+1个结点,所以每个结点的概率就是 1 n + 1 \frac{1}{n+1} n+11
- 比较次数是 每个失败结点上一层的层数
A S L 失 败 = 1 n + 1 [ 1 + 2 + 3 + … + n + n ] = n 2 + n n + 1 ASL_{失败} = \frac{1}{n+1}[1+2+3+…+n+n]=\frac{n}{2}+\frac{n}{n+1} ASL失败=n+11[1+2+3+…+n+n]=2n+n+1n
折半查找的平均查找长度:
-
要涉及到判定树:n 个元素就有n 个【内部结点】 n+1个【外部结点】
-
【判定树】一定是【满二叉树】
-
根据折半算法画出初级判定树(只有内部结点),其他空位用【查找失败的方框代替】
-
算 ASL 直接就是算 [每层结点的个数*层数]➗结点个数
- 不成功要具体例子具体计算。