📅  最后修改于: 2020-12-10 06:22:06             🧑  作者: Mango
它是一系列项目的存储方式,以便以后查找时容易找到它们。
哈希表中的每个位置称为插槽,可以容纳一个项目,并由一个从0开始的整数值命名。
项与该项在哈希表中所属的插槽之间的映射称为哈希函数。哈希函数接受键并返回其哈希编码或哈希值。
假设我们有一组整数54、26、93、17、77、31。我们需要作为“余数方法”的第一个哈希函数只是简单地获取该项并将其除以表大小,然后将余数作为其哈希值返回,即
h item = item % (size of table)
Let us say the size of table = 11, then
54 % 11 = 10 26 % 11 = 4 93 % 11 = 5
17 % 11 = 6 77 % 11 = 0 31 % 11 = 9
ITEM | HASH VALUE |
---|---|
54 | 10 |
26 | 4 |
93 | 5 |
17 | 6 |
77 | 0 |
31 | 9 |
现在,当我们需要搜索任何元素时,只需将其除以表大小,即可获得哈希值。这样我们得到了O(1)搜索时间。
现在,当我们在44上应用哈希函数时,再获取一个元素44,我们得到(44%11 = 0),但是0哈希值已经具有元素77。此问题称为冲突。
碰撞:根据哈希函数,同一插槽中需要两个或多个项目。据说这被称为碰撞。
图:使用哈希函数h将键映射到哈希表插槽。因为密钥K2和k5映射到同一插槽,所以它们会发生冲突。
因此,哈希表需要较少的存储空间。带有密钥k的间接寻址元素通过散列存储在插槽k中,它存储在h(k)中,其中h是散列f n,而散列(k)是密钥k的值。散列f n所需的数组范围。
哈希表的一些应用是: