SlideShare a Scribd company logo
1 of 7
Download to read offline
1.1 Скорость роста функций
Сравнивая два алгоритма сортировки, мы установили, что время работы одного
(сортировка вставками) примерно пропорционально n2
, а другого (сортировка слия-
нием) — n log n. Каковы бы ни были коэффициенты пропорциональности, для доста-
точно больших n первый алгоритм работает быстрее. Анализируя алгоритм, можно
стараться найти точное количество выполняемых им действий. Но в большинстве
случаев игра не стоит свеч, и достаточно оценить асимптотику роста времени рабо-
ты алгоритма при стремлении размера входа к бесконечности (asymptotic efficiency).
Если у одного алгоритма асимптотика роста меньше, чем у другого, то в большин-
стве случаев он будет эффективнее для всех входов, кроме совсем коротких. (Хотя
бывают и исключения.)
1.1.1 Асимптотические обозначения
Хотя во многих случаях эти обозначения используются неформально, полезно
начать с точных определений.
Θ-обозначение
Ранее мы говорили, что время T(n) работы алгоритма сортировки вставками на
входах длины n есть Θ(n2
). Точный смысл этого утверждения такой: найдутся такие
константы c1, c2 > 0 и такое число n0, что c1n2
T(n) c2n2
при всех n n0.
Вообще, если g(n) — некоторая функция, то запись f(n) = Θ(g(n)) означает, что
найдутся такие c1, c2 > 0 и такое n0, что 0 c1g(n) f(n) c2g(n) для всех n n0
(см. рис. (а)). (Запись f(n) = Θ(g(n)) читается так: «эф от эн есть тэта от же от эн».)
Рис. 1.1: Иллюстрация к определениям f(n) = Θ(g(n)), f(n) = O(g(n)) и f(n) =
Ω(g(n)).
Разумеется, это обозначение следует употреблять с осторожностью: установив,
что f1(n) = Θ(g(n)) и f2(n) = Θ(g(n)), не следует заключать, что f1(n) = f2(n)!
Определение Θ(g(n)) предполагает, что функции f(n) и g(n) асимптотически
неотрицательны (asymptotically nonnegative), т. е. неотрицательны для достаточно
больших значений n. Заметим, что если функции f и g строго положительны, то
1
можно исключить n0 из определения (изменив константы c1 и c2 так, чтобы для
малых n неравенство также выполнялось).
Если f(n) = Θ(g(n)), то говорят, что g(n) является асимптотически точной
оценкой (asymptotically tight bound) для f(n). На самом деле это отношение сим-
метрично: если f(n) = Θ(g(n)), то g(n) = Θ(f(n)).
Например, проверим, что (1/2)n2
− 3n = Θ(n2
). Согласно определению надо ука-
зать положительные константы c1, c2 и число n0 так, чтобы неравенства
c1n2 1
2
n2
− 3n c2n2
выполнялись для всех n n0. Разделим выражение на n2
:
c1
1
2
−
3
n
c2
Видно, что для выполнения второго неравенства достаточно положить c2 = 1/2.
Первое будет выполнено, если (например) n0 = 7 и c1 = 1/14.
Другой пример использования формального определения: покажем, что 6n3
=
Θ(n2
). В самом деле, пусть найдутся такие c2 и n0, что 6n3
c2n2
для всех n n0.
Но тогда n c2/6 для всех n n0 — что явно не так.
Отыскивая асимптотически точную оценку для суммы, мы можем отбрасывать
члены меньшего порядка, которые при больших n становятся малыми по сравнению
с основным слагаемым. Заметим также, что коэффициент при старшем члене роли
не играет (он может повлиять только на выбор констант c1 и c2). Например, рассмот-
рим квадратичную функцию f(n) = an2
+ bn + c, где a, b, c —некоторые константы
и a > 0. Отбрасывая члены младших порядков и коэффициент при старшем члене,
находим, что f(n) = Θ(n2
). Чтобы убедиться в этом формально, можно положить
c1 = a/4, c2 = 7a/4 и n0 = 2 · max(|b|/a, |c|/a) (проверьте, что требования действи-
тельно выполнены). Вообще, для любого полинома p(n) степени d с положительным
старшим коэффициентом имеем p(n) = Θ(nd
).
Упомянем важный частный случай использования Θ-обозначений: Θ(1) обозна-
чает ограниченную функцию, отделённую от нуля некоторый положительной кон-
стантой при достаточно больших значениях аргумента. (Из контекста обычно ясно,
что именно считается аргументом функции.)
O- и Ω-обозначения
Запись f(n) = Θ(g(n)) включает в себя две оценки: верхнюю и нижнюю. Их
можно разделить. Говорят, что f(n) = O(g(n)), если найдётся такая константа c > 0
и такое число n0, что 0 f(n) cg(n) для всех n n0 (см. рис. (б)). Говорят,
что f(n) = Ω(g(n)), если найдется такая константа c > 0 и такое число n0, что
0 cg(n) f(n) для всех n n0 (см. рис. (в)). Эти записи читаются так: «эф от эн
есть о большое от же от эн», «эф от эн есть омега большая от же от эн».
По-прежнему мы предполагаем, что функции f и g неотрицательны для достаточ-
но больших значений аргумента. Легко видеть, что выполнены следующие свойства:
Теорема 2.1. Для любых двух функций f(n) и g(n) свойство f(n) = Θ(g(n))
выполнено тогда и только тогда, когда f(n) = O(g(n)) и f(n) = Ω(g(n)).
2
Для любых двух функций f(n) и g(n) свойства f(n) = O(g(n)) и g(n) = Ω(f(n))
равносильны.
Как мы видели, an2
+bn+c = Θ(n2
) (при положительных a). Поэтому an2
+bn+c =
O(n2
). Другой пример: при a > 0 можно написать an+b = O(n2
) (положим c = a+|b|
и n0 = 1). Заметим, что в этом случае an + b = Ω(n2
) и an + b = Θ(n2
).
Асимптотические обозначения (Θ, O и Ω) часто употребляются внутри формул.
Например, ранее мы получили рекуррентное соотношение
T(n) = 2T(n/2) + Θ(n)
для времени работы сортировки слиянием. Здесь Θ(n) обозначает некоторую функ-
цию, про которую нам важно знать лишь, что она не меньше c1n и не больше c2n
для некоторых положительных c1 и c2 и для всех достаточно больших n.
Часто асимптотические обозначения употребляются не вполне формально, хотя
их подразумеваемый смысл обычно ясен из контекста. Например, мы можем напи-
сать выражение
n
i=1
O(i),
имея в виду сумму h(1)+h(2)+· · ·+h(n), где h(i) — некоторая функция, для которой
h(i) = O(i). Легко видеть, что сама эта сумма как функция от n есть O(n2
).
Типичный пример неформального использования асимптотических обозначений
— цепочка равенств наподобие 2n2
+ 3n + 1 = 2n2
+ Θ(n) = Θ(n2
). Второе из этих
равенств (2n2
+Θ(n) = Θ(n2
)) понимается при этом так: какова бы ни была функция
h(n) = Θ(n) в левой части, сумма 2n2
+ h(n) есть Θ(n2
).
o- и ω-обозначения
Запись f(n) = O(g(n)) означает, что с ростом n отношение f(n)/g(n) остаётся
ограниченным. Если к тому же
lim
n→∞
f(n)
g(n)
= 0, (1.1)
то мы пишем f(n) = o(g(n)) (читается «эф от эн есть о малое от же от эн»). Фор-
мально говоря, f(n) = o(g(n)), если для всякого положительного > 0 найдётся
такое n0, что 0 f(n) g(n) при всех n n0. (Тем самым запись f(n) = o(g(n))
предполагает, что f(n) и g(n) неотрицательны для достаточно больших n.)
Пример: 2n = o(n2
), но 2n2
= o(n2
).
Аналогичным образом вводится ω-обозначение: говорят, что f(n) есть ω(g(n))
(«эф от эн есть омега малая от же от эн»), если для всякого положительного c
найдется такое n0, что 0 cg(n) f(n) при всех n n0. Очевидно, f(n) = ω(g(n))
равносильно g(n) = o(f(n)). Пример: n2
/2 = ω(n), но n2
/2 = ω(n2
).
Сравнение функций
Введённые нами определения обладают некоторыми свойствами транзитивности,
рефлексивности и симметричности.
3
Транзитивность:
f(n) = Θ(g(n)) и g(n) = Θ(h(n)) влечет f(n) = Θ(h(n)),
f(n) = O(g(n)) и g(n) = O(h(n)) влечет f(n) = O(h(n)),
f(n) = Ω(g(n)) и g(n) = Ω(h(n)) влечет f(n) = Ω(h(n)),
f(n) = o(g(n)) и g(n) = o(n)) влечет f(n) = o(h(n)),
f(n) = ω(g(n)) и g(n) = ω(h(n)) влечет f(n) = ω(h(n)).
Рефлексивность:
f(n) = Θ(f(n)), f(n) = O(f(n)), f(n) = Ω(f(n)).
Симметричность:
f(n) = Θ(g(n)) если и только если g(n) = Θ(f(n)).
Обращение:
f(n) = O(g(n)) если и только если g(n) = Ω(f(n)),
f(n) = o(g(n)) если и только если g(n) = ω(f(n)).
Можно провести такую параллель: отношения между функциями f и g подобны
отношениям между числами a и b:
f(n) = O(g(n)) ≈ a b,
f(n) = Ω(g(n)) ≈ a b,
f(n) = Θ(g(n)) ≈ a = b,
f(n) = O(g(n)) ≈ a < b,
f(n) = ω(g(n)) ≈ a > b.
Параллель эта, впрочем, весьма условна: свойства числовых неравенств не пере-
носятся на функции. Например, для любых двух чисел a и b всегда или a b, или
a b, однако нельзя утверждать, что для любых двух (положительных) функций
f(n) и g(n) или f(n) = O(g(n)), или f(n) = Ω(g(n)). В самом деле, можно проверить,
что ни одно из этих двух соотношений не выполнено для f(n) = n и g(n) = n1+sin n
(показатель степени в выражении для g(n) меняется в интервале от 0 до 2). Заметим
ещё, что для чисел a b влечёт a < b или a = b, в то время как для функций
f(n) = O(g(n)) не влечёт f(n) = o(g(n)) или f(n) = Θ(g(n)).
1.1.2 Стандартные функции и обозначения
Монотонность
Говорят, что функция f(n) монотонно возрастает (is monotonically increasing),
если f(m) f(n) при m n. Говорят, что функция f(n) монотонно убывает (is
monotonically decreasing), если f(m) f(n) при m n. Говорят, что функция f(n)
строго возрастает (is strictly increasing), если f(m) < f(n) при m < n. Говорят, что
функция f(n) строго убывает (is strictly decreasing), если f(m) > f(n) при m < n.
Целые приближения снизу и сверху
Для любого вещественного числа x через x (the floor of x) мы обозначаем его
целую часть, т. е. наибольшее целое число, не превосходящее x. Симметричным об-
разом, x (the ceiling of x) обозначает наименьшее целое число, не меньшее x. Оче-
видно,
x − 1 < x − 1 < x x x < x + 1
4
для любого x. Кроме того,
n/2 + n/2 = n
для любого целого n. Наконец, для любого x и для любых целых положительных a
и b имеем
x/a /b = x/ab
и
x/a /b = x/ab
(чтобы убедиться в этом, полезно заметить, что для любого z и для целого n свойства
n z и n z равносильны).
Функции x → x и x → x монотонно возрастают.
Многочлены
Многочленом (полиномом) степени d от переменной n (polynomial in n of
degree d) называют функцию
p(n) =
d
i=0
aini
(d — неотрицательное целое число). Числа a0, a1, . . . , ad называют коэффици-
ентами (coefficients) многочлена. Мы считаем, что старший коэффициент ad не
равен нулю (если это не так, уменьшим d — это можно сделать, если только много-
член не равен нулю тождественно).
Для больших значений n знак многочлена p(n) определяется старшим коэффи-
циентом (остальные члены малы по сравнению с ним), так что при ad > 0 многочлен
p(n) асимптотически положителен (положителен при больших n) и можно написать
p(n) = Θ(nd
).
При a 0 функция n → na
монотонно возрастает, при a 0 — монотонно
убывает. Говорят, что функция f(n) полиномиально ограничена (is polynomially
bounded), если f(n) = nO(1)
, или, другими словами, если f(n) = O(nk
) для некоторой
константы k.
Экспоненты
Для любых вещественных m, n и a = 0 имеем
a0
= 1, (am
)n
= amn
,
a1
= a, (am
)n
= (an
)m
,
a−1
= 1/a, am
an
= am+n
.
При a 1 функция n → an
монотонно возрастает.
Мы будем иногда условно полагать 0◦
= 1.
Функция n → an
называется показательной функцией, или экспонентой (ex-
ponential). При a > 1 показательная функция растёт быстрее любого полинома: ка-
ково бы ни было b,
lim
n→∞
nb
an
= 0
5
или, другими словами, nb
= o(an
).. Если в качестве основания степени взять число
e = 2, 71828 . . ., то экспоненту можно записать в виде ряда
ex
= 1 + x +
x2
2!
+
x3
3!
+ · · · =
∞
k=0
xk
k!
,
где k! = 1 · 2 · 3 · . . . · k.
Для всех вещественных х выполнено неравенство
ex
1 + x,
которое обращается в равенство лишь при x = 0. При |x| 1 можно оценить ex
сверху и снизу так: I
1 + x ex
1 + x + x2
.
Можно сказать, что ex
= 1 + x + Θ(x2
) при x → 0, имея в виду соответствующее
истолкование обозначения Θ (в котором n → ∞ заменено на x → 0).
При всех x выполнено равенство limn→∞ 1 + x
n
n
= ex
.
Логарифмы
Мы будем использовать такие обозначения:
log n = log2 n (двоичный логарифм),
ln n = loge n, (натуральный логарифм),
logk
n = (log n)k
,
log log n = log(log n) (повторный логарифм).
Мы будем считать, что в формулах знак логарифма относится лишь к непосредствен-
но следующему за ним выражению, так что log n + k есть log (n) + k (а не log (n + k).
При b > 1 функция n → logb n (определённая при положительных n) строго возрас-
тает. Следующие тождества верны при всех a > 0, b > 0, c > 0 и при всех n (если
только основания логарифмов не равны 1):
a = blogb a
,
logb an
= n logb a,
logb a =
1
loga b
,
logc ab = logc a + logc b,
logb a =
logca
logc b
,
alogb c
= clogb a
,
logb (
1
a
) = − logb a.
При изменении основания логарифма умножается на константу, поэтому в записи
типа O(log n) можно не уточнять, каково основание логарифма. Мы будем чаще всего
иметь дело с двоичными логарифмами (они появляются, когда задача делится на две
части) и потому оставляем за ними обозначение log.
6
Для натурального логарифма есть ряд (который сходится при |x| < 1):
ln (1 + x) = x −
x2
2
+
x3
3
−
x4
4
+
x5
5
− . . .
При x > −1 справедливы неравенства
x
1 + x
ln (1 + x) x,
которые обращаются в равенства лишь при x = 0.
Факториалы
Запись n! (читается «эн факториал», "n factorial") обозначает произведение всех
целых чисел от 1 до n. Полагают 0! = 1, так что n! = n·(n−1)! при всех n = 1, 2, 3, . . ..
Сразу же видно, что n! nn
(каждый из сомножителей не больше n). Более точ-
ная оценка даётся формулой Стерлинга (Stirling’s approximation), которая гласит,
что
n! =
√
2πn(
n
e
)n
(1 + Θ(1/n)).
Из формулы Стирлинга следует, что
n! = o(nn
),
n! = ω(2n
),
log (n!) = Θ(n log n).
Справедлива также следующая оценка:
√
2πn(
n
e
)n
n!
√
2πn(
n
e
)n
e1/12n
.
Числа Фибоначчи
Последовательность чисел Фибоначчи (Fibonacci numbers) определяется рекур-
рентным соотношением:
F0 = 0, F1 = 1, Fi = Fi−1 + Fi−1приi 2.
Другими словами, в последовательности Фибоначчи
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 . . .
каждое число равно сумме двух предыдущих. Числа Фибоначчи связаны с так на-
зываемым отношением золотого сечения (golden ratio) ϕ и с сопряжённым с ним
числом ˆϕ:
ϕ =
1 +
√
5
2
= 1, 61803 . . .,
ˆϕ =
1 −
√
5
2
= −0, 61803 . . ..
Именно, имеет место формула
Fi =
ϕi
− ˆϕi
√
5
,
которую можно доказать по индукции. Поскольку | ˆϕ| < 1, слагаемое | ˆϕi
/
√
5| меньше
1/
√
5 < 1/2, так что Fi равно числу ϕi
/
√
5, округлённому до ближайшего целого.
Числа Fi быстро (экспоненциально) растут с ростом i.
7

More Related Content

What's hot

Logika dan Himpunan Matematika
Logika dan Himpunan MatematikaLogika dan Himpunan Matematika
Logika dan Himpunan MatematikaSenja Arofah
 
Rpp matematika sma xii bab 2 (bunga, pertumbuhan, dan peluruhan)
Rpp matematika sma xii bab 2 (bunga, pertumbuhan, dan peluruhan)Rpp matematika sma xii bab 2 (bunga, pertumbuhan, dan peluruhan)
Rpp matematika sma xii bab 2 (bunga, pertumbuhan, dan peluruhan)eli priyatna laidan
 
Додавання від'ємних чисел
Додавання від'ємних чиселДодавання від'ємних чисел
Додавання від'ємних чиселasdfghj7
 
Soal UN Matematika SMP Tahun 2014 dan Pembahasannya
Soal UN Matematika SMP Tahun 2014 dan PembahasannyaSoal UN Matematika SMP Tahun 2014 dan Pembahasannya
Soal UN Matematika SMP Tahun 2014 dan PembahasannyaHyronimus Lado
 
Matematika diskret 2
Matematika diskret 2Matematika diskret 2
Matematika diskret 2maswahyu73
 
Логарифми їх властивості
Логарифми їх властивостіЛогарифми їх властивості
Логарифми їх властивостіBogdan Stozhurskiy
 
ділення десяткового дробу на число 5 клас
ділення десяткового дробу на число 5 класділення десяткового дробу на число 5 клас
ділення десяткового дробу на число 5 класOlexandr Lazarets
 
Relasi dan Fungsi
Relasi dan FungsiRelasi dan Fungsi
Relasi dan Fungsiaufa24
 
Pengantar dasar matematika2
 Pengantar dasar matematika2 Pengantar dasar matematika2
Pengantar dasar matematika2Gerrard Making
 
Математичний занзібар
Математичний занзібарМатематичний занзібар
Математичний занзібарjkmuffgrhdcv
 
Kisi kisi soal matematika kelas x
Kisi kisi soal matematika kelas xKisi kisi soal matematika kelas x
Kisi kisi soal matematika kelas xEko Supriyadi
 
6 задачі на пропорційний поділ модягіна
6 задачі на пропорційний поділ модягіна6 задачі на пропорційний поділ модягіна
6 задачі на пропорційний поділ модягінаdaniil chilochi
 
Materi Pengayaan UN Matematika SMP/MTs Direktorat PSMP Kemendikbud
Materi Pengayaan UN Matematika SMP/MTs Direktorat PSMP KemendikbudMateri Pengayaan UN Matematika SMP/MTs Direktorat PSMP Kemendikbud
Materi Pengayaan UN Matematika SMP/MTs Direktorat PSMP KemendikbudAbdul Jamil
 
MODUL PEMBELAJARAN SPLTV BERBASIS GAME-BASED LEARNING
MODUL PEMBELAJARAN SPLTV BERBASIS GAME-BASED LEARNINGMODUL PEMBELAJARAN SPLTV BERBASIS GAME-BASED LEARNING
MODUL PEMBELAJARAN SPLTV BERBASIS GAME-BASED LEARNINGCindy Ardianty
 
Faktorisasi suku aljabar
Faktorisasi suku aljabarFaktorisasi suku aljabar
Faktorisasi suku aljabarsutarmotarmo
 
soal Olimpiade Matematika SMA Tingkat Nasional PDIM UB 2014
soal Olimpiade Matematika SMA Tingkat Nasional PDIM UB 2014soal Olimpiade Matematika SMA Tingkat Nasional PDIM UB 2014
soal Olimpiade Matematika SMA Tingkat Nasional PDIM UB 2014Moh Hari Rusli
 
Kisi kisi plsv
Kisi kisi plsvKisi kisi plsv
Kisi kisi plsvJarot Jp
 

What's hot (20)

Logika dan Himpunan Matematika
Logika dan Himpunan MatematikaLogika dan Himpunan Matematika
Logika dan Himpunan Matematika
 
Rpp matematika sma xii bab 2 (bunga, pertumbuhan, dan peluruhan)
Rpp matematika sma xii bab 2 (bunga, pertumbuhan, dan peluruhan)Rpp matematika sma xii bab 2 (bunga, pertumbuhan, dan peluruhan)
Rpp matematika sma xii bab 2 (bunga, pertumbuhan, dan peluruhan)
 
Додавання від'ємних чисел
Додавання від'ємних чиселДодавання від'ємних чисел
Додавання від'ємних чисел
 
Soal UN Matematika SMP Tahun 2014 dan Pembahasannya
Soal UN Matematika SMP Tahun 2014 dan PembahasannyaSoal UN Matematika SMP Tahun 2014 dan Pembahasannya
Soal UN Matematika SMP Tahun 2014 dan Pembahasannya
 
zakon.pdf
zakon.pdfzakon.pdf
zakon.pdf
 
Matematika diskret 2
Matematika diskret 2Matematika diskret 2
Matematika diskret 2
 
Fungsi Pembangkit
Fungsi PembangkitFungsi Pembangkit
Fungsi Pembangkit
 
Логарифми їх властивості
Логарифми їх властивостіЛогарифми їх властивості
Логарифми їх властивості
 
Resume geometri euclid
Resume geometri euclidResume geometri euclid
Resume geometri euclid
 
ділення десяткового дробу на число 5 клас
ділення десяткового дробу на число 5 класділення десяткового дробу на число 5 клас
ділення десяткового дробу на число 5 клас
 
Relasi dan Fungsi
Relasi dan FungsiRelasi dan Fungsi
Relasi dan Fungsi
 
Pengantar dasar matematika2
 Pengantar dasar matematika2 Pengantar dasar matematika2
Pengantar dasar matematika2
 
Математичний занзібар
Математичний занзібарМатематичний занзібар
Математичний занзібар
 
Kisi kisi soal matematika kelas x
Kisi kisi soal matematika kelas xKisi kisi soal matematika kelas x
Kisi kisi soal matematika kelas x
 
6 задачі на пропорційний поділ модягіна
6 задачі на пропорційний поділ модягіна6 задачі на пропорційний поділ модягіна
6 задачі на пропорційний поділ модягіна
 
Materi Pengayaan UN Matematika SMP/MTs Direktorat PSMP Kemendikbud
Materi Pengayaan UN Matematika SMP/MTs Direktorat PSMP KemendikbudMateri Pengayaan UN Matematika SMP/MTs Direktorat PSMP Kemendikbud
Materi Pengayaan UN Matematika SMP/MTs Direktorat PSMP Kemendikbud
 
MODUL PEMBELAJARAN SPLTV BERBASIS GAME-BASED LEARNING
MODUL PEMBELAJARAN SPLTV BERBASIS GAME-BASED LEARNINGMODUL PEMBELAJARAN SPLTV BERBASIS GAME-BASED LEARNING
MODUL PEMBELAJARAN SPLTV BERBASIS GAME-BASED LEARNING
 
Faktorisasi suku aljabar
Faktorisasi suku aljabarFaktorisasi suku aljabar
Faktorisasi suku aljabar
 
soal Olimpiade Matematika SMA Tingkat Nasional PDIM UB 2014
soal Olimpiade Matematika SMA Tingkat Nasional PDIM UB 2014soal Olimpiade Matematika SMA Tingkat Nasional PDIM UB 2014
soal Olimpiade Matematika SMA Tingkat Nasional PDIM UB 2014
 
Kisi kisi plsv
Kisi kisi plsvKisi kisi plsv
Kisi kisi plsv
 

Viewers also liked

Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of FunctionsDEVTYPE
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ DEVTYPE
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введениеDEVTYPE
 
Зачем изучать алгоритмы?
Зачем изучать алгоритмы?Зачем изучать алгоритмы?
Зачем изучать алгоритмы?DEVTYPE
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform ContinuityDEVTYPE
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применениеDEVTYPE
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыDEVTYPE
 
Лекция 7: Бинарные кучи (пирамиды)
Лекция 7: Бинарные кучи (пирамиды)Лекция 7: Бинарные кучи (пирамиды)
Лекция 7: Бинарные кучи (пирамиды)Mikhail Kurnosov
 
Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Technopark
 
Логарифм и экспонента
Логарифм и экспонентаЛогарифм и экспонента
Логарифм и экспонентаDEVTYPE
 
С. Дасгупта, Х. Пападимитриу, У. Вазирани. Алгоритмы
С. Дасгупта, Х. Пападимитриу, У. Вазирани. АлгоритмыС. Дасгупта, Х. Пападимитриу, У. Вазирани. Алгоритмы
С. Дасгупта, Х. Пападимитриу, У. Вазирани. АлгоритмыDEVTYPE
 
Математическая индукция
Математическая индукцияМатематическая индукция
Математическая индукцияDEVTYPE
 
Тестовое задание для веб-программиста
Тестовое задание для веб-программистаТестовое задание для веб-программиста
Тестовое задание для веб-программистаDEVTYPE
 
Задача №1. Работа с видео.
Задача №1. Работа с видео.Задача №1. Работа с видео.
Задача №1. Работа с видео.DEVTYPE
 
Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреDEVTYPE
 
Recurrences
RecurrencesRecurrences
RecurrencesDEVTYPE
 
Задачи №2. Работа со звуком.
Задачи №2. Работа со звуком.Задачи №2. Работа со звуком.
Задачи №2. Работа со звуком.DEVTYPE
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачиDEVTYPE
 
7. Дискретная вероятность
7. Дискретная вероятность7. Дискретная вероятность
7. Дискретная вероятностьDEVTYPE
 
6. Теория графов ll
6. Теория графов ll6. Теория графов ll
6. Теория графов llDEVTYPE
 

Viewers also liked (20)

Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Зачем изучать алгоритмы?
Зачем изучать алгоритмы?Зачем изучать алгоритмы?
Зачем изучать алгоритмы?
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
Лекция 7: Бинарные кучи (пирамиды)
Лекция 7: Бинарные кучи (пирамиды)Лекция 7: Бинарные кучи (пирамиды)
Лекция 7: Бинарные кучи (пирамиды)
 
Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8Алгоритмы и структуры данных осень 2013 лекция 8
Алгоритмы и структуры данных осень 2013 лекция 8
 
Логарифм и экспонента
Логарифм и экспонентаЛогарифм и экспонента
Логарифм и экспонента
 
С. Дасгупта, Х. Пападимитриу, У. Вазирани. Алгоритмы
С. Дасгупта, Х. Пападимитриу, У. Вазирани. АлгоритмыС. Дасгупта, Х. Пападимитриу, У. Вазирани. Алгоритмы
С. Дасгупта, Х. Пападимитриу, У. Вазирани. Алгоритмы
 
Математическая индукция
Математическая индукцияМатематическая индукция
Математическая индукция
 
Тестовое задание для веб-программиста
Тестовое задание для веб-программистаТестовое задание для веб-программиста
Тестовое задание для веб-программиста
 
Задача №1. Работа с видео.
Задача №1. Работа с видео.Задача №1. Работа с видео.
Задача №1. Работа с видео.
 
Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
Recurrences
RecurrencesRecurrences
Recurrences
 
Задачи №2. Работа со звуком.
Задачи №2. Работа со звуком.Задачи №2. Работа со звуком.
Задачи №2. Работа со звуком.
 
Программирование: теоремы и задачи
Программирование: теоремы и задачиПрограммирование: теоремы и задачи
Программирование: теоремы и задачи
 
7. Дискретная вероятность
7. Дискретная вероятность7. Дискретная вероятность
7. Дискретная вероятность
 
6. Теория графов ll
6. Теория графов ll6. Теория графов ll
6. Теория графов ll
 

Similar to Скорость роста функций

практика 6
практика 6практика 6
практика 6student_kai
 
предел последовательности
предел последовательностипредел последовательности
предел последовательностиtomik1044
 
О-символика
О-символикаО-символика
О-символикаDEVTYPE
 
20110313 systems of_typed_lambda_calculi_moskvin_lecture06
20110313 systems of_typed_lambda_calculi_moskvin_lecture0620110313 systems of_typed_lambda_calculi_moskvin_lecture06
20110313 systems of_typed_lambda_calculi_moskvin_lecture06Computer Science Club
 
Use of eliptic curves for generating digital signature
Use of eliptic curves for generating digital signatureUse of eliptic curves for generating digital signature
Use of eliptic curves for generating digital signatureAndrei Poliakov
 
Opredelennyj integral
Opredelennyj integralOpredelennyj integral
Opredelennyj integralDimon4
 
20101007 proof complexity_hirsch_lecture04
20101007 proof complexity_hirsch_lecture0420101007 proof complexity_hirsch_lecture04
20101007 proof complexity_hirsch_lecture04Computer Science Club
 
Матан 3 сем. Часть 2.pdf
Матан 3 сем. Часть 2.pdfМатан 3 сем. Часть 2.pdf
Матан 3 сем. Часть 2.pdfSrgioAlex
 
Predely nepreryvnost funkcij
Predely nepreryvnost funkcijPredely nepreryvnost funkcij
Predely nepreryvnost funkcijDimon4
 
пугач му по матлогике 2015
пугач му по матлогике 2015пугач му по матлогике 2015
пугач му по матлогике 2015LIPugach
 
20081116 structuralcomplexitytheory lecture09-10
20081116 structuralcomplexitytheory lecture09-1020081116 structuralcomplexitytheory lecture09-10
20081116 structuralcomplexitytheory lecture09-10Computer Science Club
 
НИ_ИвановаСВ_черновик.pdf
НИ_ИвановаСВ_черновик.pdfНИ_ИвановаСВ_черновик.pdf
НИ_ИвановаСВ_черновик.pdfSrgioAlex
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture0220110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture02Computer Science Club
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture03
20110224 systems of_typed_lambda_calculi_moskvin_lecture0320110224 systems of_typed_lambda_calculi_moskvin_lecture03
20110224 systems of_typed_lambda_calculi_moskvin_lecture03Computer Science Club
 

Similar to Скорость роста функций (20)

практика 6
практика 6практика 6
практика 6
 
предел последовательности
предел последовательностипредел последовательности
предел последовательности
 
Get Ft
Get FtGet Ft
Get Ft
 
Matanal 31oct
Matanal 31octMatanal 31oct
Matanal 31oct
 
О-символика
О-символикаО-символика
О-символика
 
20110313 systems of_typed_lambda_calculi_moskvin_lecture06
20110313 systems of_typed_lambda_calculi_moskvin_lecture0620110313 systems of_typed_lambda_calculi_moskvin_lecture06
20110313 systems of_typed_lambda_calculi_moskvin_lecture06
 
Use of eliptic curves for generating digital signature
Use of eliptic curves for generating digital signatureUse of eliptic curves for generating digital signature
Use of eliptic curves for generating digital signature
 
Opredelennyj integral
Opredelennyj integralOpredelennyj integral
Opredelennyj integral
 
20101007 proof complexity_hirsch_lecture04
20101007 proof complexity_hirsch_lecture0420101007 proof complexity_hirsch_lecture04
20101007 proof complexity_hirsch_lecture04
 
Diskretn analiz
Diskretn analizDiskretn analiz
Diskretn analiz
 
Diskretn analiz
Diskretn analizDiskretn analiz
Diskretn analiz
 
Матан 3 сем. Часть 2.pdf
Матан 3 сем. Часть 2.pdfМатан 3 сем. Часть 2.pdf
Матан 3 сем. Часть 2.pdf
 
Predely nepreryvnost funkcij
Predely nepreryvnost funkcijPredely nepreryvnost funkcij
Predely nepreryvnost funkcij
 
пугач му по матлогике 2015
пугач му по матлогике 2015пугач му по матлогике 2015
пугач му по матлогике 2015
 
20081116 structuralcomplexitytheory lecture09-10
20081116 structuralcomplexitytheory lecture09-1020081116 structuralcomplexitytheory lecture09-10
20081116 structuralcomplexitytheory lecture09-10
 
НИ_ИвановаСВ_черновик.pdf
НИ_ИвановаСВ_черновик.pdfНИ_ИвановаСВ_черновик.pdf
НИ_ИвановаСВ_черновик.pdf
 
23
2323
23
 
109130.ppt
109130.ppt109130.ppt
109130.ppt
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture0220110224 systems of_typed_lambda_calculi_moskvin_lecture02
20110224 systems of_typed_lambda_calculi_moskvin_lecture02
 
20110224 systems of_typed_lambda_calculi_moskvin_lecture03
20110224 systems of_typed_lambda_calculi_moskvin_lecture0320110224 systems of_typed_lambda_calculi_moskvin_lecture03
20110224 systems of_typed_lambda_calculi_moskvin_lecture03
 

More from DEVTYPE

1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойстваDEVTYPE
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистикаDEVTYPE
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространствоDEVTYPE
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change ProblemDEVTYPE
 
Кучи
КучиКучи
КучиDEVTYPE
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование ХаффманаDEVTYPE
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делительDEVTYPE
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа ФибоначчиDEVTYPE
 

More from DEVTYPE (8)

1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 

Скорость роста функций

  • 1. 1.1 Скорость роста функций Сравнивая два алгоритма сортировки, мы установили, что время работы одного (сортировка вставками) примерно пропорционально n2 , а другого (сортировка слия- нием) — n log n. Каковы бы ни были коэффициенты пропорциональности, для доста- точно больших n первый алгоритм работает быстрее. Анализируя алгоритм, можно стараться найти точное количество выполняемых им действий. Но в большинстве случаев игра не стоит свеч, и достаточно оценить асимптотику роста времени рабо- ты алгоритма при стремлении размера входа к бесконечности (asymptotic efficiency). Если у одного алгоритма асимптотика роста меньше, чем у другого, то в большин- стве случаев он будет эффективнее для всех входов, кроме совсем коротких. (Хотя бывают и исключения.) 1.1.1 Асимптотические обозначения Хотя во многих случаях эти обозначения используются неформально, полезно начать с точных определений. Θ-обозначение Ранее мы говорили, что время T(n) работы алгоритма сортировки вставками на входах длины n есть Θ(n2 ). Точный смысл этого утверждения такой: найдутся такие константы c1, c2 > 0 и такое число n0, что c1n2 T(n) c2n2 при всех n n0. Вообще, если g(n) — некоторая функция, то запись f(n) = Θ(g(n)) означает, что найдутся такие c1, c2 > 0 и такое n0, что 0 c1g(n) f(n) c2g(n) для всех n n0 (см. рис. (а)). (Запись f(n) = Θ(g(n)) читается так: «эф от эн есть тэта от же от эн».) Рис. 1.1: Иллюстрация к определениям f(n) = Θ(g(n)), f(n) = O(g(n)) и f(n) = Ω(g(n)). Разумеется, это обозначение следует употреблять с осторожностью: установив, что f1(n) = Θ(g(n)) и f2(n) = Θ(g(n)), не следует заключать, что f1(n) = f2(n)! Определение Θ(g(n)) предполагает, что функции f(n) и g(n) асимптотически неотрицательны (asymptotically nonnegative), т. е. неотрицательны для достаточно больших значений n. Заметим, что если функции f и g строго положительны, то 1
  • 2. можно исключить n0 из определения (изменив константы c1 и c2 так, чтобы для малых n неравенство также выполнялось). Если f(n) = Θ(g(n)), то говорят, что g(n) является асимптотически точной оценкой (asymptotically tight bound) для f(n). На самом деле это отношение сим- метрично: если f(n) = Θ(g(n)), то g(n) = Θ(f(n)). Например, проверим, что (1/2)n2 − 3n = Θ(n2 ). Согласно определению надо ука- зать положительные константы c1, c2 и число n0 так, чтобы неравенства c1n2 1 2 n2 − 3n c2n2 выполнялись для всех n n0. Разделим выражение на n2 : c1 1 2 − 3 n c2 Видно, что для выполнения второго неравенства достаточно положить c2 = 1/2. Первое будет выполнено, если (например) n0 = 7 и c1 = 1/14. Другой пример использования формального определения: покажем, что 6n3 = Θ(n2 ). В самом деле, пусть найдутся такие c2 и n0, что 6n3 c2n2 для всех n n0. Но тогда n c2/6 для всех n n0 — что явно не так. Отыскивая асимптотически точную оценку для суммы, мы можем отбрасывать члены меньшего порядка, которые при больших n становятся малыми по сравнению с основным слагаемым. Заметим также, что коэффициент при старшем члене роли не играет (он может повлиять только на выбор констант c1 и c2). Например, рассмот- рим квадратичную функцию f(n) = an2 + bn + c, где a, b, c —некоторые константы и a > 0. Отбрасывая члены младших порядков и коэффициент при старшем члене, находим, что f(n) = Θ(n2 ). Чтобы убедиться в этом формально, можно положить c1 = a/4, c2 = 7a/4 и n0 = 2 · max(|b|/a, |c|/a) (проверьте, что требования действи- тельно выполнены). Вообще, для любого полинома p(n) степени d с положительным старшим коэффициентом имеем p(n) = Θ(nd ). Упомянем важный частный случай использования Θ-обозначений: Θ(1) обозна- чает ограниченную функцию, отделённую от нуля некоторый положительной кон- стантой при достаточно больших значениях аргумента. (Из контекста обычно ясно, что именно считается аргументом функции.) O- и Ω-обозначения Запись f(n) = Θ(g(n)) включает в себя две оценки: верхнюю и нижнюю. Их можно разделить. Говорят, что f(n) = O(g(n)), если найдётся такая константа c > 0 и такое число n0, что 0 f(n) cg(n) для всех n n0 (см. рис. (б)). Говорят, что f(n) = Ω(g(n)), если найдется такая константа c > 0 и такое число n0, что 0 cg(n) f(n) для всех n n0 (см. рис. (в)). Эти записи читаются так: «эф от эн есть о большое от же от эн», «эф от эн есть омега большая от же от эн». По-прежнему мы предполагаем, что функции f и g неотрицательны для достаточ- но больших значений аргумента. Легко видеть, что выполнены следующие свойства: Теорема 2.1. Для любых двух функций f(n) и g(n) свойство f(n) = Θ(g(n)) выполнено тогда и только тогда, когда f(n) = O(g(n)) и f(n) = Ω(g(n)). 2
  • 3. Для любых двух функций f(n) и g(n) свойства f(n) = O(g(n)) и g(n) = Ω(f(n)) равносильны. Как мы видели, an2 +bn+c = Θ(n2 ) (при положительных a). Поэтому an2 +bn+c = O(n2 ). Другой пример: при a > 0 можно написать an+b = O(n2 ) (положим c = a+|b| и n0 = 1). Заметим, что в этом случае an + b = Ω(n2 ) и an + b = Θ(n2 ). Асимптотические обозначения (Θ, O и Ω) часто употребляются внутри формул. Например, ранее мы получили рекуррентное соотношение T(n) = 2T(n/2) + Θ(n) для времени работы сортировки слиянием. Здесь Θ(n) обозначает некоторую функ- цию, про которую нам важно знать лишь, что она не меньше c1n и не больше c2n для некоторых положительных c1 и c2 и для всех достаточно больших n. Часто асимптотические обозначения употребляются не вполне формально, хотя их подразумеваемый смысл обычно ясен из контекста. Например, мы можем напи- сать выражение n i=1 O(i), имея в виду сумму h(1)+h(2)+· · ·+h(n), где h(i) — некоторая функция, для которой h(i) = O(i). Легко видеть, что сама эта сумма как функция от n есть O(n2 ). Типичный пример неформального использования асимптотических обозначений — цепочка равенств наподобие 2n2 + 3n + 1 = 2n2 + Θ(n) = Θ(n2 ). Второе из этих равенств (2n2 +Θ(n) = Θ(n2 )) понимается при этом так: какова бы ни была функция h(n) = Θ(n) в левой части, сумма 2n2 + h(n) есть Θ(n2 ). o- и ω-обозначения Запись f(n) = O(g(n)) означает, что с ростом n отношение f(n)/g(n) остаётся ограниченным. Если к тому же lim n→∞ f(n) g(n) = 0, (1.1) то мы пишем f(n) = o(g(n)) (читается «эф от эн есть о малое от же от эн»). Фор- мально говоря, f(n) = o(g(n)), если для всякого положительного > 0 найдётся такое n0, что 0 f(n) g(n) при всех n n0. (Тем самым запись f(n) = o(g(n)) предполагает, что f(n) и g(n) неотрицательны для достаточно больших n.) Пример: 2n = o(n2 ), но 2n2 = o(n2 ). Аналогичным образом вводится ω-обозначение: говорят, что f(n) есть ω(g(n)) («эф от эн есть омега малая от же от эн»), если для всякого положительного c найдется такое n0, что 0 cg(n) f(n) при всех n n0. Очевидно, f(n) = ω(g(n)) равносильно g(n) = o(f(n)). Пример: n2 /2 = ω(n), но n2 /2 = ω(n2 ). Сравнение функций Введённые нами определения обладают некоторыми свойствами транзитивности, рефлексивности и симметричности. 3
  • 4. Транзитивность: f(n) = Θ(g(n)) и g(n) = Θ(h(n)) влечет f(n) = Θ(h(n)), f(n) = O(g(n)) и g(n) = O(h(n)) влечет f(n) = O(h(n)), f(n) = Ω(g(n)) и g(n) = Ω(h(n)) влечет f(n) = Ω(h(n)), f(n) = o(g(n)) и g(n) = o(n)) влечет f(n) = o(h(n)), f(n) = ω(g(n)) и g(n) = ω(h(n)) влечет f(n) = ω(h(n)). Рефлексивность: f(n) = Θ(f(n)), f(n) = O(f(n)), f(n) = Ω(f(n)). Симметричность: f(n) = Θ(g(n)) если и только если g(n) = Θ(f(n)). Обращение: f(n) = O(g(n)) если и только если g(n) = Ω(f(n)), f(n) = o(g(n)) если и только если g(n) = ω(f(n)). Можно провести такую параллель: отношения между функциями f и g подобны отношениям между числами a и b: f(n) = O(g(n)) ≈ a b, f(n) = Ω(g(n)) ≈ a b, f(n) = Θ(g(n)) ≈ a = b, f(n) = O(g(n)) ≈ a < b, f(n) = ω(g(n)) ≈ a > b. Параллель эта, впрочем, весьма условна: свойства числовых неравенств не пере- носятся на функции. Например, для любых двух чисел a и b всегда или a b, или a b, однако нельзя утверждать, что для любых двух (положительных) функций f(n) и g(n) или f(n) = O(g(n)), или f(n) = Ω(g(n)). В самом деле, можно проверить, что ни одно из этих двух соотношений не выполнено для f(n) = n и g(n) = n1+sin n (показатель степени в выражении для g(n) меняется в интервале от 0 до 2). Заметим ещё, что для чисел a b влечёт a < b или a = b, в то время как для функций f(n) = O(g(n)) не влечёт f(n) = o(g(n)) или f(n) = Θ(g(n)). 1.1.2 Стандартные функции и обозначения Монотонность Говорят, что функция f(n) монотонно возрастает (is monotonically increasing), если f(m) f(n) при m n. Говорят, что функция f(n) монотонно убывает (is monotonically decreasing), если f(m) f(n) при m n. Говорят, что функция f(n) строго возрастает (is strictly increasing), если f(m) < f(n) при m < n. Говорят, что функция f(n) строго убывает (is strictly decreasing), если f(m) > f(n) при m < n. Целые приближения снизу и сверху Для любого вещественного числа x через x (the floor of x) мы обозначаем его целую часть, т. е. наибольшее целое число, не превосходящее x. Симметричным об- разом, x (the ceiling of x) обозначает наименьшее целое число, не меньшее x. Оче- видно, x − 1 < x − 1 < x x x < x + 1 4
  • 5. для любого x. Кроме того, n/2 + n/2 = n для любого целого n. Наконец, для любого x и для любых целых положительных a и b имеем x/a /b = x/ab и x/a /b = x/ab (чтобы убедиться в этом, полезно заметить, что для любого z и для целого n свойства n z и n z равносильны). Функции x → x и x → x монотонно возрастают. Многочлены Многочленом (полиномом) степени d от переменной n (polynomial in n of degree d) называют функцию p(n) = d i=0 aini (d — неотрицательное целое число). Числа a0, a1, . . . , ad называют коэффици- ентами (coefficients) многочлена. Мы считаем, что старший коэффициент ad не равен нулю (если это не так, уменьшим d — это можно сделать, если только много- член не равен нулю тождественно). Для больших значений n знак многочлена p(n) определяется старшим коэффи- циентом (остальные члены малы по сравнению с ним), так что при ad > 0 многочлен p(n) асимптотически положителен (положителен при больших n) и можно написать p(n) = Θ(nd ). При a 0 функция n → na монотонно возрастает, при a 0 — монотонно убывает. Говорят, что функция f(n) полиномиально ограничена (is polynomially bounded), если f(n) = nO(1) , или, другими словами, если f(n) = O(nk ) для некоторой константы k. Экспоненты Для любых вещественных m, n и a = 0 имеем a0 = 1, (am )n = amn , a1 = a, (am )n = (an )m , a−1 = 1/a, am an = am+n . При a 1 функция n → an монотонно возрастает. Мы будем иногда условно полагать 0◦ = 1. Функция n → an называется показательной функцией, или экспонентой (ex- ponential). При a > 1 показательная функция растёт быстрее любого полинома: ка- ково бы ни было b, lim n→∞ nb an = 0 5
  • 6. или, другими словами, nb = o(an ).. Если в качестве основания степени взять число e = 2, 71828 . . ., то экспоненту можно записать в виде ряда ex = 1 + x + x2 2! + x3 3! + · · · = ∞ k=0 xk k! , где k! = 1 · 2 · 3 · . . . · k. Для всех вещественных х выполнено неравенство ex 1 + x, которое обращается в равенство лишь при x = 0. При |x| 1 можно оценить ex сверху и снизу так: I 1 + x ex 1 + x + x2 . Можно сказать, что ex = 1 + x + Θ(x2 ) при x → 0, имея в виду соответствующее истолкование обозначения Θ (в котором n → ∞ заменено на x → 0). При всех x выполнено равенство limn→∞ 1 + x n n = ex . Логарифмы Мы будем использовать такие обозначения: log n = log2 n (двоичный логарифм), ln n = loge n, (натуральный логарифм), logk n = (log n)k , log log n = log(log n) (повторный логарифм). Мы будем считать, что в формулах знак логарифма относится лишь к непосредствен- но следующему за ним выражению, так что log n + k есть log (n) + k (а не log (n + k). При b > 1 функция n → logb n (определённая при положительных n) строго возрас- тает. Следующие тождества верны при всех a > 0, b > 0, c > 0 и при всех n (если только основания логарифмов не равны 1): a = blogb a , logb an = n logb a, logb a = 1 loga b , logc ab = logc a + logc b, logb a = logca logc b , alogb c = clogb a , logb ( 1 a ) = − logb a. При изменении основания логарифма умножается на константу, поэтому в записи типа O(log n) можно не уточнять, каково основание логарифма. Мы будем чаще всего иметь дело с двоичными логарифмами (они появляются, когда задача делится на две части) и потому оставляем за ними обозначение log. 6
  • 7. Для натурального логарифма есть ряд (который сходится при |x| < 1): ln (1 + x) = x − x2 2 + x3 3 − x4 4 + x5 5 − . . . При x > −1 справедливы неравенства x 1 + x ln (1 + x) x, которые обращаются в равенства лишь при x = 0. Факториалы Запись n! (читается «эн факториал», "n factorial") обозначает произведение всех целых чисел от 1 до n. Полагают 0! = 1, так что n! = n·(n−1)! при всех n = 1, 2, 3, . . .. Сразу же видно, что n! nn (каждый из сомножителей не больше n). Более точ- ная оценка даётся формулой Стерлинга (Stirling’s approximation), которая гласит, что n! = √ 2πn( n e )n (1 + Θ(1/n)). Из формулы Стирлинга следует, что n! = o(nn ), n! = ω(2n ), log (n!) = Θ(n log n). Справедлива также следующая оценка: √ 2πn( n e )n n! √ 2πn( n e )n e1/12n . Числа Фибоначчи Последовательность чисел Фибоначчи (Fibonacci numbers) определяется рекур- рентным соотношением: F0 = 0, F1 = 1, Fi = Fi−1 + Fi−1приi 2. Другими словами, в последовательности Фибоначчи 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 . . . каждое число равно сумме двух предыдущих. Числа Фибоначчи связаны с так на- зываемым отношением золотого сечения (golden ratio) ϕ и с сопряжённым с ним числом ˆϕ: ϕ = 1 + √ 5 2 = 1, 61803 . . ., ˆϕ = 1 − √ 5 2 = −0, 61803 . . .. Именно, имеет место формула Fi = ϕi − ˆϕi √ 5 , которую можно доказать по индукции. Поскольку | ˆϕ| < 1, слагаемое | ˆϕi / √ 5| меньше 1/ √ 5 < 1/2, так что Fi равно числу ϕi / √ 5, округлённому до ближайшего целого. Числа Fi быстро (экспоненциально) растут с ростом i. 7