Как низко должно быть c, чтобы иметь возможность отбросить постоянную от O (cn)? - PullRequest
0 голосов
/ 11 февраля 2020

Может быть, это очень простой ответ, но: если у нас есть O (2 * n), это считается O (n).

Но если у нас есть O ((n-1) * n Я уверен, что это считается O (n ^ 2).

Для каких значений этой константы это считается "сбрасываемым"?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Ответ - «Любая константа». Но в вашем примере (n-1) не является константой, так как она зависит от n.

Так что константа может быть такой же большой, как вы sh, если она не зависит от входных данных size.

Думайте о Big-Oh как о способе свести функцию к ее базовой c асимптотике. Это означает, что вы убираете все постоянные факторы и члены более низкого порядка. Но это все еще описывает функцию.

Чтобы пример из вашего комментария работал: пусть f(n) = n/2 и g(n) = 5. Тогда f = O(n) и g = O(1). Большой O ничего не говорит вам об отношении f и g для заданного значения c n. Но если вы знаете функцию, вы можете оценить функции для заданного значения c n. Это ничего не меняет в асимптотике.

Если эти функции происходят из времени выполнения алгоритмов, такое сравнение может сказать вам, для какого размера ввода плохой алгоритм работает лучше, чем хороший. Например, Mergesort работает в O(n log n), Bubblesort в O(n^2). Mergesort намного лучше, чем Bubblesort, но также намного сложнее. Так что если вы хотите отсортировать только 4 элемента, вы не хотите использовать Mergesort.

0 голосов
/ 11 февраля 2020

n не является константой. n считается очень большим в большинстве случаев. Маленькое n не интересно в контексте большого O. Таким образом, в целом любая константа может быть отброшена.

...