【发布时间】:2018-02-08 20:40:24
【问题描述】:
我正在阅读《Cracking the Coding Interview》,在 Big O 章节中,有关于 Amortized Time 的解释。此处使用了需要增长的诸如 ArrayList 之类的经典示例。当数组需要增长时,插入将花费O(N) 时间,假设它必须将 N 个元素复制到新数组中。这很好。
我不明白的是,由于数组的容量翻了一番,为什么每次插入的摊销时间是O(1) 据我所知,无论何时插入数组,它总是O(N)手术。摊销时间有何不同?我确定文字是正确的,我只是不理解O(1) 摊销时间的概念。
【问题讨论】:
-
这里已经有答案Constant Amortized Time
-
插入?你确定它没有说附加吗?
-
随着阵列容量翻倍,阵列需要增长的概率呈指数下降,接近0。
-
@Dúthom 我的问题或多或少是如何插入数组 O(1)。我认为无论在什么情况下,插入总是 O(N)。
-
时间考虑只有 ***n***→<_really big number_>。就实际与数组混淆的代码而言,是的,它是 O(n) (或更糟)。在应用程序的生命周期内调用与数组混淆的函数时,它所花费的时间接近一个特定的时间间隔,您可以将其设为 1。
标签: algorithm big-o amortized-analysis