
SERVICE PHONE
363050.com发布时间:2025-09-08 07:18:42 点击量:
哈希游戏,哈希博彩平台,比特币哈希游戏,区块链博彩,去中心化博彩平台,可验证公平平台,首存送88U,虚拟币哈希娱乐
这一节涉及数学超级多,各种数论知识,各种不明觉厉! 看了几遍,才勉强看懂一些,所以这篇稍微简单的介绍着两种hash table, 免得瞎说说错了。这一讲的主要知识点是:1. 全域哈希及构造 ? ?2. 完美哈希??1. 全域哈希及构造介绍全域哈希之前,要先讨论一下普通哈希的一个缺点。 举个charles举得那个例子:如果你和一个竞争对手同时为一家公司做compiler的symbol table, 公司要求你们代码共享(o(╯□╰)o),你们做好后公司评判的标准就是 你俩互相提供一些测试样例,谁的效率高就买谁的。然后,普通哈希的缺点就出来了:对任意的hash函数h,总存在一组keys,使得, 对某个槽i。即我总可以找到一组键值,让他们都映射到同一个槽里面,这样效率就跟离链表差不多了解决的思想就是:独立于键值,随机的选择hash 函数。这就跟快排中为避免最差情况时随机化版本差不多。但是选取hash function的全局域是不能乱定的,否则也打不到理想的性能。?下面就给出全域哈希的定义:?设U是key的全局域, 设H 是哈希函数的有限集合,每一个都是将U映射到{0,1,..,m-1},即table的槽内。 如果对所有不等的x,yU ,有换句话说,就是对于任意的不相等key的x和y, 从哈希函数集中选择一个哈希函数,这两个key发生冲突的概率是1/m?更形象的,当我随机选一个哈希函数时,就像在上图区域乱扔一个飞镖,落在下面红域中就会发生冲突,这个概率是1/m??下面给一个定理,说明为什么全域函数就是好的:?设h是从哈希函数全域集H 中随机选出的函数h. h被用作把任意n个键映射到表T的m个槽中, HYPERLINK 对给定键值x,我们有:定理:E[#collision with x]n/mProof: 设Cx 是表示与key x冲突的键值数量的随机变量,设cxy 是指示变量,即则,E[cxy]=1/m 且Cx=yT?{x}cxy ,则?证毕!这个定理想要说明的是,这种全域哈希的随机化选择可以达到哈希表理想的效果。注意这里 n/m是之前定义过的load factor?现在给出一种构造全域哈希的方法:首先选择一个足够大的质数p,使得所有的键值都在0-p-1之间。且设Zp 表示{0,1,...,p-1},设Z?p 表示{1,2,..,p-1}. 因为槽m的数量少于key的数量,所有mp.然后我们就可以设计哈希函数了,设任意的aZ?P,bZp ,然后ha,b(k)=((ak+b)modp)modm 所有这样的哈希函数族为: HYPERLINK Hp.m={ha,b:aZ?p,bZp} 例如:选定p=17,m=6,h3,4(8)=5 . 每个哈希函数都是将Zp 映射到Zm . 我们还可以看到这个哈希函数族共有p(p-1)个哈希函数针对这种构造方法构造出的是全域哈希函数的证明就略过了,涉及数学知识确实比较多,讲不好。???2. 完美哈希?当键值是static(即固定不变)的时候,我们可以涉及方案使得最差情况下的查询性能也很出色,这就是完美哈希。实际上,很多地方都会用到静态关键字集合。比如一种语言的保留字集合,一张CD-ROM里的文件名集合。 而完美哈希可以在最坏情况下以O(1)复杂度查找,性能非常出色的。完美哈希的思想就是采用两级的框架,每一级上都用全域哈希完美哈希的结构如上图。具体来说,第一级和带链表的哈希非常的相似,只是第一级发生冲突后后面接的不是链表,而是一个新的哈希表。后面那个哈希结构,我们可以看到前端存储了一些哈希表的基本性质:m 哈希表槽数;a,b 全域哈希函数要确定的两个值(一般是随机选然后确定下来的),后面跟着哈希表。?为了保证不冲突,每个二级哈希表的数量是第一级映射到这个槽中元素个数的平方,这样可以保证整个哈希表非常的稀疏。下面给出一个定理,能更清楚的看到设置m=n^2的作用?定理:设H 是一类全域哈希函数,哈希表的槽数m=n^2. 那么,如果我们用一个随机函数hH 把n个keys映射到表中。冲突次数的期望最多是1/2.Proof:根据全域哈希的定义,对任意选出的哈希函数h,表中2个给定keys冲突的概率是1/m,即1/n^2且总共有C2n 可能的键值对,那么冲突次数的期望就是C2n?1/n2=n(n?1)/2?1\n21/2 ? 证毕!为了冲突的理解从期望转换到概率,引入下面这个推论推论: 完美哈希没有冲突的概率至少是1/2Proof: 这里主要要用到一个不等式Markovs inequality-对任意非负随机变量X,我们有Pr{X≥t}≤E[x]/t利用这个不等式,让t=1,即可得到冲突次数大于1的概率最多为1/2?因为第二层每个表槽的个数是这个表中元素n^2,可能会感觉到这样存储空间会很大,实际上,可以证明E[m?1i=0Θ(n2i)]=Θ(n) , 因为证起来蛮复杂,所以我也略过了%_%这一节主要讲很多方面非常重要的hash table等问题. 由于平时很少用到这些,基本都忘了。。。?怎样快速的在内存中插入、删除、和搜索呢? 这就需要哈希表了这一节主要知识点是:1 简单的映射表和处理冲突方法 ? ? 2.哈希函数的选择 ? ? 3.开放寻址法(高级解决冲突方案)?1 简单的映射表和处理冲突方法哈希表希望解决的一个典型问题是编译器内部的符号表,它的结构是:每个记录有一个指针x指向这个记录,key[x]就是这个记录的关键字,然后后面就是一些具体数据。如果我们想方便得进行增删查操作,这些数据应该如何组织呢?最简单的方法:直接寻址表这个方法当键值得范围相对较小的时候还是能够很好工作的。假设key都是从集合U{0,1,..,m-1}中得到的。则可以建立一个表,T[0.. m-1]?简而言之,这个表就是当k=i时,就将其放在表T中第i个位置。表的其他位置留空就行了:如下图直接寻址法有一个明显的问题,当U的范围很大时,就必须维持一个非常大的表,且实际上用到的可能很少!??而哈希表采用的另一种方法,它通过一个hash函数来映射k值(上面那个方法可以看做identicalmapping的函数)。 但是,这样就会出现不同键映射到相同槽内的方法,那应该怎么处理呢?这里再给出一个简单方法:通过链表解决这种方法最差情况就是所有元素都映射到了同一个槽里面,时间就是Θ(n),其实就是建了个链表下面分析一下平均情况下链表法的性能,顺便引入一些概念:做假设 哈希函数是简单均匀哈希(simple-uniform hashing),即每个键k 等可能的被hash到表T中的每个槽中,且与其他键被哈希到什么位置无关设n是表中key的个数,m是表槽的个数,定义表T的负载因子(load factor):α = n/m = 平均每个槽中被映射的key的数量然后给定key后,搜索成功与否的期望时间都是Θ(1+α)?2.哈希函数的选择怎样选择一个好的hash函数呢?我们期望它具有的性质有下面两点:一个好的hash函数应该能够将keys均匀的映射到表的槽内 键值的分布特性应该不影响这种均匀性质 选择的策略主要有两种:除法散列法 ?乘法散列法除法散列法: 定义hash函数为 h(k) = k mod m这种方法也有很多需要注意的: 不要选有很小除数的m. 比如如果选m是个偶数,假设所有的键值都是偶数的情况下,那么所有的映射结果都只会在偶数槽呢,非常浪费,也违背了上面好的hash函数属性的第二条另一个极端例子:假设m=2r,就是因子全都是最小的除数。如果k=0,r-6,那么映射的结果就是k的最后6位,这甚至都没有利用k的全部信息所以这个方法中选择m的原则就是m选为质数且不能太接近2或者10的幂次乘法散列法:设m=2r, 计算机是w-bit 长的字,然后定义哈希函数是h(k) = (A*k mod 2w) rsh (w-r)其中A是一个在(2w-1, 2w)范围内的奇数。我们来分析这个哈希函数(A*k mod 2w)这一部分就是将乘法得到的结果只取一个字长 ,然后再rsh w
2、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
3、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
4、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
中国传媒大学《微视频创意与制作》课件-微视频创意与制作-PPT-微视频创意与制作(第一章).pptx
深度解析《GBT 44037-2024焦炭溶损率及溶损后强度试验方法》.pptx
九年级化学酸、碱、盐、氧化物知识小结 “三表一图”(二)天津版.doc
部编版六年级上册语文第一周(草原-丁香结)达标测评卷 含答案.docx
原创力文档创建于2008年,本站为文档C2C交易模式,即用户上传的文档直接分享给其他用户(可下载、阅读),本站只是中间服务平台,本站所有文档下载所得的收益归上传人所有。原创力文档是网络服务平台方,若您的权利被侵害,请发链接和相关诉求至 电线) ,上传者