2016-03-09 3 views
1

Как вы вычислить наихудшую временной сложность этого алгоритмакак вычислить худший случай временной сложность алгоритма

for j = 1 to i do 
    for k = 1 to j do 
     print(i,j,k) 
+0

Изучите код и выясните, сколько операций необходимо выполнить для фиксированного значения 'i'. (Что такое 'i'?) Вы что-то пропустили после первого' = '? –

+0

Возможный дубликат [Как найти временную сложность алгоритма] (http://stackoverflow.com/questions/11032015/how-to-find-time-complexity-of-an-algorithm) – jaypb

+0

'j = to i' Что это значит? И какова сложность 'print'? И что вы подразумеваете под «наихудшим случаем»? Здесь нет случаев. –

ответ

0

Поскольку у нас нет никаких условий, которые влияют на время выполнения этого алгоритма сложность оставалась бы то же самое: всегда есть такая же сложность времени.

Давайте будем простыми.

Если мы рассмотрим только семантическую важные инструкции во внутреннем цикле мы можем вычислить сложность, как следует:

Каждый внешний запуск цикла увеличивает следующий внутренний цикл запуска счетчика на единицу.

У нас было бы 1 + 2 + 3 + 4 + 5 + ... + i-1 + i циклов, каждый раз, когда внешний контур завершен, внутренний цикл будет выполнен еще один раз, чем раньше.

Теперь мы попытаемся обобщить это выражение.

Мы удвоим первоначальный термин, чтобы представить его в альтернативной форме, вы поймете, почему.

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) + (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) 

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1+i) + (2 + (i-1)) + (3 + (i-2)) + ... + ((i-1) + 2) + (i+1) 

Теперь мы можем видеть, что в этом представлении мы имеем кратное одному и тому же термину.

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1+i) + (1+i) + (1+i) + ... + (1+i) + (1+i) 

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = i*(1+i) 

Поскольку у нас еще есть двойник нашей первоначальной сложности, нам нужно разделить на 2, что приводит к выражению замкнутой формы.

1 + 2 + 3 + 4 + 5 + ... + i-1 + i = (i*(1+i))/2 

в результате нашей сложности O(i(i+1)/2) =>O(i^2)

Мы можем сделать это из-за того, что данный многочлен внутри O(), вы можете просто заменить его x^highest_power

Мы не» t соблюдать инструкции, которые обязательно обрабатываются самими контрольными структурами; Я не думаю, что это задача. Если вы этого хотите, сообщите мне.

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