顺序查找和折半查找的ASL(average search length)计算方法

时间:2024-04-12 11:12:31

ASL(关键字的平均比较次数)=∑Pi*Ci(i....n)

n:记录的个数,Pi:查找第i个记录的概率(通常认为pi=1/n),ci:找到第i个记录所需要的比较次数。

顺序查找

例:

int Search_Seq( SSTable  ST , KeyType  key )

{    //若成功返回其位置信息,否则返回0  

ST.R[0].key =key;    

for( i=ST.length; ST.R[ i ].key!=key;  - - i  );  

//不用for(i=n; i>0; - -i) 或 for(i=1; i<=n; i++)    

 return i;

}

1) 查找成功时的平均查找长度   设表中各记录查找概率相等     ASLs(n)=(1+2+ ... +n)/n =(n+1)/2。

2)查找不成功时的平均查找长度    ASLf =n+1。

对于顺序查找,查找概率相等时,ASL相同。 查找概率不等时,如果从前向后查找,则按查找概率由大到小排列的有序表其ASL要比无序表ASL小。

折半查找:

顺序查找和折半查找的ASL(average search length)计算方法

如图,根据判定树求解,假设每个元素的查找概率相等,则查找成功时的asl=1/11(概率)*(1*1+2*2+4*3+4*4)。第一层的一个数比较成功时所需比较次数一次,第二层的两个数需要两次,依此类推。即查找成功时比较次数:为该结点在判定树上的层次数,不超过树的深度  d = 【 log2 n 】(向下取值)  + 1, 查找不成功的过程就是走了一条从根结点到外部结点的路径d或d-1。

最近在学数据结构,很多地方不会,所以整理一下,当做个笔记,错误的地方请指正。