数据结构散列Hashing-精选文档

合集下载

散列法hashing检索

散列法hashing检索

15
例子: CLUSTERING OF LINEAR PROBING 0
1
设散列函数 H(k)=k MOD 11 求: 60、17、29、38在散列表中的位置。 2 3
H(60)= 60 mod 11 = 5
H(17)= 17 mod 11 = 6 H(29)= 29 mod 11 = 7 H(38)= 38 mod 11 = 5,H(38+1) mod 11 = 6 H(38+2) mod 11 = 7 H(38+3) mod 11 = 8
张三 李四 王五 一对一映射? 1 2 3 4 5 6 7

散列函数
8
例子:

由下标值 到 元素地址:

&a[i] a + i* sizeof(e); O(1). 问题: 下标值连续。要维护线序结构 变量名表
key1 Key2 hashing … keym … an

由不连续key值到元素地址:


前提:key>>P
11Leabharlann 字分析法:常常有这样的情况,关键码位数比基本区的地址码位数多, 这时可以对关键码的各位进行分析,丢掉分布不均匀的位留 下均匀的位作为地址。
key
000319426 000718309 000629443 000758615 000919697 000310329
h(key)
326 709 643 715 997 329
12
中平方法

先求出关键码的平方,然后取中间几位作为地址。
例如:关键码key=4731 47312 = 22382361。如果地址长度为3位,则可 以取第三位到第五位作为散列地址,即有 h1(4731)=382,当然也可以取4-6位,即有 h2(4731)= 823。

数据结构报告——散列表、哈希表

数据结构报告——散列表、哈希表

数据结构实验报告班级:姓名:学号:时间:一、题目散列表的设计二、要求1、问题描述针对某个集体中人名设计一个散列表,使得平均查找长度不超过R,并完成相应的建表和查表程序。

2、基本要求假设人名为中国人姓名的汉语拼音形式,待填入散列表的人名共有30个,取平均查找长度上限为2。

散列函数用除留余数法构造,用伪随机探测再散列法处理冲突3、测试数据取读者周围较熟悉的30人的姓名。

4、实现提示如果随机函数自行构造,则应首先调整好随机函数,使其发布均匀。

人名的长度不超过20个字符。

可先对过长的人名作折叠处理。

三、设计思想1、散列函数的构造方法:散列列函数的构造方法有四种:平方取中法、除余法、相乘取整法、随机数法。

这里用了除余法,该方法是最为简单常用的一种方法。

它是以表长m来除关键字,取其余数作为散列地址,即 h(key)=key%m该方法的关键是选取m。

选取的m应使得散列函数值尽可能与关键字的各位相关。

m最好为素数。

【例】若选m是关键字的基数的幂次,则就等于是选择关键字的最后若干位数字作为地址,而与高位无关。

于是高位不同而低位相同的关键字均互为同义词。

【例】若关键字是十进制整数,其基为10,则当m=100时,159,259,359,…,等均互为同义词。

2、冲突的处理:(1)冲突两个不同的关键字,由于散列函数值相同,因而被映射到同一表位置上。

该现象称为冲突(Collision)或碰撞。

发生冲突的两个关键字称为该散列函数的同义词(Synonym)。

(2)安全避免冲突的条件最理想的解决冲突的方法是安全避免冲突。

要做到这一点必须满足两个条件:①其一是|U|≤m②其二是选择合适的散列函数。

这只适用于|U|较小,且关键字均事先已知的情况,此时经过精心设计散列函数h有可能完全避免冲突。

(3)冲突不可能完全避免通常情况下,h是一个压缩映像。

虽然|K|≤m,但|U|> m,故无论怎样设计h,也不可能完全避免冲突。

因此,只能在设计h时尽可能使冲突最少。

哈希散列值

哈希散列值

哈希散列值哈希散列值是计算机科学中常用的一种数据结构,它能将任意长度的数据映射为固定长度的散列值。

通过哈希散列值,我们可以快速地查找和比较数据,以提高程序的效率和安全性。

本文将重点探讨哈希散列值的原理、具体操作方法和实践导向结论。

一、哈希散列值的原理哈希散列值的原理基于哈希函数的构造和散列算法的设计。

哈希函数是一种将输入映射到固定大小输出的函数。

它应具备以下两个特点:1. 确定性:对于相同的输入,哈希函数应始终返回相同的输出。

2. 均匀性:哈希函数应能将不同的输入均匀地映射到输出空间。

散列算法是通过哈希函数将数据映射为散列值的过程。

常用的散列算法有MD5、SHA-1、SHA-256等。

这些算法通过复杂的数学运算和位操作,将输入的数据转化为固定长度的散列值。

二、具体操作方法1. 选择合适的哈希函数:在实际应用中,我们需要根据数据的特点选择合适的哈希函数。

例如,对于字符串数据,常用的哈希函数有BKDRHash、APHash等。

2. 设计合理的散列算法:在选择哈希函数的基础上,我们还需要设计合理的散列算法。

常见的散列算法包括链地址法、开放地址法等。

3. 处理冲突:由于散列值的长度是有限的,不同的输入可能会产生相同的散列值,即冲突。

解决冲突的方法包括拉链法、线性探测法等。

三、实践导向结论通过哈希散列值,我们可以实现以下应用:1. 数据索引:哈希散列值可以作为数据的索引,通过散列值快速查找数据,提高查找效率。

例如,在数据库中,可以通过哈希散列值加速对数据的检索。

2. 数据完整性验证:通过对数据进行哈希散列,可以生成一个唯一的散列值,用于验证数据的完整性。

例如,在文件传输过程中,可以通过比较文件的散列值判断文件是否被篡改。

3. 密码存储:在用户登录认证等场景中,通常不会将密码明文存储在数据库中,而是将密码的哈希散列值存储,提高密码的安全性。

4. 分布式存储:在分布式系统中,通过哈希散列值可以将数据分布到不同的节点上,实现负载均衡和数据冗余。

散列法

散列法
字符组成的字符串转换为固定长度的数值或索引值的方法
01 定义
03 哈希函数
目录
02 散列算法
基本信息
散列法(Hashing)或哈希法是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引 值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用 来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。
散列算法
散列算法
也称为哈希函数——哈希的英文意思为“无用信息”,因此哈希函数一词的由来可能是因为最终形成的哈希 表里面是各种看起来没有用的数字。除用来快速搜索数据外,散列法还用来完成签名的加密解密工作,这种签名 可以用来对收发消息时的用户签名进行鉴权。先用哈希函数对数据签名进行转换,然后将数字签名本身和转换后 的信息摘要分别独立的发送给接收人。通过利用和发送人一样的哈希函数,接收人可以从数字签名获得一个信息 摘要,然后将此摘要同传送过来的摘要进行比较,这两个值相等则表示数字签名有效。
哈希函数
哈希函数
1)余数法:先估计整个哈希表中的表项目数目大小。然后用这个估计值作为除数去除每个原始值,得到商 和余数。用余数作为哈希值。因为这种方法产生冲突的可能性相当大,因此任何搜索算法都应该能够判断冲突是 否发生并提出取代算法。
2)折叠法:这种方法是针对原始值为数字时使用,将原始值分为若干部分,然后将各部分叠加,得到的最 后四个数字(或者取其他位数的数字都可以)来作为哈希值。
哈希函数并不通用,比如在数据库中用能够获得很好效果的哈希函数,用在密码学或错误校验方面就未必可 行。在密码学领域有几个著名的哈希函数。这些函数包括 MD2、MD4以及MD5,利用散列法将数字签名转换成的哈 希值称为信息摘要(message-digest),另外还有安全散列算法(SHA),这是一种标准算法,能够生成更大的 (60bit)的信息摘要,有点儿类似于MD4算法。

10索引与散列

10索引与散列

m 路静态搜索树


当数据对象数目特别大,索引表本身也很大, 在内存中放不下,需要分批多次读取外存才能 把索引表搜索一遍。 在此情况下,可以建立索引的索引,称为二级 索引。二级索引可以常驻内存,二级索引中一 个索引项对应一个索引块,登记该索引块的最 大关键码及该索引块的存储地址。


如果二级索引在内存中也放不下,需要分为许 多块多次从外存读入。可以建立二级索引的索 引,叫做三级索引。这时,访问外存次数等于 读入索引次数再加上1次读取对象。 必要的话,还可以有4级索引,5极索引,…。



对索引顺序结构进行搜索时,一般分为两级搜 索。 先在索引表 ID 中搜索给定值 K,确定满足 ID[i-1].max_key < K ID[i].max_key 的 i 值,即待查对象可能在的子表的序号。 然后再在第 i 个子表中按给定值搜索要求 的对象。 索引表是按 max_key有序的,且长度也不大, 可以对分搜索,也可以顺序搜索。 各子表内各个对象如果也按对象关键码有序, 可以采用对分搜索或顺序搜索;如果不是按对 象关键码有序,只能顺序搜索。
在子树 Pi 中所有的关键码都小于 Ki+1,且大于 Ki,0 < i < n。 在子树 Pn 中所有的关键码都大于Kn;

在子树 P0 中的所有关键码都小于 K1。 子树 Pi 也是 m 路搜索树,0 i n。

一棵3路搜索树的示例
m 路搜索树的类定义 template <class Type> class Mtree { //基类 public: Triple<Type> & Search ( const Type & ); protected: Mnode<Type> root; int m; }

散列表

散列表
在选择词典的表示时,必须确保这几个操作的 实现。
通常,用文件 (表格) 来表示实际的对象集合, 用文件记录 (表格的表项) 来表示单个对象。这 样,词典中的<名字-属性>对将被存于记录 (表 项) 中,通过表项的关键码 ( <名字-属性>对的 名字) 来标识该表项。
表项的存放位置及其关键码之间的对应关系可 以用一个二元组表示:
使用散列方法进行搜索不必进行多次关键码的 比较,搜索速度比较快,可以直接到达或逼近 具有此关键码的表项的实际存放地址。
散列函数是一个压缩映象函数。关键码集合比 散列表地址集合大得多。因此有可能经过散列 函数的计算,把不同的关键码映射到同一个散 列地址上,这就产生了冲突 (Collision)。
示例:有一组表项,其关键码分别是
Attribute *Find ( Name name ); void Insert ( Name name, Attribute attr ); void Remove ( Name name ); }
在词典的所有操作中,最基本的只有3种: Find (搜索) Insert (插入) Remove (删除)
由于关键码集合比地址集合大得多,冲突很难 避免。所以对于散列方法,需要讨论以下两个 问题分布比较均匀的散列函数,避免 或尽量减少冲突;
拟订解决冲突的方案。
散列函数
构造散列函数时的几点要求: 散列函数的定义域必须包括需要存储的全部关
键码,如果散列表允许有 m 个地址时, 其值域 必须在 0 到 m-1 之间。 散列函数计算出来的地址应能均匀分布在整个 地址空间中:若 key 是从关键码集合中随机抽 取的一个关键码,散列函数应能以同等概率取 0 到 m-1 中的每一个值。 散列函数应是简单的,能在较短的时间内计算 出结果。

散列表(哈希表)

散列表(哈希表)散列表(哈希表)散列表是根据键(KEY)来直接访问内存存储位置的⼀种数据结构,它通过散列函数计算键值对中键(KEY)的散列地址,然后将值存在此地址上,这样就可以直接根据键来取得所对应的值。

散列函数的冲突对于不同的键(KEY),散列函数得到同⼀个散列地址,这种现象称为冲突。

如何处理散列冲突开放定址法线性探测法:就是⼀旦冲突了就放到下⼀个位置就好了,只要存储空间够⼤总会有位置放的(但是这样会产⽣堆积,因为他可能会把其他的原来属于别⼈的位置只是暂时空着的给占了)⼆次探测法:冲突了就放在1或者2或者3等等的平⽅后的位置,⽽不是像前⾯那样就是单纯的不停地加1,这样就可以不让关键字对集中在⼀块地⽅伪随机探测法:⽤⼀个种⼦产⽣⼀个随机数来作为位移量来避免冲突,然后最后查找这个数在不在的时候也⽤这个种⼦⽣成随机数来找当散列表存在"堆积"(在函数地址的表中,散列函数的结果不均匀地占据表的单元,形成区块)的情况时,使⽤开放定址法的效率⼤⼤降低,此时不能再使⽤开放定址法单链表法:将散列地址值⼀样的键值对保存在⼀个链表中。

再散列:在上次散列计算发⽣冲突时,利⽤该次冲突的散列函数地址产⽣新的散列函数地址,直到冲突不再发⽣。

这种⽅法不易产⽣"堆积",但增加了计算时间。

公共溢出区:将所有冲突的键值对放在⼀个数组中。

查找时如果在散列表中没有找到就在数组中顺序查找。

散列表的查找效率在理想情况下,散列表建⽴过程中没有出现冲突,那么在散列表中查找的效率则为O(1)。

但是这仅是理想情况,散列冲突会影响查找效率,那么影响查找效率的因素就是影响产⽣冲突的因素:散列函数是否均匀(均匀散列函数是指对于键值对中任意⼀个键(KEY)经过散列函数得到任意⼀个地址的概率是相等的)处理散列冲突的⽅法散列表的载荷因⼦其中散列表的载荷因⼦计算公式为α = 表中元素个数/表长度α越⼤,产⽣冲突的可能性就越⼤。

数据结构中的散列算法详解

数据结构中的散列算法详解散列算法(Hashing Algorithm)是数据结构中一种常用的技术,可以提高数据的查找效率。

它将数据映射到一个固定大小的数组中,通过散列函数得到数组的索引位置,从而快速定位数据。

一、什么是散列算法散列算法是一种通过将输入数据映射到固定大小的数组中,从而实现快速访问的技术。

它利用散列函数将输入数据转换为一个整数值,并将该值与数组的大小取模,得到数组的索引位置。

将数据存储在对应索引的数组位置上,称为散列存储。

散列算法有很多种,常见的包括直接定址法、平方取中法、除留余数法等。

每一种散列算法都有自己的特点和适用场景。

二、散列函数的选择散列函数的选择非常重要,它直接关系到散列算法的效率和数据的分布。

一个好的散列函数应该具备以下特点:1. 易于计算:散列函数应该具备高效的计算性能,能够在短时间内完成散列计算。

2. 分布均匀:散列函数应能够将输入数据均匀地映射到散列表的各个位置上,避免出现数据聚集的情况。

3. 最小冲突:散列函数应该尽可能减少冲突,即不同的输入值映射到相同的索引位置的情况。

三、散列算法的实现散列算法的实现主要分为两个步骤:散列函数的设计和冲突处理。

散列函数的设计是散列算法的核心。

常见的散列函数设计方法有:直接定址法、除留余数法、平方取中法、伪随机数法等。

根据不同的数据特点和应用场景,选择合适的散列函数。

冲突处理是指当多个数据映射到相同的索引位置时,如何解决冲突的问题。

常见的冲突处理方法有:开放定址法、链地址法、再散列法等。

不同的冲突处理方法有不同的优势和适用场景,可以根据具体情况选择合适的方法。

四、散列算法的应用散列算法在实际应用中被广泛使用,主要用于提高数据的查找、插入和删除效率。

以下是散列算法的几个典型应用场景:1. 数据库索引:散列算法可用于构建数据库中的索引,加快数据的检索速度。

2. 缓存管理:散列算法可用于缓存的管理,快速找到对应的缓存数据。

3. 字典查找:散列算法可用于字典的查找,通过散列存储可以高效地实现快速查找。

Python数据结构——散列表

Python数据结构——散列表散列表的实现常常叫做散列(hashing)。

散列仅⽀持INSERT,SEARCH和DELETE操作,都是在常数平均时间执⾏的。

需要元素间任何排序信息的操作将不会得到有效的⽀持。

散列表是普通数组概念的推⼴。

如果空间允许,可以提供⼀个数组,为每个可能的关键字保留⼀个位置,就可以运⽤直接寻址技术。

当实际存储的关键字⽐可能的关键字总数较⼩时,采⽤散列表就⽐较直接寻址更为有效。

在散列表中,不是直接把关键字⽤作数组下标,⽽是根据关键字计算出下标,这种关键字与下标之间的映射就叫做散列函数。

1.散列函数⼀个好的散列函数应满⾜简单移植散列的假设:每个关键字都等可能的散列到m个槽位的任何⼀个中去,并与其它的关键字已被散列到哪个槽位⽆关。

1.1 通常散列表的关键字都是⾃然数。

1.11 除法散列法通过关键字k除以槽位m的余数来映射到某个槽位中。

hash(k)=k mod m应⽤除法散列时,应注意m的选择,m不应该是2的幂,通常选择与2的幂不太接近的质数。

1.12 乘法散列法乘法⽅法包含两个步骤,第⼀步⽤关键字k乘上常数A(0<A<1),并取出⼩数部分,然后⽤m乘以这个值,再取结果的底(floor)。

hash(k)=floor(m(kA mod 1))乘法的⼀个优点是对m的选择没有什么特别的要求,⼀般选择它为2的某个幂。

⼀般取A=(√5-1)/2=0.618⽐较理想。

1.13 全域散列随机的选择散列函数,使之独⽴于要存储的关键字。

在执⾏开始时,就从⼀族仔细设计的函数中,随机的选择⼀个作为散列函数,随机化保证了没有哪⼀种输⼊会始终导致最坏情况发⽣。

1.2 如果关键字是字符串,散列函数需要仔细的选择1.2.1 将字符串中字符的ASCII码值相加def _hash(key,m):hashVal=0for _ in key:hashVal+=ord(_)return hashVal%m由于ascii码最⼤127,当表很⼤时,函数不会很好的分配关键字。

Ch05-散列


Hash表
[0] [1] ht [ 0 ] ht [ 1 ] …… [s1]
…… ……
For each identifier x, we define a hash function f ( x ) = position of x in ht[ ] (i.e. the index of the bucket that contains x ) b buckets T ::= total number of distinct possible values for x n ::= total number of identifiers in ht[ ] identifier density ::= n / T loading density ::= n / (s b)源自…………s slots
ht [b1]
… …
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, Slot 0 Slot 1 atan,ceil,floor,clock,ctime
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
散列 (Hashing)
在线性表、树结构中查找纪录是通过与关键 字的“比较”完成的。
• 顺序查找,比较的结果为“=”或“≠” • 非顺序查找,比较的结果为“<”,“=”,“>”
散列的思想: 根据纪录的关键字直接找到记录的存储位置, 即为关键字和记录的存储位置建立一个对应 关系f,使每个关键字和结构中一个唯一的 存储位置相对应。 对应关系f为散列函数,按该思想建立的表 为散列表。
2005-02-03

示例:设给定的关键字为 key = 23938587841,若 存储空间限定 3 位, 则划分结果为每段 3 位. 上 述关键字可划分为 4段:
239
385
878
41

把超出地址位数的最高位删去, 仅保留最低的3位, 做为可用的散列地址。多,而且关键字每一位上 数字的分布大致比较均匀时,可用这种方法得到 散列地址。
数字分析法仅适用于事先明确知道表中所有关键字每一位数 值的分布情况,它完全依赖于关键字集合。如果换一个关键字集 合,选择哪几位要重新决定。
2005-02-03
3. 平方取中法 此方法在词典处理中使用十分广泛。它先计算构成关键字 的标识符的内码的平方,然后按照散列表的大小取中间 的若干位作为散列地址。 设标识符可以用一个计算机字长的内码表示。因为内 码平方数的中间几位一般是由标识符所有字符决定, 所以对不同的标识符计算出的散列地址大多不相同, 即使其中有些字符相同。 在平方取中法中,一般取散列地址为2的某次幂。例 如,若散列地址总数取为m = 2r,则对内码的平方数 取中间的r位。如果r = 3,所取得的散列地址参看 图的最右一列。
示例:有一个关键字 key = 962148,散列表大小 m = 25,即 HT[25]。取质数 p= 23。散列函数 hash ( key ) = key % p。则散列地址为:
2005-02-03


hash ( 962148 ) = 962148 % 23 = 12

可以按计算出的地址存放记录。需要注意的是,使用 上面的散列函数计算出来的地址范围是 0到 22,因此 ,从23到24这几个散列地址实际上在一开始是不可能 用散列函数计算出来的,只可能在处理溢出时达到这 些地址。

散列方法在表项的存储位置与它的关键字之间建立一 个确定的对应函数关系Hash( ),使每个关键字与结构 中一个唯一存储位置相对应: Address = Hash ( Rec.key )
在查找时,首先对表项的关键字进行函数计算,把函 数值当做表项的存储位置,在结构中按此位置取表项 比较。若关键字相等,则查找成功。在存放表项时, 依相同函数计算存储位置,并按此位置存放。

转换的方法:
把字符串从右向左,按一个固定长度 (例如 4 ) 进行分段,必要时可在最左端添一些空格。
把每一个字符看成为一个数字,把字符串的每一段 看作为一个整数。如, ASCII码采用7位字符代码, 因此每一个字符可以看成一个128进制的数字。字 符串abcd看成整数 a*(128)3 + b*(128)2 + c*(128) + d。 把字符串的每一段都转换成一个整数后,再把各段 转换成的整数加起来。
2005-02-03
5. 除留余数法

设散列表中允许的地址数为m,取一个不大于m,但最 接近于或等于m的质数p,或选取一个不小于20的质因 数的合数作为除数,利用以下公式把关键字转换成 散列地址。散列函数为: hash ( key ) = key % p p m 其中, “%”是整数除法取余的运算,要求这时的质 数p不是接近2的幂。
2. 数字分析法 设有n个d位数,每一位可能有r种不同的符号。这 r 种不同的符号在各位上出现的频率不一定相同,可能 在某些位上分布均匀些;在某些位上分布不均匀,只 有某几种符号经常出现。可根据散列表的大小,选取 其中各种符号分布均匀的若干位作为散列地址。
2005-02-03
9 4 2 1 4 8 9 4 1 2 6 9 9 4 0 5 2 7 9 4 1 6 3 0 9 4 1 8 0 5 9 4 1 5 5 8 9 4 2 0 4 7 9 4 0 0 0 1 ① ② ③ ④ ⑤ ⑥
2005-02-03
1. 直接定址法
此类函数直接取关键字或关键字的某个线性函数值 作为散列地址: Hash ( key ) = a * key + b { a, b为常数 }

这类散列函数是一对一的映射,一般不会产生冲突。 但是,它要求散列地址空间的大小与关键字集合的 大小相同。
2005-02-03
2005-02-03
4. 折叠法 此方法把关键字自左到右分成位数相等的几部分,每 一部分的位数应与散列表地址位数相同,只有最后一 部分的位数可以短一些。 把这些部分的数据叠加起来,就可以得到具有该关键 字的记录的散列地址。 有两种叠加方法: • 移位法 — 把各部分的最后一位对齐相加; • 分界法 — 各部分不折断,沿各部分的分界来回折 叠,然后对齐相加,将相加的结果当做散列地址。
2005-02-03

以上介绍了几种常用的散列函数。在实际工作中 应根据关键字的特点,选用适当的方法。有人曾 用“轮盘赌”的统计分析方法对它们进行了模拟 分析,结论是平方取中法最接近于“随机化”。 在应用平方取中法时,若关键字不是整数而是字 符串时,可以把每个字符串转换成整数。

2005-02-03
2005-02-03
哈希表的定义
根据设定的哈希函数H(key)和处理冲突的方法将一 组关键字映像到一个有限的连续的地址集(区间)上, 并以关键字在地址集中的“像”作为纪录在表中的存储 位置,这种表便称为哈希表,这一影像过程称为哈希造 表或散列,所得存储位置称哈希地址或散列地址。
2005-02-03

2005-02-03
哈希函数的构造方法
构造散列函数时的几点要求: 散列函数的定义域必须包括需要存储的全部关 键码,如果散列表允许有m个地址时,其值域必 须在 0 到 m-1 之间。 散列函数计算出来的地址应能均匀分布在整个 地址空间中:若 key是从关键字集合中随机抽 取的一个关键字,散列函数应能以同等概率取 0到 m-1 中的每一个值。 散列函数应是简单的,能在较短的时间内计算 出结果。
相关文档
最新文档