performance - LinkedList 与 HashMap 的摊销性能

标签 performance algorithm data-structures computer-science

对于大多数操作,哈希表的摊销性能通常被认为是 O(1)。

例如,标准 LinkedList 实现的搜索操作的摊销性能是多少?是 O(n) 吗?

我对这是如何计算的有点困惑,因为在最坏的情况下(假设哈希函数总是冲突),哈希表在搜索操作方面几乎等同于 LinkedList (假设一个标准的存储桶实现)。

我知道在实践中,除非哈希函数被破坏,否则这种情况永远不会发生,因此在一系列操作中,平均性能几乎是恒定的时间,因为碰撞很少见。但是在计算摊销的最坏情况性能时,我们不应该考虑最坏情况序列和最坏情况实现吗?

最佳答案

没有“摊销的最坏情况性能”这样的东西。摊销性能是一种长期操作序列的“平均”性能。

对于哈希表,有时需要在一长串插入之后调整哈希表的大小,这将花费 O(n) 时间。但是,由于它只在每次 O(n) 次插入时发生,因此该操作的成本分摊到所有插入以获得 O(1) 的摊销时间。

是的,在散列函数损坏的最坏情况下,散列表的每个操作都可能是 O(n)。但是,分析这样的哈希表是没有意义的,因为它不是典型用法的情况。

关于performance - LinkedList 与 HashMap 的摊销性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14947467/

相关文章:

performance - 未处理的异常如何导致 Azure 应用程序服务缓慢?

.net - 数据读取器仍然比数据集更快吗?

c# - list.count 是在物理上遍历列表来计算它,还是保留一个指针

算法:将 child 分成四组

java - 用于基于类型的查询的最佳数据结构是什么?

java - Hadoop - 作业统计

algorithm - 关于在 DP 中使用 bool 数组进行内存

arrays - 如何识别整数数组中的周期序列

c++ - 在 C++ 中查找和存储超像素邻域的算法和数据结构

java - 迭代 Linkedhashmap