哈希表可以达到O(1)似乎是常识,但是这对我来说是没有意义的。 有人可以解释吗? 这里有两个想到的情况: A. 值是一个比散列表的大小小的int。 因此,这个值是它自己的哈希,所以没有哈希表。 但是,如果有的话,这将是O(1),仍然是低效的。 B. 你必须计算一个哈希值。 在这种情况下,查找数据大小的顺序是O(n)。 在O(n)工作之后,查找可能是O(1),但是在我眼中仍然是O(n)。 除非你有一个完美的散列表或一个大的散列表,否则每个存储桶可能有几个项目。 所以,无论如何它都会在某个点上进入一个小的线性search。 我认为散列表很棒,但是除非它是理论上的,否则我不会得到O(1)的称号。 维基百科关于散列表的文章始终引用常量查找时间,并完全忽略散列函数的成本。 这真的是一个公平的措施? 编辑:总结我学到的东西: 这在技术上是正确的,因为散列函数不需要使用密钥中的所有信息,因此可以是恒定的时间,并且因为足够大的表可以将冲突降低到接近恒定的时间。 在实践中是这样的,因为随着时间的推移,只要散列函数和表大小被select为使冲突最小化,即使这通常意味着不使用恒定时间散列函数,也可以实现。