数据结构与算法8分析.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法8分析

8.5 应用实例 8.5 应用实例 本章介绍了查找的基本概念,并在比较各种查找算法性能的基础上分析了他们的适用范围 重点讲解了各种常见查找算法的原理,并给出了完整的C++程序代码实现 最后结合具体应用实例讲解了如何在实际中应用查找算法 本章小结 8.3 动态查找及其实现 8.5 应用实例 8.1 查找算法及常见查找算法比较 8.4 哈希查找及其实现 8.2 静态查找及其实现 目录 查找是指根据给定值从一个数据集合中搜索某个元素的过程。若某个元素的关键字值与给定值相等,则查找成功;否则查找失败。 本教材给出的代码都是基于给定元素K进行查找,即将待查找数据集合中每一元素的关键字值与元素K的关键字值比较,若相等则查找成功。 8.1 查找算法及常见查找算法比较 查找可以分为静态查找和动态查找 静态查找只根据给定值在数据集合中按关键字查找匹配元素、访问匹配元素的属性,而不对数据集合进行插入元素、删除元素等操作 动态查找可能会在查找过程中向数据集合中插入一个新元素或从数据集合中删除一个已有元素 8.1 查找算法及常见查找算法比较 平均比较次数(也称为平均查找长度,Average Search Length,简写为ASL) 衡量查找算法性能优劣的标准 其中,n是待查找数据集合中的元素数目,pi是查找第i个元素的概率,ci是找到第i个元素所需的比较次数。 8.1 查找算法及常见查找算法比较 8.1 查找算法及常见查找算法比较 类别 查找算法 平均查找长度 数据集合要求 静态查找 顺序查找 (n+1)/2 任何存储结构,对数据集合无特别要求 折半查找 log2(n+1)-1 数据集合采用顺序表存储结构,且数据集合中的元素是按关键字大小有序排列的 分块查找 介于顺序查找和折半查找之间 除了待查找的数据集合外,还需建立一个索引表 动态查找 二叉排序树查找 O(log2n) 采用二叉排序树作为数据集合的存储结构 哈希查找 哈希查找 O(1) 采用哈希表作为数据集合的存储结构 8.2 静态查找及其实现 8.2.1 顺序查找 . 8.2.2 折半查找 8.2.3 分块查找 顺序查找的步骤 按预先规定的顺序依次将数据集合中每个元素的关键字与给定值进行比较,若某个元素的关键字与给定值相同,则查找成功; 若遍历所有元素后,仍没有找到关键字与给定值相同的元素,则查找失败。 8.2 静态查找及其实现 8.2.1 顺序查找 【描述8-1】顺序查找的算法描述。// 根据给定元素K对R进行顺序查找 template class T int SeqSearch(T R[], int nSize, T K) { int nI; R[0] = K; // R[0]作为监视哨 for (nI=nSize; R[nI]!=K; nI--) // 从表尾开始向前进行查找 ; return nI; // 将匹配元素在数组中的下标返回,查找失败则返回0 } 8.2 静态查找及其实现 8.2.1 顺序查找 折半查找(二分查找) 要求数据集合采用顺序表存储结构,且数据集合中的元素是按关键字大小有序排列的。 具体步骤为: 对于包含n个元素的递增数据集合R={R[1], R[2], …, R[n]}(R[i]≤R[i+1]),根据给定元素K进行折半查找,初始化待查找数据集合的下标起始位置low=1和结束位置high=n。 计算中间元素下标?(low+high)/2? ,若R[mid]==K,则查找成功,折半查找算法结束;若R[mid]K,则令low=mid+1;否则,若R[mid]K,则令high=mid-1。 若新的待查找数据集合不为空,即low≤high,则返回到上一步在新的数据集合(R[low],R[low+1],…,R[high])上继续进行折半查找;否则查找失败。 8.2 静态查找及其实现 . 8.2.2 折半查找 例如,对于一组具有关键字值{17, 22, 28, 30, 37, 43, 56, 70}的数据元素集合{R1, R2, …, R8},分别根据给定值k=56和k=25进行折半查找,其过程如图8-1(a)和(b)所示。 8.2 静态查找及其实现 . 8.2.2 折半查找 【描述8-2】折半查找的算法描述。// 根据给定元素K对R进行折半查找 template class T int BinSearch(T R[], int nSize, T K) { int low=1, high=nSize, mid; while (low = high) { mid = (low+high)/2; if (R[mid] == K) return mid; // 查找成功,返回匹配元素

文档评论(0)

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

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

1亿VIP精品文档

相关文档