algorithm - 通过改变大小增加动态数组时的分摊运行时间

标签 algorithm dynamic append amortized-analysis

我有一个动态数组,我不断地向其追加项目。 append 是复杂性 O(1)。当数组变满时,我想增长数组并将其复制过来,这就是复杂度 O(n)

现在,假设我在数组变满时以不同的速率增长它。这些费率是:

i) 一些常数 C

ii) n/2

iii) n^2

每种情况下的分摊运行时间是多少?

我相信我能够解决案例 i。摊销运行时间将是操作的总成本除以操作总数。在这种情况下,总成本为 C * O(1) + 1 * O(n),操作总数为 C。因此,分摊运行时间为 O(n)

但是,在分析剩下的两个案例时,我有点迷茫。在我看来,操作总数将分别为n/2 + 1n^2 + 1,但我不太清楚如何计算总运营成本。

谁能引导我走上正确的道路?

最佳答案

您可以使用与第一种情况类似的分析。

ii.
(n/2 * O(1) + O(n)) / (n/2) = O(1) + O(n)/n = O(1)
iii.
(n^2 * O(1) + O(n)) / (n^2) = O(1) + O(n)/n^2 = O(1)

This answer更详细地解释了为什么按 n 比例调整大小的动态数组(假设它调整到 n 1 或更大的幂)具有恒定的摊销成本。

关于algorithm - 通过改变大小增加动态数组时的分摊运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54639580/

相关文章:

algorithm - 曼哈顿距离中最近的两个点

c++ - 使用动态分配的char数组的长度

C++ 释放确切大小的内存

javascript - Polymer - 动态加载不同的组件

jquery - 使用 jQuery .append 并获取当前索引()

algorithm - 对数组中最大数的索引进行采样,概率为 1/(最大数的数量)

algorithm - 包含给定节点集的最小连通子图

arrays - Quicksort 算法的最坏情况

append - 使用 Notepad++ 和 Regex 将文本添加到每个文件的末尾

javascript - 如何将我用 js append 的内容居中并替换它