找到常量的运行时间?

时间:2014-10-02 23:11:38

标签: performance algorithm pseudocode

我试图回答一些我遇到过的问题。我一直在观看有关算法运行时间的一些视频。根据我的理解,你必须在迭代中计算每个操作以获得运行时间。

我有以下问题,我不太明白。选择的常数让我失望。任何人都可以试着解释一下吗?

以下代码的运行时间是多少? (A是数组大小N,“B”,“C”,“D”是选择中的常量)

1. for j ← 2 to length(A)
2.     key ← A[ j ]
3.     //Insert A[ j ] is added in the sorted sequence A[1,..j-1]
4.     i ← j - 1
5.     while i >= 0 and A [ i ] > key
6.         A[ i +1 ] ← A[ i ]
7.         i ← i -1
8.     A [i +1] ← key

答案选项是:

A)B * n + C + D 

B)B * n * log n + C * log n + D 

C)B * log n + C + D 

D) B * n^2 + C * n + D 

对我而言,重要的不是答案,而是如何实际应对。谢谢。

1 个答案:

答案 0 :(得分:0)

这看起来好像在最坏的情况下它是O(n ^ 2),这是选项(D)。

你的外部循环遍历数组的长度,所以外部循环经过n次。 (它实际上是n-1,但在这种类型的计算中你可以忽略它。)

然后(步骤5)你有一个内循环。 (我假设这个循环在第7步或第8步之后结束,虽然它不太清楚。)这个内部循环也可以运行多达n次迭代。

然后,你有一个O(n)循环在另一个O(n)循环内运行;或大约n次迭代乘以n次迭代。这给你O(n ^ 2)。常数因素并不重要:它需要花费一些时间来进行n ^ 2次操作,加上一些我们不关心的其他小东西。这就是选项(D)所说的。

顺便说一下,目前尚不清楚步骤3的作用。这可能会被注释掉,或者可能表示此处正在插入数组。但这并不重要:但是插入正在发生,它不会超过O(n)步骤。它在内部循环之外,因此外部循环仍然具有O(n)次迭代,并且其中的内容仍然在O(n)时间内运行。总数仍为O(n ^ 2)。