f(n) = O(g(n))
тогда и только тогда, когда для достаточно большого n
существует постоянная c
такая, что f(n) <= c*g(n)
.По сути, запись big-O дает вам верхнюю границу.С таким же успехом можно сказать, что ваша программа работает в O(n^3)
, O(n^2011)
и даже O(n^42142342)
, но это не очень поможет вам, не так ли?
Тета-запись дает вам туго привязан, что намного полезнее.f(n) = Theta(g(n))
тогда и только тогда, когда для достаточно большого значения n
существуют константы c1, c2
, такие что c1*g(n) <= f(n) <= c2*g(n)
, что означает, что вы знаете точную функцию, пропорциональную вашему алгоритму.
Ваш алгоритм 1 + 2 + 3 + ... + N
операции, которые суммируются до N(N+1)/2
.Это Theta(N^2)
, потому что N^2/4 + N/4 <= N^2/2 + N/2 <= N^2 + N
.Таким образом, вы можете принять c1
и c2
в вышеприведенном определении как 1/2
и 2
.
В большинстве случаев люди будут использовать нотацию big-O для выражения жесткой границы, но этоне обязательно.При запросе big-O функции всегда есть несколько ответов, но только один ответ на вопрос о границе тэты.