Big-Oh: Как O (n) + O (n) +… + O (n) могут быть равны на O (n ^ 2)?

Мне трудно понять следующие утверждения из Алгоритмов С. Дасгупты, CH Пападимитриу и У. В. Вазирани - стр. 24 , что они представляют сумму O (n ) как O (n 2 ). Но мое понимание O (n) является линейной функцией от n, и он никогда не может быть квадратичным независимо от того, сколько раз добавлены линейные функции (для любого заданного n). Они дают объяснение, подобное приведенному ниже, для примера 13 x 11 в двоичной записи.

        1 1 0 1
      x 1 0 1 1
      ----------
        1 1 0 1 (1101 times 1)
      1 1 0 1   (1101 times 1, shifted once)
    0 0 0 0     (1101 times 0, shifted twice)
+ 1 1 0 1       (1101 times 1, shifted thrice)
----------------
1 0 0 0 1 1 1 1 (binary 143)

Если x и y (здесь 1101 и 1011) являются n битами, то n промежуточных рядов длиной до 2n бит (принимая сдвиг в учетную запись). Общее время, затраченное на сложите эти строки, делая два числа одновременно O (n) + O (n) + ... + O (n), который является O (n 2 ) , квадратичным по размер входов.

Извините, если это очевидно, но кто-нибудь может помочь мне понять, почему это O (n 2 )?

12
задан Benjamin 4 December 2013 в 16:06
поделиться

10 ответов

Если вы сделаете что-то, что займет N секунд, и повторите это N раз. Сколько секунд потребуется для завершения?

N = 2 => 2*2 seconds.
N = 3 => 3*3 seconds.
N = 4 => 4*4 seconds.

      => N^2 seconds.
25
ответ дан 2 December 2019 в 02:53
поделиться

Если есть n операций со сложностью O ( n ), тогда общая сложность составляет n · O ( n ), что составляет O ( n 2 ).

26
ответ дан 2 December 2019 в 02:53
поделиться

То, что является O (n), не является O (n 2 ) **, если оно умножено на коэффициент константы .

n is O(n)  
7n is O(n)  
100000n is O(n)

n*n is O(n^2)

Вот формальное определение big-O, процитированное из Википедии:

Пусть f (x) и g (x) - две функции. определены на некотором подмножестве реальных числа.

alt text

пишут тогда и только тогда, когда для достаточно больших значений x, f (x) не более постоянная, умноженная на g (x) в абсолютная величина. То есть f (x) = O (g (x)) тогда и только тогда, когда существует положительное действительное число M и действительное число x 0 такое, что

alt text

** ПРЕДУПРЕЖДЕНИЕ: Big O - это верхняя граница. Все, что является O (n), технически также является O (n 2 ). См. Различия между Большой Тетой и Большой Омегой.

http://en.wikipedia.org/wiki/Big_O_notation

9
ответ дан 2 December 2019 в 02:53
поделиться

Когда вы говорите «любое данное n», вы забываете, что когда «данное n» равно n само , тогда вы выполняете O (n ) операция n раз. Это n 2 .

3
ответ дан 2 December 2019 в 02:53
поделиться

Если у вас есть операция, которая является O(n), и вы делаете ее n раз, это и есть определение O(n^2).

Вы путаете с постоянным числом операций O(n), которое всегда O(n).

В примере с двоичным умножением число операций O(n) зависит от длины входных данных, n.

.
3
ответ дан 2 December 2019 в 02:53
поделиться

A O (n) операция выполнена n раз будет O (n ^ 2) . Более строго, если количество операций O (n) линейно зависит от размера ввода, n , то у вас будет случай O (n ^ 2) .

1
ответ дан 2 December 2019 в 02:53
поделиться

Основная идея: поскольку постоянный коэффициент, скрытый в O (n), будет увеличиваться с увеличением n и, следовательно, не будет постоянным и создаст противоречие.

Один из недостатков нотации Big-O заключается в том, что она способствует неправильным представлениям, например, о предмете вашего вопроса. O (n) + O (n) предполагает, что вы добавляете к себе класс линейных функций, но на самом деле это означает «класс суммы любых двух линейных функций». Сумма снова линейна, что приятно, но этот результат зависит от наличия только двух (или любого постоянного числа) суммированных линейных функций.

Итак, в контексте, ваш вопрос на самом деле означает «почему сумма увеличивающегося числа линейных функций также не является линейной?». Набросок доказательства довольно прост:

'
- Assume, for simplicity, that all linear functions are of the form f(n) = c*n, c >= 1
- Suppose we have an increasing-as-N-increases set of summed linear functions
- Assume the sum of that set of functions is linear, ie. of the form c*n
  - Try to find a value of c that works for all values of N
  - But, for any c that works for N=x, it will fail for N=x+1 because there is another addition
  - Contradiction
- The sum of the set of functions is not linear
1
ответ дан 2 December 2019 в 02:53
поделиться

Нужно сложить два числа размера n (что занимает время O(n)), n раз. n(O(n)) = O(n*n) = O(n^2).

0
ответ дан 2 December 2019 в 02:53
поделиться

Ответ очень прост:

O (n) + O (n ) + ・ ・ ・ + O (п) = X (n)

Если X постоянен и не изменяется при вводе, то он все еще остается O (n).

0
ответ дан 2 December 2019 в 02:53
поделиться

Многие ответы здесь забыли о важном предположении. Если у вас есть n операций, каждая из которых равна O (n), из этого не автоматически следует, что сумма равна O (n 2 )! Скажем, k-я операция занимает k * n раз (поэтому она постоянно умножается на n) - первая операция занимает n раз, вторая 2 * n и т. Д. Тогда сумма первых n операций равна O (n 3 ) .

Для неверующих, вот пример такого злоупотребления из CLRS:

Ложное утверждение:

 n
 Σ  k = O(n)
i=1

Доказательство по индукции:

Для n = 1, 1 = O (1).

Для n + 1, предполагая, что гипотеза верна для n,

n+1       n
 Σ  k = ( Σ k) + (n+1) =  O(n) + n = O(n)
i=1      i=1

«Доказательство» неверно, сумма равна O (n 2 ).

Вы можете сказать, что O (n) + ... + O (n) равно O (n 2 ), если все константы, скрытые в большом O , ограничены некоторой константой . В этом случае вы можете написать

O (n) + ... + O (n) <= kn + kn + ... + kn <= kn 2 = O ( n 2 ).

Если константы не ограничены, это неправильно.

1
ответ дан 2 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: