2009-07-09 3 views
4

Если у меня есть следующий код:Big O вопрос

IterateArray(object[] array) 
{ 
    for(int i=0; i<array.length; i++) 
    { 
     Dosomething(array[i]); 
    } 
} 

и производительность время в Dosomething(object) метода является O (журнал N), является общая производительность IterateArray O (п) или O (п журнал п) ?

Спасибо.

+0

Кажется, что-то пошло не так, вставив код ... – Thorarin

+0

Ваш вопрос кажется неполным, а где остальная часть функции? – amischiefr

ответ

12

Было бы O (п § п)

Вы делаете в O (журнал п) операцию производительности п раз, а умножение выполняется с Big O, поэтому O (N) * O (журнал N) = O (n log n)

Важно отметить, что между m и n действительно не должно быть различий, если вы смотрите на два массива разных размеров. Причина в том, что m и n - оба константы, и они асимптотически эквивалентны, если вы должны были рассчитать их темпы роста.

+6

Не так быстро, это будет O (n log n), если это DoSomething (array.length) вместо DoSomething (array [i]) –

+2

В вопросе говорится, что Dosomething выполняет в log n время. Кроме того, я не думаю, что переход в целое число в вызов метода имел бы значение. – AlbertoPL

+0

Чтобы выразить свою точку зрения, вы вообще ничего не можете принять в отношении метода Dosomething, даже если вы проходили весь массив по сравнению с единственным элементом. Конечно, ваш пример демонстрирует передачу в целое число. – AlbertoPL

10

O (п § п)

Подумайте об этом - вы выполняете журнал н операцию п раз.

1

Поскольку цикл 'for' выполняет итерацию n (скажем, длина массива n), и в каждой итерации выполняется «Dosomething», общая производительность будет O (n logn).

веселит

4

Для каждого из ваших объектов м, если производительность DoSomething() является O (журнал N), то общая производительность во всех ваших м объектов будет O (м лог н).

14

Short & несколько неправильный ответ - O (n log n).

Долгий ответ: было бы точнее записать его как O (n log m).

Если DoSomething действительно зависит от всего массива, похоже, что он работает с одним элементом. Поэтому мы различаем это отдельно, используя «m».

+1

+1, хотя я бы даже не признал O (n lg n) в качестве ответа.Есть две переменные, и выразить время работы в терминах только одного можно только по совпадению. – ojrac

+0

Я голосую за это, потому что он более тщательный, чем другие ответы. Однако, учитывая то, что ОП поставил в вопросе, я склонен полагать, что правильным ответом является O (n log n). Возможно, это не так, как OP _meant_, но это то, что они сказали. – rmeador

+0

Нет никакой реальной точки в отличительных константах. Когда дело доходит до асимптотического анализа, вы не устанавливаете никакого нового порога. – AlbertoPL