Порядок роста - PullRequest
       4

Порядок роста

7 голосов
/ 02 сентября 2010

для

f = n(log(n))^5
g = n^1.01

- это

f = O(g)
f = 0(g)
f = Omega(g)?

Я попытался разделить оба на n, и я получил

f = log(n)^5
g = n^0.01

Но я все еще не понимаю, к какомуБыстрее.Может ли кто-нибудь помочь мне с этим и объяснить причину ответа?Я действительно хочу знать, как ( без калькулятора ) можно определить, какой из них растет быстрее.

Ответы [ 4 ]

8 голосов
/ 02 сентября 2010

Вероятно, проще всего сравнить их логарифмические профили:

Если (для некоторых C1, C2, a> 0)

f < C1 n log(n)^a
g < C2 n^(1+k)

Тогда (для достаточно больших n)

log(f) < log(n) + a log(log(n)) + log(C1)
log(g) < log(n) + k log(n) + log(C2)

В обоих случаях преобладает рост log (n), поэтому вопрос в том, какой остаток больше.Остаток log (n) растет быстрее, чем log (log (n)), независимо от того, насколько мало k или насколько велико a, поэтому g будет расти быстрее, чем f.

Таким образом, с точки зрения обозначения big-O: g растет быстрее, чем f, поэтому f может (асимптотически) ограничиваться сверху функцией, подобной g:

f(n) < C3 g(n)

Итак, f = O (g).Аналогично, g может быть ограничено снизу f, поэтому g = Omega (f).Но f не может быть ограничена снизу такой функцией, как g, поскольку g в конечном итоге перерастет ее.Так что f! = Omega (g) и f! = Theta (g).

Но aaa делает очень хороший вывод: g не начинает доминировать над f, пока n не станет неприлично большим.

У меня нет большого опыта в масштабировании алгоритмов, поэтому исправления приветствуются.

3 голосов
/ 02 сентября 2010

Я бы разбил это на несколько простых, многократно используемых лемм:

Лемма 1: Для положительной постоянной k, f = O (g) тогда и только тогда, когда f = O (кг).

Доказательство. Предположим, что f = O (g).Тогда существуют такие постоянные c и N, что | f (n) | N. Таким образом, | f (n) |<(c / k) (k | g (n) |) для n> N и постоянной (c / k), поэтому f = O (кг).Обратное утверждение тривиально аналогично.


Лемма 2: Если h - положительная монотонно возрастающая функция, а f и g положительны для достаточно большого n, то f = O (g) тогда и только тогда, когда h (f) = O (h (g)).

Доказательство. Предположим, что f = O (g).Тогда существуют такие постоянные c и N, что | f (n) | N. Так как f и g положительны для n> M, f (n) max (N, M).Поскольку h монотонно возрастает, h (f (n)) max (N, M) и, наконец, | h (f (n)) | max (N, M), поскольку h положительно.Таким образом, h (f) = O (h (g)).Обратное следует аналогично;ключевой факт заключается в том, что если h монотонно возрастает, то h (a) a Лемма 3: если h - обратимая монотонно возрастающая функция, то f= O (g) тогда и только тогда, когда f (h) + O (g (h)).

Доказательство. Предположим, что f = O (g).Тогда существуют такие постоянные c, N, что | f (n) | N. Таким образом, | f (h (n)) | N. Поскольку h (n) обратимо и монотонно возрастает, h (n)> N всякий раз, когда n> h ^ -1 (N).Таким образом, h ^ -1 (N) - новая необходимая нам константа, а f (h (n)) = O (g (h (n)). Обратное следует аналогичным образом, используя обратную формула g.


Лемма 4: Если h (n) отлично от нуля при n> M, то f = O (g) тогда и только тогда, когда f (n) h (n) = O (g (n) h (n)).

Доказательство: если f = O (g), то для констант c, N, | f (n) | N. Поскольку | h (n) | положительно дляn> M, | f (n) h (n) | max (N, M) и, следовательно, f (n) h (n) = O (g (n) h (n)). Обратное аналогично следует с использованием 1 / h (n).


Лемма 5a: log n = O (n).

Доказательство: Пустьf = log n, g = n. Тогда f '= 1 / n и g' = 1, поэтому при n> 1 g увеличивается быстрее, чем f. Более того, g (1) = 1> 0 = f (1),поэтому | f (n) | <| g (n) | для n> 1 и f = O (g).

Лемма 5b: n! = O (log n).

Доказательство: предположим, что в противном случае противоречие, и пусть f = n и g = log n. Тогда для некоторых констант c, N, | n | N.

Пусть d = max(2, 2c, sqrt (N + 1)). По расчету из леммы 5a, так как d> 2> 1, log d 2d (log d)> = d log d + d log 2 = d (log 2d)> 2c log 2d> c log (2d ^ 2) = cg (2d ^ 2) = c | g (2d ^2) |для 2d ^ 2> N противоречие.Таким образом, f! = O (g).


Итак, теперь мы можем собрать ответ на первоначально заданный вами вопрос.

Шаг 1:

log n = O(n^a)
n^a != O(log n)

Для любой положительной константы a.

Доказательство: log n = O (n) по лемме 5a.Таким образом, log n = 1 / a log n ^ a = O (1 / an ^ a) = O (n ^ a) по леммам 3 (для h (n) = n ^ a), 4 и 1. Второй фактследует аналогично, используя лемму 5b.

Шаг 2:

log^5 n = O(n^0.01)
n^0.01 != O(log^5 n)

Доказательство: log n = O (n ^ 0,002) к шагу 1. Затем по лемме 2 (с h (n)= n ^ 5), log ^ 5 n = O ((n ^ 0,002) ^ 5) = O (n ^ 0,01).Второй факт следует аналогично.

Окончательный ответ:

n log^5 n = O(n^1.01)
n^1.01 != O(n log^5 n)

Другими словами,

f = O(g)
f != 0(g)
f != Omega(g)

Доказательство: примените лемму 4 (используя h (n) = n) к шагу 2.

С практикой эти правила становятся «очевидными» и приобретают вторую природу.и если ваш тест не требует, чтобы вы доказали свой ответ, вы обнаружите, что решаете проблемы такого рода.

2 голосов
/ 02 сентября 2010

как насчет проверки их пересечений?

Solve[Log[n] == n^(0.01/5), n]

                                       1809
{{n -> 2.72374}, {n -> 8.70811861815 10    }}

Я обманул с Mathematica

Вы также можете рассуждать с производными,

In[71]:= D[Log[n], n]

1
-
n
In[72]:= D[n^(0.01/5), n]

0.002
------
 0.998
n

рассмотрим, что происходит, когда n становится действительно большим, изменение сначала стремится к нулю, затем функция не теряет свою производную (экспонента больше 0).

это говорит вам, что является более сложным теоретически. однако в практической области первая функция будет расти быстрее.

0 голосов
/ 03 сентября 2010

Это не на 100% математически кошерно, не доказывая что-то о логах, но вот он:

f = log(n)^5
g = n^0.01

Мы берем логи обоих:

log(f) = log(log(n)^5)) = 5*log(log(n)) = O(log(log(n)))
log(g) = log(n^0.01) = 0.01*log(n) = O(log(n))

Из этого мы видим, чтопервый растет асимптотически медленнее, потому что он имеет двойной журнал и журналы растут медленно.Неформальный аргумент, почему эти рассуждения, основанные на использовании журналов, действительны, таковы: log (n) сообщает вам, сколько цифр в числе n.Так что, если число цифр g растет асимптотически быстрее, чем число цифр f, то, конечно, фактическое число g растет быстрее, чем число f!

...