数据结构第9章精要.pptVIP

  • 4
  • 0
  • 约7.52千字
  • 约 89页
  • 2017-04-21 发布于湖北
  • 举报
数据结构第9章精要

9.1 查找的基本概念 9.2 静态查找表——基于线性表的查找法 9.3 动态查找表——基于树表的查找法 9.4 哈希表——计算式查找法;查找和排序是数据处理系统中最重要的两个操作;;;对文件经常进行的操作有:;查找表 由同一类型的数据元素(记录)构成的集合。 查找的定义 给定一个值key,在含有n个记录的表中找出关键字等于key的记录。若找到,则查找成功,返回该记录的信息或该记录在表中的位置;否则查找失败,返回相关的指示信息。;静态查找表(Static Search Table):查询某个特定的元素是否在表中;检索某个特定的元素的各种属性。 动态查找表(Dynamic Search Table):若在查找的同时对表做修改运算(如插入和删除)。;2. 查找操作的性能分析;在表的组织方式中,线性表是最简单的一种。三种在线性表上进行查找的方法: (1) 顺序查找 (2) 折半查找(二分查找) (3) 索引顺序表查找(分块查找)。 因为不考虑在查找的同时对表做修改,故上述三种查找操作都是在静态查找表上实现的。;1.顺序查找 顺序查找法的特点:用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。存储结构通常为顺序结构,也可为链式结构。;typedef struct{ ElemType *elem; int length; }SSTable;;顺序查找的平均查找长度ASL: 假设表长度为n,那么查找到第i个记录时,和给定值已进行过比较的关键字个数为n-i+1,即Ci=n-i+1。又假设查找每个数据元素的概率相等,即Pi=1/n, 则顺序查找算法的平均查找长度为:;2. 折半查找法 (二分法查找法);折半查找;int Search_Bin (SSTable ST, int key) { low=1; high=ST.length; while( low=high ) { mid = (low+high)/2; if (ST.elem[mid].key == key) /*查找成功返回*/ return mid; if (ST.elem[mid].key key) high=mid-1; /*继续在[low..mid-1]中查找*/ else low=mid+1; /*继续在[mid+1..high]中查找*/ } return 0; };判定树(比较树):二分查找过程可用二叉树来描述,把当前查找区间的中间位置上的记录作为根,左子表和右子表中的记录分别作为根的左子树和右子树。;折半查找成功时的平均查找长度ASL 假定表的长度n=2h-1,则相应判定树必为深度是h的满二叉树,h=log2(n+1)。又假设每个记录的查找概率相等, 则折半查找成功时的平均查找长度为:;折半查找判定树 ;3.索引顺序查找(分块查找) 是一种性能介于顺序查找和二分查找之间的查找方法。 将表[1..n-1]均分为b块,前b-1块中记录个数为s=?n/b?,最后一块即第b块的记录数小于等于s; 每一块中的关键字不一定有序,但前一块中的最 大关键字必须小于后一块中的最小关键字,即要 “分块有序”。 抽取各块中的最大关键字及其起始位置构成一个 索引表ID[b]。由于表R[n]是分块有序的,所以索 引表是一个递增有序表。 ; 例如,设有一个线性表,其中包含25个记录,其关键字序列为{8,14,6,9,10,22,34,18,19,31,40,38,54,66, 46,71,78,68,80,85, 100, 94,88,96,87}。假设将25个记录分为5块,每块中有5个记录,该线性表的索引存储结构如下图所示。 ;查找索引表的ASL为:LB;块内进行顺序查找的ASL为LW。  ASLbs=LB+LW b块,每块含s个元素。查找概率相等,则每个索引项的查找概率为1/b,块中每个元素的查找概率为1/s。 若用顺序查找法确定待查元素所在的块,则有 ;静态查找表的三种查找方法的比较 顺序查找对对于表有序、无序均适用;折半查找仅适用于有序表;分块查找要求表分块后“分块有序”。 从表的存储结构上看,顺序查找和分块查找对于表的顺序和链式存储结构均适用,而折半查找只适用于顺序存储结构。 平均查找长度ASL而言,折半最小(log2(n+1)-1),分块次之( ),顺序最大((n+1)/2)。;作业: 9.2

文档评论(0)

1亿VIP精品文档

相关文档