给定一个时间复杂度为 O(n^2) 的算法,如果我将输入 n 增加三倍会发生什么?

rea*_*s0n 4 algorithm time-complexity

几个月前,我在期中考试中答错了以下问题:

通过实验,您确定在对某个大小为 n 的数组进行排序时,插入排序会执行 2000 次比较。如果将数组的大小增加三倍到 3n,它将执行大约多少次比较?

A. 6000

B. 12000

C. 18000

D. 36000

E. 取决于数组的内容

鉴于插入排序是 O(n^2),我选择了 C,18000 并被标记为错误。

我是这样推理的:n^2 = 2000, => n =~ 44. 44*3 = 134, 134^2 = 18000

哪个是正确答案,为什么?

dec*_*ory 5

插入排序O(n^2)在最坏的情况下和O(n)在最好的情况下。

为了插入一个新元素,插入排序会为一个元素搜索合适的位置。如果算法遇到的每个新元素都大于所有其他元素(如果您按升序排序),则只需进行 1 次比较即可为每个新元素找到新位置。

因此,如果数组已经排序,则复杂度为O(n),如果按相反顺序排序,则为O(n^2)

所以正确答案是:

E. 取决于数组的内容