logo

您所在位置网站首页 > 海量文档  > 高等教育 > 微积分

散列法(hashing)检索.ppt 25页

本文档一共被下载: ,您可全文免费在线阅读后下载本文档。

  • 支付并下载
  • 收藏该文档
  • 百度一下本文档
  • 修改文档简介
全屏预览

下载提示

1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
散列法(hashing)检索 2007/05/18 关于作业 分层次的介绍自己的设计 要学会利用图示阐明自己的思想 One picture is worth a thousand words 要侧重最坏情况的考察与分析 最好能根据具体的应用问题给出定制的数据结构与算法解决方案。 应用场景设定与数据分析 图书馆、人事档案、网络搜索引擎、bbs… 数据分析: 基础数据结构 数据量 数据格式、索引 数据操作(等概率假设?) 只读、批量追加(更新、删除) 频繁读写 只写,批量恢复 在线、离线 数据结构设计 基础数据存储方式 数据结构与算法的设计: 动态、静态 检索: 查找 浏览 统计 重复键值: 有没有实际应用需求? 如何套用、改进、设计相关的数据结构与算法 常用的数据结构回顾 队列、栈: 反映问题处理流程。 线性表: 基于连续存储 有序:支持直接存取O(1)、二分 O(log2n),插入删除不方便 无序:遍历。 O(n) 基于链表存储: O(n),动态插入删除较方便。 排序树 非平衡 O(n) 平衡 O(log2n) 可较好支持插入删除 最佳、加权平衡、多分树(缓冲块大小) 本讲主要内容: 散列表概念 散列表的实现 开地址法 拉链法 散列表 散列法(hashing)又称为杂凑法或关键码—地址转换法。用散列法表示的字典称为散列表。 设给定一个字典元素,其关键码为key,将key看成自变量,按一个确定的散列函数 h 计算出h(key),把h(key)作为关键码key对应元素的存储地址(或称 散列地址),再进行字典元素的插入和检索操作。 例子: 由下标值 到 元素地址: &a[i] ? a + i* sizeof(e); O(1). 问题: 下标值连续。要维护线序结构 由不连续key值到元素地址: 变量名表 地址 散列函数基本要求: 负载因子 = 数据元素数目m /存储空间的个数n 尽可能将输入的数据项杂乱无章的映射到存储空间中 遇到碰撞(h(key1) = h(key2))采用统一的解决策略。 几种常见的hash函数 —— 除余法 选择一个适当的正整数P,用P去除关键码,余数作为散列地址,即h(key)=key%P。这个方法的关键是选取适当的P。一般P为素数比较好。 除余法地址计算公式非常简单。实践证明恰恰是这种简单的方法在许多情况下效果较好。除余法是一种最常用的散列函数,在许多静态字典和动态字典中都被采用。 前提:key>>P 数字分析法: 中平方法 先求出关键码的平方,然后取中间几位作为地址。 例如:关键码key=4731 47312 =如果地址长度为3位,则可以取第三位到第五位作为散列地址,即有h1(4731)=382,当然也可以取4-6位,即有h2(4731)= 823。 碰撞的处理 —— 开地址法 Open Addressing 在基本区域内形成一个同义词的探查序列,沿着探查序列逐个查找,直到找到查找的元素或碰到一个未被占用的地址为止。 若插入元素,则碰到空的地址单元就存放要插入的同义词。 若检索元素,则需要碰到空的地址单元后,才能说明表中没有待查的元素(检索失败)。 负载因子 < 1 开地址法 —— 线性探查 Linear Probing 即将基本存储区看作一个循环表。若在地址为d=h(key)的单元发生碰撞,则依次探查下述地址单元∶ d+1,d+2,…,m-1,0,1,…,d-1 (m为基本存储区的长度) 直到找到一个空单元或查找到关键码为key的元素为止。如果从单元d开始探查,查找一遍后,又回到地址d,则表示基本存储区已经溢出。 例子: clustering of linear probing 散列表的数据结构定义 散列表的检索算法 — 用线性探查法解决碰撞 int linearSearch(HashDictionary * phash, KeyType key, int *position){ int d, inc; d=h(key); /* d为散列地址,散列函数为h(key) */ for(inc=0; inc<phash->m; inc++){ if(phash->element[d].key==key) { *position=d; /* 检索成功 */ return(1); } else if(phash->element[d].key==0

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片

“原创力文档”前称为“文档投稿赚钱网”,本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】。原创力文档是网络服务平台方,若您的权利被侵害,侵权客服QQ:3005833200 电话:19940600175 欢迎举报,上传者QQ群:784321556