- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Chapter7 散列
数据结构与算法 Chapter7 散列 本章教学内容 7.1 字典 7.2 搜索(Search)概述 7.3 散列方法 散列函数构造方法 冲突解决方法 7.4 散列应用 7.1 字典(Dictionary) 字典是一种特殊的集合,其元素是(关键字,属性值)二元组; 关键字必须是互不相同的(在一个字典之内); 字典的主要操作是依据关键字来存储和析取值,可用于组织简单的数据库,提供存储、查找和删除记录的功能; 字典的实现方式很多,如有序线性表、跳表、字符树等; 用散列方法实现的字典具有非常高效的检索性能。 有关字典的操作 在字典的所有操作中,最基本的有3种: Find : 寻找具有给定Key值的元素 Insert:插入具有给定Key值的元素 Delete:删除具有给定Key值的元素 实现字典时,必须确保这几个操作的实现 随机访问:根据Key值访问元素 顺序访问:按照Key值升序逐个访问字典中元素 Begin Next 字典的ADT描述 ADT Dictionary { 实例: 具有不同关键字的元素集合 操作 Create( ); //创建一个空字典 Search(k,x); //搜索关键字为k的元素,结果放在x Insert(x); //向字典中插入元素x Delete(k,x); //删除关键字为K的元素,并放入到x } 字典的线性表描述 字典可以用线性表进行表示 线性序列 L = ( e1, e2, e3, …, en) 每一个ei 是 (key, element)对; 例如:5-pair dictionary D = (a, b, c, d, e). a = (aKey, aElement), b = (bKey, bElement), etc. 关键字可以按照升序排列,也可无序排列! 可以采用数组和链表的描述。 有序链表的节点定义 template class E, class K class SortedChain; template class E, class K class SortedChainNode { friend SortedChainE, K; private: E data; SortedChainNodeE, K *link; }; templateclass E, class K class SortedChain { public: SortedChain ( ) { first = NULL; } ~ SortedChain ( ); bool IsEmpty( ) const { return first ==NULL; } int Length( ) const; bool Search(const K k, E e); SortedChainE,K Delete(const K k, E e); SortedChainE,K Insert(const E e); SortedChainE,K DistinctInsert(const E e); private: SortedChainNodeE,K * first; }; -有序链表的搜索操作:搜索与k匹配的元素 -有序链表的删除操作:删除与k相匹配的元素 -有序链表的插入操作:插入元素e SortedChain使用注意 templateclass E, class K E:适用于C++内部数据类型 如果E为用户自定义数据类型,需要重载操作符:==、!=、、 K:可以重载类型转换符,完成E到K的转换 例如:operator long() const { return key; } 7.2 搜索概述 搜索(search): 各种数据结构中必不可少的运算; 计算机应用程序的核心功能; 在数据处理中,经常涉及信息存储和信息搜索,即对所存储的数据进行快速有效的搜索操作。 【定义】在一组记录集合中找到关键字值等于给定值的某个记录(精确匹配查询),或找到属性值符合给定条件的某些记录(范围查询)。 基于关键字的搜索 假定k1,k2,…,kn是互不相同的关键字值,有一个包含n条记录的集合C,形式如下: (k1,R1),(k2,R2),…,(kn,Rn) 其中Rj是与关键字ki相关联的信息,1≤j ≤n。 给定某个关键字值K,搜索问题就是在C中定位(kj,Rj),使得kj=K。 搜索就是定位关键字值kj=K的记录的系统过程。 搜索成功:找到至少有一个关键字值为kj的记录,使得kj=K; 搜索失败:找不到记录使得kj=K。 搜索算法分类 基于线性表的搜索 如顺序搜索、折半搜索(二分搜索) 根据关键字值直接访问 例如,根据数据下标的直接搜索、散列搜
文档评论(0)