我正在寻找对事物如何运作的理解,而不仅仅是答案。尽管答案是,我给出了我所知道的,但我不太确定,而且文本中没有太多关于这种分析的内容。
我很清楚这不是你应该如何实现堆栈的方式,但这是我们给出的场景。
A部分
插入包含 N 个整数(表示堆栈)的(未排序)数组 a 的插槽 a[0] 的最坏情况、平均情况和最佳情况运行时间是多少?给出 theta 范围。
B部分
如果每次插入都发生在 a[0] 处,则将 N 个整数插入一个初始为空的数组 a(代表一个堆栈)的摊销运行时间是多少?给出一个紧密的 O 界并解释你的答案。
讲师很清楚我们正在对 a[0] 进行所有插入,并且没有从这个“堆栈”中删除。
我的分析是这样的
假设:a.length >> N
最好的情况是 Theta(1),它发生在我们插入一个空的“堆栈”时。
最坏的情况是 Theta(N),因为作为插入过程的一部分,我们必须移动 N-1 个元素以在 a[0] 处腾出空间。
平均情况也是 Theta(N),因为无论如何,我们总是要移动 N-1 个元素。
摊销案例
每个插入成本(N-1),我们有 N 个元素,所以我们使用:
N
Sum (i) = [ N(N+1) ] / 2 = N^2 / 2 which is O(N^2) for N insertions
i=1
摊销成本将是 N^2 / N = O(N)
我遇到的问题是这看起来很容易。我错过了什么,还是我几乎已经死了?