46322-数据结构各章讲稿ds8查找算法.pptxVIP

  • 3
  • 0
  • 约1.32万字
  • 约 91页
  • 2022-05-24 发布于北京
  • 举报
第8章 查找算法;8.1 查找的基本概念;(2)查找表指由具有同一类型(属性)的数据元素组成的集合。 静态查找表只允许进行查找,不能改变表中的数据元素。 动态查找表不仅可以实现查找,还允许向表中插入或删除数据元素。 (3)查找是指在查找表中查找键值与待查元素值相等的过程。 (4)平均查找长度是指查找过程中对键需要执行的平均比较次数,是一个查找算法优劣的衡量标准。 对n个对象记录进行查找时,平均查找长度为: ;8.2 静态查找表;顺序表类的定义如下: 算法8.2:顺序表类的定义 class Sqtable{ private: datanode r[MAXSIZE]; //数组,查找表 int n; //数据元素个数,表长 public: Sqtable(); void create(); void output(); void sq_search(KeyType k); //顺序查找 void binary_search(KeyType k); //折半查找 }; ;8.2.1 顺序表的查找;已知表r,关键字数据K,表长n: 算法8.3:顺序查找算法 void Sqtable::sq_search(KeyType K){ r[n].key=K; //设置监视哨 int i=0; while(r[i].key!=K) i++; if(in)cout\n 查找成功,该记录对应的下标为:iendl; else cout\n 查找失败!\nendl; } ;顺序表的性能分析:;对顺序表的查找有如下三种改进策略: ① 每次成功查找将被查元素移动到查找表的表头; ② 每次成功查找将被查元素向前移动一个位置; ③ 给每个元素增加一个频率域,每次成功查找时,更新该元素的频率并且移动元素的位置,以保持查找表中的元素按频率从大到小存储。 ;8.2.2 折半查找;【例8.1】已知一个有11个数据元素的有序表(关键字即为数据元素的值):(04,15,20,27,39,46,59,61,78,82,95),以折半查找方法查找关键字为27和86的数据元素。 其中:方括号表示当前的查找区间,“↑”指向中间、下界和上界位置。 ;(1)如查找给定值key=27的元素;(2)如查找给定值key=86;算法8.4:折半查找的非递归算法 void Sqtable:: binary_search(KeyType K){ int mid,low,high,find; low=0;high=n-1;find=0; do{ mid=(low+high)/2; if(K==r[mid].key){ cout\n查找成功,该记录对应的下标为:midendl; find=1; } else if(Kr[mid].key) high=mid-1; else low=mid+1; }while(find==0low=high); if(find==0) cout查找失败!\nendl; } ;算法8.5:折半查找的递归算法 static int binsearch( int rec[], int k, int low, int high){ if ( low high ) return –1; int mid = (low + high) / 2; if ( k == rec[mid] ) return mid; else if ( k rec[mid] ) binsearch(rec, k, low, mid-1); else binsearch(rec, k, mid+1, high); } ;折半查找算法的复杂度分析: 折半查找可描述为二叉树的形式,称为折半查找判定树。设待查区间为[low..high],则折半查找判定树递归定义如下: (1)如果lowhigh,则折半查找判定树为空。 (2)如果low=high,则折半查找判定树的根为mid=(low+high)/2,左子树的查找区间为[low..mid-1],右子树的查找区间为[mid+1..high]。 ;?;查找的优点与缺点:;8.3 散列表;8.3.1 哈希函数的常用构建方法;直接定址法 哈希函数Hash(key)=a*key+b,其中a和b都为常数。 直接定址法取关键字的某个线性函数值为哈希地址。 此类哈希函数计算方法最简单,是一对一的映射,一般不会产生冲突。但是,直接定址法要求所得的哈希地址空间的大小与关键字集合的大小相同。如果关键字的集合很大时,哈希地址空间不可能取到那么大。 直接定址法适用于关

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档