以下代码的时间复杂度是否为(NV ^ 2)?
for i from 1 to N:
for j from 1 to V:
for k from 1 to A[i]://max(A) = V
z = z + k
答案 0 :(得分:2)
是的,每当我们谈论O-notation
时,我们总会考虑 上限(或最坏情况) 。
因此,此代码的复杂性将等于
O(N*V*maximum_value_of_A)
=O(N*V*V) // since,maximum value of A=V,so third loop can maximally iterate from 1 to V---V times
=O(N*V^2).
答案 1 :(得分:1)
确定它是 O(NV ^ 2),因为这意味着代码永远不会慢。因为max(A)= V,你可以说最糟糕的情况是,当A的每个指数都存在V.如果是,那么复杂性可以限制为O(NV * V)。
您可以非常粗略地计算for k
循环的复杂度可以是O(avg(A))。这允许我们说整个函数是Omega(NV * avg(A)),其中avg(A)< = V。
Theta表示法(意为渐近复杂性)可以表示为 Theta(NV * O(V)),O(V)表示函数的复杂性,该函数永远不会比V快,但是并不是一成不变的。