假设我们使用动态分配的数组实现堆栈。如果数组填充,我们是 面临两难选择。从以下选项中,选择最佳描述的选项 我们处理填充数组的策略。
(a)我们声明一个新数组,两次 像原来一样大,并复制数据 进入新的空间总费用 O(n),超过一系列n推。
(b)我们声明另一个数组并保持 跟踪两个(或更多)中的哪一个 数组包含当前的顶部 堆栈在堆栈的私有成员中 类。每次推动我们花费O(1)。
(c)对于某些固定的k,我们创建一个新的 大小为n + 2 ^ k的数组并复制 数据进入新的平均空间 每次推动操作的成本为O(1)。
(d)我们避免实现堆栈 使用动态分配的数组, 因为它必须是低效的 重新分配记忆。
(e)这些答案都不是 合理的回应。
我很确定正确的答案是,但我不明白为什么那会是最好的答案呢?其他人是否实用?他们似乎对我好。例如,c
几乎与`a,no?相同?为什么加倍有利然后增加一定数量呢?其他选择怎么样 - 为什么他们不工作?
答案 0 :(得分:3)
假设您的堆栈是128个元素,并且您最终必须在其中存储4096个元素。你需要多少倍才能调整数组的大小,每次加倍,每次扩展128个项目?
答案 1 :(得分:1)
这看起来像是家庭作业,也可能是带回家的考试,所以我会故意留下一些答案。
a)尝试为O(n)
声明提供证据。与b)的证据比较。
b)如何存储使用的子阵列? (它一直是乌龟。)
c)尝试为O(1)
断言提供证据。与a)的证明相比较。
e)如果上述任何一项是合理的,这是微不足道的。反之亦然。