Введение в теорию обозначений Big-O

Введение в теорию обозначений Big-O

1. Вступление

В этой статье мы дадимintroduction to the mathematics of big-O notation, as well as show an example of a big-O proof.

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

Definition:f(x) = O(g(x)) означает, что существуют две положительные константы,x1 иc, такие, что0 ≤ f(x) ≤ cg(x) для всехx ≥ x1.

3. Первая положительная константа:x1

Говоряf(x) = O(g(x)), мы говоримf of x is big-O g of x“.

Не позволяйте знаку равенства вводить вас в заблуждение:f(x) - это функция, аO(g(x)) - это набор. У вас не может быть функции, равной набору. Это все равно, что сказать, что Земля равна Солнечной системе. Это больше похоже на Землюbelongs в (наборе планет, составляющих) Солнечную систему. Аналогичноf(x) belongs in a set of functions called O(g(x)) (big-Og ofx).

Теперь у нас есть две функции -f(x) иg(x). Функцииgrow at different speeds. Например, квадратичная функция будет расти быстрее, чем линейная функция. Ноsometimes, it takes some time for the quadratic to catch up!

Например, если у нас естьa(x) = 2x2 + 2x + 1 иb(x) = 10x, у нас будутa(1) = 5 иb(1) = 10. Но скажем, теперь мы выбираемx = 15. Теперь у нас естьa(15) = 450 + 30 + 1 = 481 иb(x) = 150. Более того, этоfor any value greater than x = 15, say x = 20, a(x) will be bigger than b(x). (сейчас хорошее время, чтобы вернуться к формальному определению; это частьx ≥ x1).

Для случая формального понимания big-O важно, чтоwe don’t particularly care at which point a(x) began outgrowing b(x). Просто так и было, и с этого момента он продолжает быть больше, чемb(x).

4. Вторая положительная константа:c

Выше мы видели, какa(x) потребовалось время, чтобы догнатьb(x). . В конце концов, это произошло, но на это потребовалось время.

Причина, по которой он в конечном итоге растет быстрее, заключается в2x2 term. Или, точнее, частьx2. This tells us that a(x) = O(x2). Использование символов исходного определения:f(x) = a(x) иg(x) = x2.

Для большого O нас не интересуют другие члены вa(x) или константа2 в члене2x2.

Снова посмотрев на наше определение из раздела 2, здесь появляется константаc. We can scale g(x) by any positive constant - до тех пор, покаf(x) остается меньше масштабированной версии (после определенной точки,x ≥ x1).

Если мы возьмемd(x) = 3x3 + 2x + 10,, нам нужно будет найти значенияc иx1, такие, чтоd(x) ≤ cx3 для всех значений больше, чемx1.. Это именно то, что мы сделать в разделе 4.

5. Собираем кусочки

Чтобы доказатьf(x) = O(g(x)), нам нужно найти две положительные константы,c иx1, такие, что0 ≤ f(x) ≤ cg(x) для всехx ≥ x1. We need to find values for c and x1 such that the inequality holds.с

Это означает, что после определенного момента масштабированная версияg(x) всегда будет больше, чемf(x).

6. пример

Пусть d(x) = 3x3 + 2x + 10.

Предположим, мы хотим доказать, что d(x) = O(x3). Это означает, что нам нужно найти два положительных целых числа,c иx1, такие, что0 ≤ d(x) ≤ cx3  для всехx ≥ x1.

Что ж, мы знаем, что d(x) = 3x3 + 2x + 10 ≤ 3x3 + 2x3 + 10x3 = 15x3

so,

d(x) ≤ 15x3.

Итак, если мы установимx1 = 1 andc = 15, t, то это будет для любогоx ≥ x1, 0 ≤ d(x) ≤ cx3. Итак,d(x) = O(x3).

Мы могли бы найти другие значения дляx1 иc, которые удовлетворяют вышеуказанному условию. Важно только то, чтоthere exist values of x1 and c which satisfy the condition.

7. Заключение

В этой статье мы сосредоточились наintroduction to the theory of big-O notation.

Более практичный взгляд на эту тему может бытьfound here.