Обозначение Большого О (O, Theta, Omega) о темпах роста функций.
Когда вы реализуете алгоритм, он имеет определенную характеристику того, как изменяется среда выполнения при увеличении набора данных. Теперь вы можете оптимизировать алгоритм так, чтобы он работал быстрее в 100 раз. Конечно, это замечательно, но, по сути, это все тот же алгоритм. Аналогичным образом, через несколько лет компьютеры могут быть в два раза быстрее, чем сегодня.
Нотация Ландау абстрагирует эти постоянные факторы. Не fимеет значения, всегда ли алгоритм работает в два раза быстрее, чем другой алгоритм g: возможно, gего можно оптимизировать, чтобы он работал в 4 раза быстрее, или вместо этого вы могли бы купить более быстрое оборудование. Если вы посмотрите на это с этой точки зрения, вы можете сказать, что они «одинаковы». (Это не значит, что вы можете (всегда) игнорировать постоянные факторы на практике.)
Большой ой указывает верхнюю границу, это похоже на <=отношение.
Вы согласитесь, что 1 < 2это правда. Означает ли это, что 1не может быть меньше, чем любое другое число? Конечно, нет. Существует бесконечное количество чисел, которые больше, чем 1.
С темпами роста это похоже. O(n)обозначает множество всех функций, которые растут линейно (или медленнее). O(n^2)с другой стороны, обозначает все те функции, которые растут с квадратичной смежностью (или медленнее). Я уверен, что вы согласитесь, что линейная функция растет медленнее, чем квадратичная функция.
Вот почему функция может быть в более чем одном классе "Big-oh".
Вот сравнение различных функций с
: (из "Конкретной математики Кнута")

Слева направо, функции растут быстрее.
Кроме того,
значение n ^ 2 растет быстрее, чем n ^ 1, потому что 2> 1.
Определения

"F растет быстрее или одинаково быстро, как G"

"F растет медленнее или одинаково быстро, как г"

Сочетание двух вышеупомянутых. Это говорит о том, что функция fрастет так же быстро, как g. Это отношение эквивалентности.
интерпретация
Допустим, у вас есть два алгоритма, fи g.
Омега
Предполагается
,
что это означает, что независимо от вашего бюджета, нет постоянной вычислительной мощности, которую вы можете добавить в свою систему, так что fона всегда будет работать так же быстро, как и g.
Большой ой
Предполагается
,
что означает, что если у вас достаточно данных, fони всегда будут работать быстрее g, независимо от того, сколько вычислительной мощности вы добавите в свою систему.
доказательство
Если вы действительно пытаетесь доказать это, вам нужно показать, используя определения обозначений Ландау, что ваша функция удовлетворяет необходимым условиям.
Так что вам нужно найти значение c, d, n_0таким образом, что условие выполнено.
Вот как вы можете сделать это для нижней границы c:

Важно понимать, что меня произвольно определяют cкак меньшего, чем a-1совершенно нормально. Определение тета (g) говорит, что «существует c». Это может быть любое значение, если оно больше 0. (Если aположительное действительное число, вам, однако, нужно немного изменить доказательство, поскольку оно a - 1может быть отрицательным)
(Я предполагаю aбыть положительным, иначе функция всегда будет отрицательной для больших значений n, что не имеет смысла для функции, обозначающей время выполнения.)
Вы можете попробовать сделать это для верхней границы, это очень похоже. Если вы не знаете, как, я могу предоставить доказательство для вас.
Подсказка: начните с d > a + 1
Внимание
Важно, чтобы вы не доказали это неправильно. Если вы предполагаете, что (an + b) находится в O (n) и идете оттуда, вы не доказали, чего хотели. Вам нужно будет убедиться, что все ваши шаги идут в обе стороны, то есть вместо =>вас <=>.