这是循环O(1)还是O(n)?

时间:2018-12-25 08:54:51

标签: code-analysis

给出了具有任意大小和一段代码的array [] = {0,2,6,...,1000000}:

Party{
    String Name;
    @JsonProperty(Contents<Contact>)
    Contents<Contact> contacts; // this should change at run time
}

是O(1)是因为它仅打印第一项还是O(n)是因为它打印了n(大小)时间?

2 个答案:

答案 0 :(得分:1)

这是O(n),其中n是给定数组的大小。

让我们说打印数组元素需要1秒。

如果数组有1个元素,程序将打印第一个元素1次,因此运行该程序需要1秒钟。

如果数组有10个元素,程序将打印第一个元素10次,因此运行该程序需要10秒钟。

如果数组有100个元素,程序将打印第一个元素100次,因此运行该程序需要100秒。

运行程序所花费的时间随着数组的大小线性增加。因此,算法为O(n)。

答案 1 :(得分:1)

是O(n)。

由于此for循环的范围是从0到 size ,因此此for为O(n)。在for中,它是print array[0],即O(1)。

因此整个段变为O(n)x O(1),也就是O(n)。

它将打印第一项 n次,结果为O(n)。

例如,考虑下面的简单分配代码:

for i = 0 to size
    a = array[0]

它还会获得第一项 n次,并且显然为O(n)(忽略任何编译器优化)。