我有一个函数的伪代码(如下)。
我明白,如果i
,j
和k
中的每一个都是1
,那么最坏的情况运行时间为O(n^3)
。我正在努力了解n/2
的影响,尽管 - 如果有的话 - 在运行时间。任何指导都会很棒。
for i=n/2; i < n; increase i by 1
for j=1; j < n/2; increase j by 1
for k = 1; k < n; increase k by k*2
Execute a Statement
答案 0 :(得分:0)
您的理解不正确
k
增加k*2
会导致对数时间,实际上复杂度为O(n^2 * log n)
O(n/2) = O(n)
,因此n/2
对渐近式增长没有任何影响。
如果您不确定,一般的方法是尽可能精确地计算它,然后删除常量。
for i
将执行n/2
次,for j
也会n/2
次,k
将执行log n
次。
n/2 * n/2 * log n = (n^2/4) * log n
。您可以删除常量,因此O(n^2 * log)
答案 1 :(得分:0)
最坏的情况时间复杂度不是O(N^3)
检查最里面的for循环。 K
增加K * 2
这意味着,最里面的for循环将花费O(lgN)
时间
其他两个外部循环各占O(N)
次,N/2
对运行时间的渐近增长没有任何影响。
因此,整体时间复杂度为O(N^2 * lgN)