2013-09-24 2 views
1

Я не уверен, правильно ли я делаю эти проблемы, поэтому мне нужно, чтобы кто-то сказал мне, если я ошибаюсь.Найти сложность вычислений вложенных циклов

for (i = 0 ; i < n ; i ++) 

Это n-0 = n назначение, и это O (g (n)) вправо?

Хорошо так что знаю, если я хочу, чтобы получить количество заданий и O (г (п)) в этих вопросах:

sum = 0; 
for (i = 1 ; i < n * n ; j ++) 
{ 
    for (j = 1 ; j <= n; j ++) 
    { 
     sum += j; 
    } 
} 

что я сделал, сумма = 0 является одним присваивание и внешний контур равен п^2 - 1 задание и внутренний цикл N-1 задание и, наконец, сумма 1 назначение

Таким образом, количество назначений является 2+ (п^3 + 1), что дает O (g (n^3))

В этом вложенный цикл:

sum = 0; 
for (i = 1 ; i <= n; i ++) 
{ 
    for (j = 1 ; j <= 100 ; j++) 
    { 
     for (k = 1 ; k <= n ; k ++) 
     { 
      sum += k; 
     } 
    } 
} 

Что я сделал, сумма = 0 равно 1 Назначение тогда первый цикл 1-н заданий второго цикл 99 последнего цикл 1-н , а затем сумма = 2

Так что я получил 3 + (1 + п^2) задания, которые дают мне O (г (п^2))

существует ничего плохого с тем, что я только что сделал?

+0

Не то, чтобы я смотрел на него очень быстро, хотя трехслойная вложенная петля выглядит немного странно (зачем перебирать три петли и работать только с k?) – Rogue

+0

Так что же случилось с тем, что я сделал? – rullzing

+1

Я не знаю, почему «g» там. Я видел ссылки на O (f (n)) и O (g (n)), где «f» и «g» - функции от n. Но здесь такие вещи, как 'n^2' и' n^3' _are_ ваши функции. Поэтому, если «g» не имеет особого нового значения, которое было изобретено после окончания школы, я думаю, что это не принадлежит. Просто O (n^2) и O (n^3) - это то, что вы хотите. Помимо этого, вы сделали некоторые ошибки, подсчитывая количество заданий, но окончательные ответы O (...) кажутся правильными. – ajb

ответ

0

Ваши расчеты верны. Единственное, что может быть - иногда важно, является ли это O (g (n^2)) или O (g (* n^2)). Множитель не очень важен для широкомасштабных значений N, но в небольших масштабах - постоянный коэффициент в 99 раз больше, чем итерации (если они не оптимизированы компилятором).

+2

Извините, неправильно. Хотя программа, которая занимает в 99 раз больше, чем другая, безусловно, касается пользователей программного обеспечения, постоянный множитель не имеет места в O-нотации, что является математической концепцией.Я ожидаю, что профессор пометит вас, чтобы положить что-то подобное в ваш O (...). – ajb

+0

@ajb Ну, как технически, вы * можете использовать любое количество постоянных множителей и асимптотически меньшие члены в обозначениях большой O ('O (n^2) = O (45879n^2 + 55n + 25log n + 13) '), хотя делать это бессмысленно (и я соглашаюсь на понижающую маркировку). – Dukeling

+1

@ajb На самом деле, как я помню, «O (2^n)! = O (2^(5n))» (ну, ** что-то **, как это верно, даже если это не так), поэтому постоянный множитель ** внутри ** функция оправдана (здесь мы говорим о '' ', хотя, как вы сказали,' g', вероятно, не принадлежит). – Dukeling

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