散列表
众所周知,散列表是一种十分重要的数据结构,接下来就从各个方面分析下跟散列表相关的问题。主要解决什么是散列表,散列冲突的解决方法, 以及各种方法的优缺点。 概览图: 什么是散列表? 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构,是数组的衍生体。 散列表的用途? 也就是说,散列表通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。 如何设计散列函数? 散列函数的基本要求: 散列函数计算得到的散列值是一个非负整数; 如果 key1 = key2,那 hash(key1) == hash(key2); 如果 key1 ≠ key2,那 hash(key1) ≠ hash(key2); 函数需要足够简单,复杂的函数,在计算过程中需要消耗过多的cpu资源; 该函数计算结果 需要随机并且分布均匀; 我来解释一下这三点。 其中,第一点理解起来应该没有任何问题。因为数组下标是从 0 开始的,所以散列函数生成的散列值也要是非负整数。 第二点也很好理解。相同的 key