Давайте рассмотрим классическое определение большой O-нотации ( доказательство связи ):
O(f(n))
- это набор всех функций, таких, что существуют положительные константы C
и n0
с |g(n)| ≤ C * f(n)
, для всех n ≥ n_0
.
Согласно этому определению допустимо сделать следующее (g1
и g2
- функции, описывающие сложность двух алгоритмов):
g1(n) = 9999 * n^2 + n ∈ O(9999 * n^2)
g2(n) = 5 * n^2 + N ∈ O(5 * n^2)
Также допустимо отметить следующие функции:
g1(n) = 9999 * N^2 + N ∈ O(n^2)
g2(n) = 5 * N^2 + N ∈ O(n^2)
Как видите, первый вариант O(9999*N^2)
против (5*N^2)
гораздо точнее и дает намчеткое видение, какой алгоритм быстрее.Второй ничего нам не показывает.
Вопрос: почему никто не использует первый вариант?