- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Ch05-散列45
散列 高文宇 gwyy@163.com §1 预备知识 散列(Hashing)是一种用于以常数平均时间执行插入、删除和查找的技术。 散列函数(Hash function)将每个关键字映射到从0到TableSize-1的存储单元中。理想情况下,散列函数应当运算简单并保证任何两个不同的关键字映射到不同的存储单元。 Symbol Table ADT Objects: A set of name-attribute pairs, where the names are unique Operations: ? SymTab Create(TableSize) ? Boolean IsIn(symtab, name) ? Attribute Find(symtab, name) ? SymTab Insert(symtab, name, attr) ? SymTab Delete(symtab, name) Hash表 Hash表的几个概念 定义1(冲突): A collision occurs when we hash two nonidentical identifiers into the same bucket, i.e. f ( i1 ) = f ( i2 ) when i1 ? i2 . 定义2(溢出): An overflow occurs when we hash a new identifier into a full bucket. 示例:Mapping n = 10 C library functions into a hash table ht[ ] with b = 26 buckets and s = 2. To map the letters a ~ z to 0 ~ 25, we may define f ( x ) =x [ 0 ] ? ‘a’ acos,define,float,exp,char, atan,ceil,floor,clock,ctime §2 散列函数 散列函数应具备的几个特性: ? f ( x ) must be easy to compute and minimizes the number of collisions. ? f ( x ) should be unbiased. That is, for any x and any i, we have that Probability( f ( x ) = i ) = 1 / b. Such kind of a hash function is called a uniform hash function. 示例1:f ( x ) = x % TableSize ; /* if x is an integer */ ? What if TableSize = 10 and x’s are all end in zero? ? TableSize = prime number ---- good for random integer keys 示例2:若关键字是字符串,则将每个字符的ASCII值相加,然后在mod TableSize。 §3 分离链接法 为处理冲突,将散列到同一个值的所有元素保留到一个链表中。 分离链接散列表类型声明 创建空表 在散列表中查找 在散列表中插入一个新关键字 §4 开放定址法 线性探测 平方探测 定理5.1:若使用平方探测,且表的大小是素数,那么当表至少有一半是空的时候,总能插入一个新的元素。 双散列 §5 再散列 问题:若Hash表的元素填得太满,那么操作的运行时间将越来越长,且Insert操作可能失败。 解决办法:Rehashing ? Build another table that is about twice as big; ? Scan down the entire original hash table for non-deleted elements; ? Use a new function to hash those elements into the new table. 问题1:何时需要再散列? 1、只要表被占用超过一半就执行再散列。 2、只有当插入失败时才执行再散列。 3、散列表达到某一个装填因子时就执行再散列。 §6 可扩展散列 再见 再见 * [0] [1] … … [s?1] … … ht [ 0 ] … … ht [ 1 ] … … ht [b?1] … … … … b buckets s slots For each identifier x, we define a
您可能关注的文档
最近下载
- 马王堆汉墓帛书老子甲乙本.pdf VIP
- 四川省成都市新都区新都四中2024-2025学年上学期七年级分班(奖学金)模拟数学试题(含答案).docx VIP
- 人教版九年级化学上册 第一单元 走进化学世界 单元测试卷(有答案).docx VIP
- 钢拱架施工方案.docx VIP
- 2025年上海市春考语文试卷及答案.docx VIP
- 不忘初心主题教育会议议程三篇.docx VIP
- 上海市建筑物清洁保养验收规范精选.doc VIP
- 燃气管道破裂桌面演练方案.doc VIP
- 广西宾阳马王风电项目三期工程风机吊装施工专项方案(专家评审后修订).docx VIP
- 仪表工程师题库(2011225).doc VIP
文档评论(0)