Подтвердить что ты не робот

Разница между O (n) и O (log (n)) - что лучше и что именно O (log (n))?

Это мой первый курс в структурах данных и каждой лекции/лекции TA, мы говорим о O(log(n)). Это, наверное, глупый вопрос, но я был бы признателен, если кто-нибудь сможет объяснить мне, что это значит!

4b9b3361

Ответ 1

Это означает, что предмет, о котором идет речь (обычно время работы), масштабируется таким образом, который согласуется с логарифмом его размера ввода.

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

f(x) = 3x
g(x) = 0.5x
m(x) = x + 5

Так как при увеличении x их выходы все увеличиваются линейно - если соотношение между t21 и g(n) составляет 6: 1, то также будет примерно 6: 1 между f(10*n) и g(10*n) и и так далее.


Что касается того, лучше ли O(n) или O(log n), рассмотрите: if n = 1000, затем log n = 3 (для log-base-10). Что бы вы предпочли использовать, чтобы ваш алгоритм выполнялся: 1000 секунд или 3 секунды?

Ответ 2

Для ввода размера n алгоритм O(n) будет выполнять шаги, пропорциональные n, тогда как другой алгоритм O(log(n)) будет выполнять шаги примерно log(n).

Ясно, что log(n) меньше, чем n, поэтому алгоритм сложности O(log(n)) лучше. Поскольку это будет намного быстрее.

Ответ 4

O (logn) означает, что время работы алгоритма зависит от логарифма входного размера. O (n) означает, что время работы алгоритма зависит от размера ввода.

в основном, O (что-то) является верхней границей алгоритма числа команд (атомных). поэтому O (logn) является более жестким, чем O (n), а также лучше с точки зрения анализа алгоритмов. Но все алгоритмы O (logn) также O (n), но не назад...

Ответ 5

Формальное определение:

g (x) = O (f (x)) <= > существует x0 и константа C, что для каждого x > x0, | g (x) | <= C | f (x) |.

Таким образом, если вы найдете алгоритм A для задачи P, то его сложность O (f (n)), вы можете сказать, что количество шагов, которые ваш алгоритм будет делать, ниже или равно асимптотически для f (n), когда n обычно является размером ввода. (n может быть любым)

Для дальнейшего чтения: http://en.wikipedia.org/wiki/Big_O_notation.