散列表可以实现 O (1) ,这似乎是常识,但对我来说从来没有意义。有人能解释一下吗?我想到了两种情况:
因此,该值是它自己的哈希表,所以不存在哈希表。但是如果有的话,它将是 O (1) ,而且仍然是低效的。
在这种情况下,正在查找的数据大小的顺序是 O (n)。在做 O (n)工作之后,查找可能是 O (1) ,但在我看来仍然是 O (n)。
除非您有一个完美的散列表或大型散列表,否则每个桶可能有几个项目。因此,它在某一点上退化成一个小的线性搜索。
我认为哈希表是可怕的,但我没有得到 O (1)的指定,除非它只是理论上的。
Wikipedia 的 用于哈希表的文章始终引用常量查找时间,并完全忽略散列函数的开销。这真的是一个公平的衡量标准吗?
编辑: 总结一下我学到的东西:
这在技术上是正确的,因为哈希函数不需要使用键中的所有信息,因此可以是常量时间,并且因为一个足够大的表可以将冲突降低到接近常量时间。
这在实践中是正确的,因为随着时间的推移,只要选择哈希函数和表大小以尽量减少冲突,即使这通常意味着不使用常量时间哈希函数,它也能正常工作。