软基复习11--检索与排序.pptxVIP

  • 4
  • 0
  • 约1.06万字
  • 约 62页
  • 2021-03-28 发布于北京
  • 举报
软件技术基础检索制作主讲段景山第五章 检索检索的基本方法检索5.1检索检索是依据元素的关键字,在结构中找寻元素的方法关键字:元素的标志,检索的依据一般情况下,关键字是一个元素的唯一标识检索检索的方法与数据结构的关系数据结构决定了检索的方法有时为提高检索效率,需要对数据结构采用特殊的实现方式例,按成绩检索学生,检索一个学生成绩递增的表格比杂乱的表格效率高检索效率的一般评价依据:比较次数最多、最少和平均比较次数检索 顺序检索5.1 顺序检索 顺序查找从头开始逐个检索直到找到需要的结点i = 0;while( i table-length){ if( table-a[i].key == our_key) break; i = i+1; }if (i table-length )return i;找到所需的结点elseerror(“ no such item ”);??平均查找次数检索 二分检索5.2 折半(二分)检索方法描述:元素按关键字大小排列,每次查询查找范围内的“中间位置”结点。若该结点不是所需,则缩小查找范围为前半部分或后半部分(要求元素按关键字大小排列)mm = length / 2a[ i ].key a[m].keya[ j ].key a[m].key检索 二分检索算法框架每次将检索范围缩小一半,直到范围中结点的个数为0while(L = h){ 核心算法: 判断是否找到所需结点; 否则,将范围减半;}检索 二分检索hL核心算法确定检索范围:L:上限;h:下限 所以L ≤ h确定“中间位置”的节点:m =(L +h)/2若key大于m的关键字L = m + 1;缩小查询范围为后半部分若key小于m的关键字h = m - 1;缩小查询范围为前半部分若key与m的关键字相同,则找到结点mmid = ( L + h )/ 2;if(key a[mid].key )L = m + 1;else if ( a[mid].key key )h = mid – 1;else{ find item,break; }检索 二分检索Lhint binary_search( key , table ){ L = 0; h = table-length –1; while ( ){ }L = hmid = ( L + h ) / 2;if( table-data[mid].key == key) break;else if( key table-data[ mid].key ) else L = mid +1;h = mid –1;if ( L = h )return mid;else return –1;}检索 二分检索平均查找次数???13层检索 二分检索排序无序的线性表必须 才能使用二分检索 数组实现的顺序表 用二分检索单链表 用二分检索排序二叉树 用二分查找不适合适合适合13层检索顺序检索与二分检索在检索有序线性表时,顺序检索效率较低对于无序线性表,二分检索要求必须对无序线性表先进行排序引例今天要发作业,离上课只有5分钟的时间了,厚厚的一摞作业本子,要怎样做才能让同学们尽快地找到自己的本子呢?你观察过段老师平时是怎么做的吗?要实现二分检索,作业本应该怎样摆放呢?如果没有太多的时间准备。把作业本都按学号排好序,摞成一摞是最好的方法吗?检索 分块检索5.3 分块检索将检索对象分块,块内无序,块间有序。块内使用较低效的顺序查找块间通过排序可使用较高效的查找方法可做出块的索引表,进一步针对块索引表进行折半检索x = 3030 x = 6565 x = 8611 9 30 1435 50 65 5586 70 78 67索引表863065检索 哈希检索5.4 哈希(hash)检索 散列检索根据关键字,进行运算,确定元素存储位置理想平均查找次数:哈希运算keyhash(key)元素在线性表中的位置hash运算地址空间关键字空间映射1检索 哈希检索5.4.1 hash算法截段法:从关键字中截取一段例:关键字为学号,在管理时可从关键字中截取后三位作为元素在表格中的存放位置。除法:将关键字除以表格长度,取其余数。乘法:分段迭加法:其它算法检索 哈希检索5.4.2 冲突及解决冲突较大的关键字空间映射到较小的存放地址空间内,可能出现不同的关键字映射到同一个地址即:hash(key1) = hash(key2)解决方法外链表法(链地址法)开放地址法检索 哈希检索5.4.3 外链表法 (链地址法)将hash值相同的表项,使用链表链在一起hash(k1) = hash(k4)k1k4k2k3k28hash(k2) = hash(k3) =

文档评论(0)

1亿VIP精品文档

相关文档