Big-O& Big-Theta:for循环O(1)时间复杂度?

时间:2016-02-16 06:58:12

标签: for-loop big-o time-complexity big-theta

我无法理解Big-O和Big-Theta究竟意味着什么。有人可以解释一下它的含义吗?

假设n是常数,那么最坏情况下O(1)时间复杂度的for循环是什么?

此外,算法运行时间最差的情况是O(n ^ 2),因为insertedSort的复杂度为O(n ^ 2)?如果不是,对于最坏情况,下面算法的时间复杂度是多少?

void fnA(int[] array)
{
   ArrayList a2 = new ArrayList<Integer>(array.length);

   for (int i=0; i<n; i++) {
      a2.add(array[i]);
      insertionSort(a2);
   }
}

1 个答案:

答案 0 :(得分:1)

您可以将Big-O视为上限。 如果你有一个for循环。说

for i:= 1 to 10 print("hello");

然后它的复杂性是O(1)。 O(1)并不意味着它在1条指令中完成。它只是意味着它在运行时间方面不会随着输入的大小(n)而变化。同样,O(n)表示其运行时间与输入大小成正比。

对于您的示例,您可以通过以下方式使其变得简单:您有一个外部for循环,其复杂度为O(n)。然后在循环体内,调用add(即O(1))和insertSort,即O(n ^ 2)。然后总复杂度为O(n)*(max(O(1),O(n ^ 2))= O(n ^ 3)。

实际上,这只是估算复杂性的快捷方式。为了更准确的方法,你应该做一些数学运算,比如当a2的长度为1,2,3 ......时,n,需要在插入排序中执行多少指令。然后总结一下。它会给你一些公式,最重要的术语是n ^ 3.

相关问题