2014-09-13 7 views
4

Является ли временной сложностью следующий код O (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

Это так, как вы сказали. Единственное исключение может быть, если A [i], даже если он может быть максимально V, он будет, например, всегда постоянным «в среднем» (амортизированная сложность). Не вдаваясь в подробности - для этого есть много хороших ресурсов. И университеты, конечно. – PawelP

+0

Для примера того, что говорит Пауэлл, предположим, что A полон нулей, за исключением одного значения, которое равно V. Внутренний цикл будет работать только для этого i, поэтому общая временная сложность будет равна O (NV + V^2) – hugomg

+0

Да, сложность времени O (NV^2). Вот и все. – Hungry

ответ

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). 
+0

Не забудьте также ответить на ответ! –

1

Достоверно O (NV^2), поскольку это означает, что код никогда не медленнее, чем это. Поскольку max (A) = V, вы можете сказать, что наихудший случай был бы тогда, когда в каждом индексе A есть V. Если это так, то сложность может быть ограничена O (NV * V).

Вы можете очень точно рассчитать, что сложность цикла for k может быть O (avg (A)). Это позволяет нам сказать, что вся функция Omega (NV * Avg (A)), где ср (А) = < В.

Theta обозначения (что означает asympthotical сложность) бы можно сказать, как Theta (NV * O (V)), O (V), представляющий сложность функции, которая никогда не будет расти быстрее, чем V, но не является постоянной.

Смежные вопросы