2010-06-04 5 views
1

Я все еще изучаю измерение сложности с помощью Big O Notation, задавался вопросом, правильно ли сказать, что сложность следующего метода: O (n * log4n), где «4» - это индекс.Какова сложность следующего метода?

public static void f(int n) 
{ 
    for (int i=n; i>0; i--) 
    { 
     int j = n; 
     while (j>0) 
      j = j/4; 
    } 
} 
+1

Обычно вы бы просто написать O (N журнал (п)), не обращая внимания на индекс. –

+0

Константы обычно выпадают, я думал .. поэтому вы не пишете O (n log 4n), вы просто напишете O (n log n) (если это действительно так) – bwawok

ответ

6

Да, Вы правы, что сложность функции O(n*log_4(n))

Log_4(n) = ln(n)/ln(4) и ln(4) является постоянным, так что если Ваша функция имеет сложность O(n*log_4(n)) это также верно, что он имеет сложность O(n*ln(n))

3

вы имели в виду

public static void f(int n) 
{ 
    for (int i=n; i>0; i--) 
    { 
     int j = i; // Not j = n. 
     while (j>0) 
      j = j/4; 
    } 
} 

?

В этом случае вы тоже правы. Это O (nlogn). Использование 4 в качестве индекса также верно, но это только делает его более громоздким для записи.

Даже с линией j=n это O (nlogn).

На самом деле, чтобы быть более точным, вы можете сказать, что это Theta (n logn).

+2

Я не думаю, что использование 4 в качестве индекса однако, так как это то же самое, что и запись константы: 'log4 (n) = log (n)/log (4)' – IVlad

+1

@IVlad: Это все еще правильно. Как правильно сказать O (2n) или O (n^2 + 3n + 45). Это просто еще одна функция, и мы обычно избегаем констант, чтобы упростить чтение/запись/понимание. Наличие констант в нем раздражает, но не является неправильным. –

+0

@Moron - каждый текст, который я видел, говорит о том, что вы не помещаете константы или термины с более низкой степенью в обозначениях большого числа, поэтому 'O (2n)' неверно, и это должно быть 'O (n)' и ваш второй пример должен быть «O (n^2)». Как википедия, так и http://www.perlmonks.org/?node_id=227909, похоже, предлагают следующее: «когда вы видите O (2N) или O (10 + 5N), кто-то смешивает детали реализации с концептуальными.». Можете ли вы предоставить ссылку, которая более подробно обсуждает эту проблему? – IVlad

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