理解Hash
哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping)。
映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素。但反过来,集合B中的一个元素可能对应多个集合A中的元素。如果B中的元素只能对应A中的一个元素,这样的映射被称为一一映射。这样的对应关系在现实生活中很常见,比如:
A -> B
人 -> 身份证号
日期 -> 星座
上面两个映射中,人 -> 身份证号是一一映射的关系。在哈希表中,上述对应过程称为hashing。A中元素a对应B中元素b,a被称为键值(key),b被称为a的hash值(hash value)。
映射在数学上相当于一个函数f(x):A->B。比如 f(x) = 3x + 2。哈希表的核心是一个哈希函数(hash function),这个函数规定了集合A中的元素如何对应到集合B中的元素。比如:
A: 三位整数 hash(x) = x % 10 B: 一位整数
104 4
876 6
192 2
上述对应中,哈希函数表示为hash(x) = x % 10。也就是说,给一个三位数,我们取它的最后一位作为该三位数的hash值。

本文详细介绍了哈希表的概念、哈希函数的设计方法,包括直接定址法、平方取中法等,并探讨了哈希冲突的解决策略,如开放定址法、再哈希法、链地址法以及建立公共溢出区。同时,讨论了不同解决冲突方法的优缺点,强调了哈希表平均查找长度的重要性。
最低0.47元/天 解锁文章
502





