从技术上讲,根据我在这里读过的文章,在最坏的情况下,哈希表确实是O(n)时间查找。但我不知道内部力学如何保证它平均是O(1)时间。
我的理解是,给定一些n个元素,理想的情况是有n个桶,这就产生了O(1)空间。这就是我被困的地方。假设我想查找字典中是否有一个键,这肯定要花我O(n)时间。那么,当我想通过使用元素的键的散列值搜索元素是否在哈希表中时,它为什么会产生影响呢?简单地说,使用原始键值进行搜索会给出O(n)时间,而使用散列值则是O(1)时间。为什么会这样呢?
难道我不需要一个一个地查找散列值来判断哪一个匹配吗?为什么散列让我立即知道要检索哪个元素,或者是否存在这样的元素?
发布于 2020-09-18 06:15:36
我想“哈希”这个词是在吓唬人。在场景后面,哈希表是将键/值对存储在数组中的数据结构。
这里唯一的区别是,我们不关心键值对的位置。这里没有索引。查找数组项O(1)。它与阵列大小无关,与位置无关。您只需输入索引号,并检索项。
所以查了多少时间才能完成。它是O(1)。
在哈希表中,当存储键/值对时,键值将被散列并存储在相应的内存槽中。
{name:"bob"} //name will be hashed
hash(name) = ab1234wq //this is the memory address
[["name","bob"]] // will be store at memory adress ab1234wq当您查找"name“时,它将被散列,并且作为散列函数的主要特性,它将返回与"ab1234wq”相同的结果。因此,编程引擎将查看这个地址,将看到数组并返回值。如您所见,此操作与数组查找相同。
https://stackoverflow.com/questions/48603244
复制相似问题