Домашнее задание - анализ Big O - PullRequest
3 голосов
/ 13 марта 2012

Моя домашняя работа включает в себя анализ Big O, и я думаю, что у меня это получилось, но я не уверен на 100%.Кто-нибудь из вас, милые люди, возражает взглянуть и сказать, на правильном ли я пути?

Задание ниже.На вопросы 1 и 3 мой анализ и ответы справа после // знаков.На вопрос 2 мой анализ и ответы ниже типа алгоритма.

Заранее спасибо за вашу помощь!: -)

1.For each of the following program fragments, give a Big-Oh analysis of the running time in terms of N:
    (a) // Fragment (a)
        for ( int i = 0, Sum = 0; i < N; i++ )      // N operations
            for( int j = 0; j < N; j++ )            // N operations
                Sum++;                              // Total: N^2 operations  =>  O(N^2)

    (b) // Fragment (b)
        for( int i = 0, Sum = 0; i < N * N; i++ )   // N^2 operations
            for( int j = 0; j < N; j ++ )           // N operations
                Sum++;                              // Total: N^3 operations  =>  O(N^3)

    (c) // Fragment (c)
        for( int i = 0, Sum = 0; i < N; i++ )       // N operations
            for( int j = 0; j < i; j ++ )           // N-1 operations
                Sum++;                              // Total: N(N-1) = N^2 – N operations  =>  O(N^2)

    (d) // Fragment (d)
        for( int i = 0, Sum = 0; i < N; i++ )       // N operations
            for( int j = 0; j < N * N; j++ )        // N^2 operations 
                for( int k = 0; k < j; k++ )        // N^2 operations 
                    Sum++;                          // Total: N^5 operations  =>  O(N^5)

2. An algorithm takes 0.5 milliseconds for input size 100. How long will it take for input size 500 if the running time is:
    a. Linear
        0.5 *5 = 2.5 milliseconds

    b. O( N log N)  
        O (N log N) – treat the first N as a constant, so O (N log N) = O (log N)
        Input size 100 = (log 100) + 1 = 2 + 1 = 3 operations
        Input size 500 = (log 500) + 1= 2.7 + 1 = 3.7 ≈ 4 operations
        Input size 100 runs in 0.5 milliseconds, so input size 500 takes 0.5 * (4/3) ≈ 0.67 milliseconds

    c. Quadratic        
        Input size 100 in quadratic runs 100^2 operations =   10,000 operations
        Input size 500 in quadratic runs 500^2 operations = 250,000 operations = 25 times as many
        Input size of 100 runs in 0.5 milliseconds, so input size of 500 takes 25 * 0.5 = 12.5 milliseconds

    d. Cubic
        Input size 100 in quadratic runs 100^3 operations =     1,000,000 operations
        Input size 500 in quadratic runs 500^3 operations = 125,000,000 operations = 125 times as many
        Input size of 100 runs in 0.5 milliseconds, so input size of 500 takes 125 * 0.5 = 62.5 milliseconds


3. Find the Big-O for the following:
    (a) f(x) = 2x^3 + x^2 log x             // O(x^3)
    (b) f(x) = (x^4 – 34x^3 + x^2 -20)      // O(x^4)
    (c) f(x) = x^3 – 1/log(x)               // O(x^3)

4. Order the following functions by growth rate: (1 is slowest growth rate; 11 is fastest growth rate)
__6_ (a) N
__5_ (b) √N
__7_ (c) N^1.5
__9_ (d) N^2
__4_ (e) N log N
__2_ (f) 2/N        
_11_ (g) 2^N
__3_ (h) 37
_10_ (i) N^3
__1_ (j) 1/ N^2
__8_ (k) N^2 /log N


* My logic in putting (j) and (f) as the slowest is that as N grows, 1/N^2 and 2/N decrease, so their growth rates are negative and therefore slower than the rest which have positive growth rates (or a 0 growth rate in the case of 37 (h)). Is that correct?

Ответы [ 4 ]

2 голосов
/ 13 марта 2012

Я посмотрел на ваши вопросы с 1 по 3, и все выглядит хорошо.

Следуйте этим правилам и проверьте сами:

1) Мультипликативные константы могут быть опущены, Пример 50n ^ 2 упрощается до n ^ 2

2) n ^ a доминирует над n ^ b, если a> b Пример n ^ 3 доминирует над n ^ 2, поэтому n ^ 3 + n ^ 2 + n упрощается до n3

3) Любая экспонента доминирует над любым полиномом Пример 3 ^ n доминирует над n ^ 5 Пример 2 ^ n доминирует над n ^ 2 + 5n + 100

4) Любой многочлен доминирует над любым логарифмом Пример n доминирует (log n) 3

Что касается вопроса 4, используйте его в качестве руководства (от наименьшего к наибольшему):

Log2 n

1 голос
/ 13 марта 2012
  1. (a) Правильно
    (b) Правильно
    (c) Правильно.0 + 1 + 2 + ... + (n - 1) = n (n - 1) / 2 = 0,5n ^ 2 - 0,5n = O (n ^ 2)
    (d) Верно (есть1/2 там, как для (с), но сложность по-прежнему O (N ^ 5))

  2. a.Правильный
    б.пусть K будет продолжительностью одного шага.
    K * (100 log 100) = 0,5, поэтому K = 7,5 * 10 ^ -4
    K * (500 log 500) = 7,5 * 1 - ^ - 4 *500 log 500 = 3,3737мс

    В качестве альтернативы (500 log 500) / (100 log 100) = 6,7474
    Если n = 500, это будет в 6,7474 раза медленнее, 6,7474 * 0,5 мс = 3,3737мс

    с.Правильный
    д.Правильно

  3. (а) Правильно
    (б) Правильно
    (в) Правильно

  4. __ 5 _ (a) N
    __ 4 _ (b) √N
    __7_ (c) N ^ 1.5
    __9_ (d) N ^ 2
    __ 6 _ (e) N log N
    __2_ (f) 2 / N
    _11_ (г) 2 ^ N
    __3_ (ч) 37
    _10_ (i) N ^ 3
    __1_ (j) 1 / N ^ 2
    __8_ (k) N ^ 2 / log N

Я согласен с позицией (f) и (j).Тем не менее, вы должны знать, что они не встречаются там «в дикой природе», потому что каждый алгоритм имеет по крайней мере один шаг, и, следовательно, не может победить O (1).См. Существуют ли алгоритмы O (1 / n)? для более подробного объяснения.

1 голос
/ 13 марта 2012

@ op Можете ли вы сказать мне, почему вы рассматривали O (nlgn) = O (lg n)? Насколько я понимаю, ваш анализ для части Q2 b на самом деле является анализом алгоритмов O (lg n), чтобы проанализировать алгоритмы nlgn, вам нужно указать это n слева.

1 голос
/ 13 марта 2012

ответ за (б) расчета времени неправильный. Вы не можете принять одно из n как константу. Так что nlogn становится 1log1, что означает, что log1 равно 0. поэтому 0.

так что ответом будет 100 log100 операций сравнения с 500log500 ...

подходит от наименьшего к величайшему. b равно 4 и a равно 5. c, e, k - соревнование за позиции 6, 7 и 8. 1,2,3 позиции, данные вами, верны. 9,10,11 верны.

Я проверю анализ на 6,7,8 и дам вам знать.

если вам нужны какие-либо разъяснения по поводу моего ответа, вы можете прокомментировать это ..

...