第七章查找学习小结

一、查找及部分基本概念

  部分概念:

  1. 查找表: 要进行查找的数据结构,可以是线性表、树表、散列表等。

  2. 关键字: 能够标识一个元素的数据项。

  3. 动态查找和静态查找: 查找过程中可以对查找表进行操作(比如说插入、删除)称为动态查找表,不能操作则为静态查找表。

  4. 平均查找长度(ASL):为确定要查找的元素而需要与其他元素进行比较的期望值。 

  ASL = (c1p1 + c2p2 + ... + cnpn) / n  其中pi是第i条记录的概率,ci为找到第i条记录时与给定值已经比较过的次数。

  如果单说查找,我们其实已经非常熟悉了。但是本章着重解决的是在不同的情境下不同查找方法的效率问题,下面我会回顾书上学习到的几个查找的基本方法并分析其在不同应用情境下的优劣性。

二、线性表的查找

  1. 顺序查找  从头遍历到尾(也可以倒过来)

   特别指出:设置监视哨的顺序查找,其相较于普通查找的区别在于:通过改变判断条件减小了比较次数

int Search(SSTable ST , KeyType key){
  ST.R[0]. key = key;
  for(i = ST.length; ST.R[i] . key != key ; --i);
  return i;
}
设置监视哨的顺序查找

  ASL分析:若查找概率相同且进行顺序查找,概率相同:p1 + p2 +... +pn = 1; 顺序查找:(1+2+...+n)/n = (1+n)*n/2n =   (n+1)/2;

  故ASL = (1+n)/2

  2. 折半查找  

   从表的中间记录开始,比较给定值和中间记录是否相等。如果不相等,则在大于或者小于中间值的一部分再次进行折半查找。

   ASL分析:若查找概率相同,ASL = (c1+c2+...+cn)/n ;  c min = 1 , c max = 不大于log2 n的整数 +1 ;ASL = (1 * 2^(1-1) + 2 * 2^(2-1) + ... + (log2 n +1)*2^(log2n))/n = (n+1)*log2(n+1)/n -1 n较大时取近似值log2(n+1)-1

  ASL = log2(n+1) - 1

  

猜你喜欢

转载自www.cnblogs.com/suhan717/p/10965143.html