第11章查找与排序.ppt

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本章内容 查找 顺序查找 二分查找 二叉排序树查找 哈希查找 平均查找长度的计算 查找的基本概念 查找:在数据元素集合(查找表)中查找关键字与给定值相等的数据元素。 关键字:数据元素中的一个或多个数据项值,它可以惟一标识一个数据元素。 平均查找长度(ASL): 顺序查找 要求: 查找表必须采用线性表。 基本思想:用给定值依次与线性表中每个元素的关键字进行比较。如果某个元素的关键字与给定值相同,则查找成功;如果找遍全表也没有发现满足条件的元素,则查找失败。 算法实现: 顺序表类和单链表类中的search函数。 顺序查找的平均查找长度 评价:在用顺序查找方法完成查找时,每进行一次成功查找需要的平均比较次数约为表长度的一半,因此,它的效率较低。适用于在查找表较小的情况下进行查找。 二分查找(折半查找) 要求: 必须以顺序方式存储线性表 线性表中所有数据元素必须按照关键字有序排列 基本思想:将给定值与处于顺序表“中间位置”上的元素的关键字进行比较,若相等则查找成功;若给定值大于关键字则在表的后半部分继续进行二分查找,否则在表的前半部分继续进行二分查找。如此进行下去直至找到满足条件的元素,或当前查找区为空,此时查找失败。 1.设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值。 2.初始时, 令 low = 0,high = n - 1,mid= ?(low+high)/2? 让 k 与 mid 指向的记录比较 若 k == r[mid] ,查找成功 若 k r[mid] ,则high = mid - 1 若 k r[mid] ,则low = mid + 1 3.重复上述操作,直至low high时,查找失败。 二分查找算法实现 二分查找过程 二分查找 在二分查找中,比较的次数取决于所要查找的元素在数组中的位置。对于n个元素的数组,在最坏的情况下所要查找的元素必须查到查找区间只剩下一个元素时才能找到或者能确定该元素根本不在数组中。 二分查找优缺点 优点: 查找效率高 平均查找长度 缺点: 查找前要将表中元素按关键字有序排列 只适用于线性表的顺序存储。适用于那种一经建立就很少改动而又经常需要查找的线性表。 搜索算法的效率 顺序搜索的平均时间性能 (1 + 2 + 3 + … + n ) / n = ( n + 1 ) / 2 二分查找的最坏情况的时间性能 n / 2 / 2 … / 2 / 2 = 1 n=2k 使用二分查找算法最多只需要k=log2n次比较即可 N和log2N的值 二叉排序树查找 将数据集合中的数据元素存储为一颗二叉排序树, 然后按给定方法进行查找。 二叉排序树的定义: 二叉排序树或者是一棵空二叉树,或者 是具有以下性质的二叉树: 若它的左子树非空,则左子树上所有结点的值均小于根结点的值; 若它的右子树非空,则右子树上所有结点的值均不小于根结点的值; 左、右子树本身又各是一棵二叉排序树。 哈希查找 哈希表 如果哈希函数是一一映射的,那么增、删、改、查的复杂度都是O(1)的。 如果关键字的可能值太多,而数组长度是有限的,那么哈希函数就只能是多对一的,就会产生碰撞。 哈希存储(哈希表) 哈希存储(哈希表): 以数据元素的关键字k为自变量,通过一定的函数关系计算出对应的函数值h(k),把这个值解释为数据元素的存储地址并把数据元素存储到相应的存储单元内(这个过程称为哈希)。h(k)称为哈希地址。 例:设有一组关键字值{85, 72, 49, 58, 15, 70, 90, 38}, 哈希函数 h(k) = k mod 12。则对应的哈希地址为: {1, 0, 1, 10, 3, 10, 6, 2} 冲突: 若有两个不同的关键字ki和kj,即ki ≠ kj(i ≠j)。 但h(ki) = h(kj),这种情况称为冲突。 ki与kj 称为同义词。 哈希表 碰撞的解决方法: 开放地址法:如果一个元素该在的位置已经有其他元素,就另安排一个空闲位置。 链地址法:映射到同一位置的元素被串成链表。 哈希查找 哈希表的查找过程和建表的过程相似,按哈希存储 的方法进行查找。 假设给定的关键字为k: ①根据建表时构造的哈希函数h,计算出哈希地址h(k),如果哈希表中该地址单元为空,则查找失败。 ②否则,将该地址中记录的关键字与给定值比较,如果相等,则查找成功;如果不等,则按建表时设定的处理冲突方法查找下一个地址。如此反复下去,直到某个地址单元为空(查找失败)或者关键字比较

文档评论(0)

502992 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档