假设我有一个堆栈,由一个 n 元素数组支持,推送成本为 1,从数组中取出一个元素的成本为 1,调整数组大小的成本是移动的元素数。
1)每次堆栈变满时,我都会将当前的 n 个元素复制到一个比以前大一个元素的新数组中。我的文字声称一系列 n 推送将导致总成本:
1 + 2 + 3 + ... + n
为什么是这样?假设我的数组从 n = 1 开始。
我推送,堆栈现在已满(成本 1)我增加数组的大小(n = 2 和成本 2)我推送并且堆栈现在已满(成本 1)我增加数组的大小(n = 3 和成本4) ...
我错过了什么?
2)假设每次堆栈已满时我都会将数组的大小加倍。现在我有一系列从 1 元素数组开始的 n 推送:
我推送,堆栈现在已满(成本为 1)我将数组大小加倍并复制 1 个元素(成本为 2,n = 2)我推送并且堆栈现在已满(成本为 1)我将数组大小加倍并复制 2元素超过(成本 4,n = 4)...
这个分析看起来对吗?
对于一系列 n 推送,它将产生 1 + 2 + 1 + 4 + 1 + 8 + ... + 1 + 2 ^ (n/2)