1

我正在寻找对事物如何运作的理解,而不仅仅是答案。尽管答案是,我给出了我所知道的,但我不太确定,而且文本中没有太多关于这种分析的内容。

我很清楚这不是你应该如何实现堆栈的方式,但这是我们给出的场景。

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)

我遇到的问题是这看起来很容易。我错过了什么,还是我几乎已经死了?

4

0 回答 0