数据结构C++9.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构C9

数据结构 第9章 检 索 肖 正 信息与智能系统系 xiaozheng206@ 主要内容 基本概念 9.1 检索已排序的数组 9.2 自组织线性表 9.3 集合的检索 9.4 散列方法 9.4.1 散列函数 9.4.2 开散列方法 9.4.3 闭散列方法 基本概念 检索 检索的效率非常重要 尤其对于大数据量 需要对数据进行特殊的存储处理 在一组记录集合中找到关键码值等于给定值的某个记录,或者找到关键码值符合特定条件的某些记录的过程 提高检索效率的方法 预排序 建立索引 散列技术 当散列方法不适合于基于磁盘的应用程序时,我们可以选择B树方法 排序算法本身比较费时 只是预处理(在检索之前已经完成) 检索时充分利用辅助索引信息 牺牲一定的空间 从而提高检索效率 把数据组织到一个表中 根据关键码的值确定表中记录的位置 缺点: 不适合进行范围查询 一般也不允许出现重复关键码 平均检索长度(ASL) 关键码的比较:检索运算的主要操作 平均检索长度(Average Search Length) 检索过程中对关键码的平均比较次数 衡量检索算法优劣的时间标准 ASL是存储结构中对象总数n的函数 Pi 为检索第 i 个元素的概率 Ci 为找到第 i 个元素所需的关键码值与给定值的比较次数 平均检索长度的例子 假设线性表为(a, b, c)检索a、b、c的概率分别为0.4、0.1、0.5 顺序检索算法的平均检索长度为0.4×1+0.1×2+0.5×3 = 2.1 即平均需要2.1次给定值与表中关键码值的比较才能找到待查元素 检索算法评估的几个问题 衡量一个检索算法还需要考虑 算法所需的存储量 算法的复杂性 ... 9.1 检索已排序的数组 顺序检索算法 二分法检索算法 字典检索(或称插值检索)算法 按频率排列记录 按照出现的(期望)频率对线性表排序 顺序查找 访问第一个记录的代价: 1 访问第二个记录的代价: 2 …… 期望检索代价: 示例(1) 所有记录的访问频率相等。 (2) 频率为指数概率分布 示例(2) Zipf分布: 自然语言中单词使用频率的分布 城市人口规模分布等 80/20 规则: 80%的访问都是对20%的记录进行的 对于符合80/20规则的分布: 其他分布 自组织线性表 自组织线性表根据实际的记录访问模式在线性表中修改记录顺序。 自组织线性表使用启发式规则决定如何重新排列线性表。这些启发式规则类似于管理缓冲池的规则 启发式规则 计数法:为每条记录保存一个访问计数,而且一直按照这个顺序维护记录。(类似于缓冲池替代策略中的“最不频繁使用”LFU法) 移至前端法:如果找到一条记录就把它放到线性表的最前面,而把其他记录后退一个位置。(类似于缓冲池替代策略中的“最近最少使用”LRU法) 转置法:把找到的记录与它在线性表中的前一个记录交换位置。 例子:文本压缩 应用:压缩并传送消息的算法 根据移至前端启发式规则,保存一个已出现单词的表: 如果单词第一次出现,就传送这个单词。把这个单词放到线性表的前面; 否则,如果单词已经出现,就传送这个单词在线性表中当前的位置,把这个单词移到线性表的前面。 输入:The car on the left hit the car I left 输出:The car on 3 left hit 3 5 I 5 这种压缩方法的思想类似于Ziv-Lempel编码算法。 9.3 集合的检索 位向量(bit vector)或位图(bitmap) 计算数字0到数字15之间奇素数集合: 0011010100010100 0101010101010101 9.4 散列方法 散列中的基本问题 散列函数 开散列方法 闭散列方法 闭散列表的算法实现 散列方法的效率分析 碰撞的处理 散列中的基本问题 基于关键码比较的检索 顺序检索,==, != 二分法、树型 , == , 检索是直接面向用户的操作 当问题规模n很大时,上述检索的时间效率可能使得用户无法忍受 最理想的情况 根据关键码值,直接找到记录的存储地址 不需要把待查关键码与候选记录集合的某些记录进行逐个比较 例如,读取指定下标的数组元素 根据数组的起始存储地址、以及数组下标值而直接计算出来的,所花费的时间是O(1) 与数组元素个数的规模n无关 受此启发,计算机科学家发明了散列方法(Hash, 有人称“哈希”,还有称“杂凑”)散列是一种重要的存储方法 也是一种常见的检索方法 由数组的直接寻址想到的 一个确定的函数关系h 以结点的关键码K为自变量 函数值h(K)作为结点的存储地址 检索时也是根据这个函数计算其存储位置 通常散列表的存储空间是一个一维数组 散列地址是数组的下标 散列基本思想 例子1 已

文档评论(0)

wuailuo + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档