散列表
散列表是普通数组概念的推广。
是为了在数组直接寻址的优化,数组直接寻址的可寻址范围可能非常大,实际需求范围则很小,导致内存浪费。
散列表最后实现的是实际存储的关键字比全部可能的关键字少,是直接数组寻址的有效代替。
我们称关键字所链接道德散列表的位置为:槽。当两个关键字映射到同一个槽中时,称为冲突。
最简单的解决冲突的是链接法:把所有相同关键字用链表链接,为实现高效,用双向链表。
一般使用由乘法散列法和除法散列法。
全域散列
任何一个特定的散列函数都可能将特定的n个关键字全部散列到同一个槽中,使得平均的检索时间为Θ(n)。为了避免这种情况,唯一有效的改进方法是随机地选择散列函数,使之独立与要存储的关键字。这种方法称为全域散列(universal hashing)。
全域散列在执行开始时,就从一组精心设计的函数中,随机地选择一个作为散列函数。因为随机地选择散列函数,算法在每一次执行时都会有所不同,甚至相同的输入都会如此。这样就可以确保对于任何输入,算法都具有较好的平均情况性能.