4.0 KiB
title | localeTitle |
---|---|
Big Theta Notation | Большая тета-нотация |
Большая тета-нотация
Большая Омега сообщает нам нижнюю границу времени выполнения функции, а Big O сообщает верхнюю границу. Часто они отличаются друг от друга, и мы не можем поставить гарантию на время выполнения - это будет варьироваться между двумя границами и входами. Но что происходит, когда они одинаковы? Тогда мы можем дать оценку тета (Θ) - наша функция будет работать в это время, независимо от того, какой вклад мы ее даем. В общем, мы всегда хотим, если возможно, дать тета-границу, потому что это самая точная и узкая граница. Если мы не сможем дать привязку тета, следующая лучшая вещь - это самая узкая O-граница.
Возьмем, например, функцию, которая ищет массив для значения 0:
def containsZero(arr): #assume normal array of length n with no edge cases
for num x in arr:
if x == 0:
return true
return false
- Какой лучший случай? Ну, если массив, который мы даем, имеет 0 в качестве первого значения, он будет занимать постоянное время: Ω (1)
- В худшем случае? Если массив не содержит 0, мы будем итерации по всему массиву: O (n)
Мы дали ему омегу и О, а как насчет тета? Мы не можем дать его! В зависимости от массива, который мы даем, время выполнения будет находиться где-то между постоянным и линейным.
Давайте немного изменим наш код.
def printNums(arr): #assume normal array of length n with no edge cases
for num x in arr:
print(x)
Можете ли вы подумать о лучшем случае и худшем случае? Я не могу! Независимо от того, какой массив мы его даем, мы должны проходить через каждое значение в массиве. Таким образом, функция будет принимать наименьшее время (Ω (n)), но мы также знаем, что это не займет больше времени n (O (n)). Что это значит? Наша функция займет ровно n раз: Θ (n).
Если границы сбивают с толку, подумайте об этом так. У нас есть 2 числа, x и y. Нам дано, что x <= y и y <= x. Если x меньше или равно y, а y меньше или равно x, то x должно быть равно y!
Если вы знакомы со связанными списками, проверьте себя и подумайте о времени выполнения каждой из этих функций!
- получить
- Удалить
- Добавить
Все становится еще интереснее, когда вы рассматриваете двойной список!
Дополнительная информация:
https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/big-big-theta-notation https://stackoverflow.com/questions/10376740/what-exactly-does-big-%D3%A8-notation-represent https://www.geeksforgeeks.org/analysis-of-algorithms-set-3asymptotic-notations/