Лекция 1 Скорость роста функций

16
Анализ комбинаторных алгоритмов Лекция №1 Скорость роста функций

Upload: simplepeople

Post on 11-Feb-2017

166 views

Category:

Data & Analytics


2 download

TRANSCRIPT

Page 1: Лекция 1 Скорость роста функций

Анализ комбинаторных алгоритмов

Лекция №1Скорость роста функций

Page 2: Лекция 1 Скорость роста функций

Базовые понятия

Алгоритм – это формально описанная вычислительная процедура, получающая исходные данные и выдающая результаты вычислений на выход.

Правильный алгоритм при любом допустимом для данной задачи входе заканчивает работу и выдает результат, удовлетворяющий условиям задачи.

Page 3: Лекция 1 Скорость роста функций

Базовые понятия

Главным показателем качества алгоритма является время его работы, а точнее, его зависимость от размера входа алгоритма

Время работы зависит не только от размера входа алгоритма, но и от значений входа, поэтому различают время работы алгоритма в наилучшем, наихудшем и в среднем случае

Page 4: Лекция 1 Скорость роста функций

Пример №1. Сортировка вставками.Алгоритм работы.

Исходный массив

d c a b

1-ый проход c d a b

2-ой проход a c d b

3-ий проход a b c d

void Insert_Sort(n, A) {1. for(j=1; j<n; j++){2. key = A[ j ];3. for(i = j-1; i>=0 && key<A[ i ];

i--)4. A[ i+1 ] = A[ i ];5. A[ i+1] = key; } }

Page 5: Лекция 1 Скорость роста функций

Пример №1. Сортировка вставками. Время работы.

1

154

1

1321общ )1()1()1(1)-(nc 1)-(nc (n)T

n

ii

n

ii nctctc

const-)ncc(c (n)T 521л

const -)n c2/c2/cc(c /2)nc2/(c (n)T 543212

43х

1it

2)1(

nnti

В общем случае:

В лучшем случае:

В худшем случае:

Page 6: Лекция 1 Скорость роста функций

Пример №1. Сортировка вставками. Графическое изображение.

)()(

)()(2nnT

nnT

x

л

Время работы алгоритма в лучшем случае имеет порядок роста n, а в худшем n2.

n

T(n)

Page 7: Лекция 1 Скорость роста функций

Отношение асимптотически точной оценки симметрично, т.е если то .

Говорят, что , если найдутся такие константы с1,с2>0 и такое число n0, что будет выполняться для всех n >= n0.

Асимптотические обозначения

))(()( ngnTx

)()()( 21 ngcnTngc

))(()( ngnf

Если убрать понятие n0 из определения, то g(n) будет являться асимптотически точной оценкой.

))(()( nfng

Page 8: Лекция 1 Скорость роста функций

Запись включает две оценки: верхнюю и нижнюю. Их довольно часто разделяют:

Верхняя оценка:Говорят, что , если найдется с>0 и такое число n0, такие что , при всех n>n0.Нижняя оценка:Говорят, что , если найдется с>0 и такое число n0, такие что , при всех n>n0.

Асимптотические обозначения

))(()( ngnf

))(()( ngnf

))(()( ngOnf

)()(0 nfncg

)()(0 ncgnf

Page 9: Лекция 1 Скорость роста функций

Асимптотические обозначения

Теорема.Для любых двух функций f(n) и g(n) свойство выполняется тогда и только тогда,когда и

))(()( ngnf

))(()( ngOnf ))(()( ngnf

Page 10: Лекция 1 Скорость роста функций

))(()( влечет ))(()( ))(()( nhnfnhngиngnf

Асимптотические обозначения

Введенные определения обладают свойствами:Транзитивность:

Рефлексивность:

Обращение:))(()( nfnf ))(()( nfOnf

))(()( если )),(()( nfngngOnf

))(()( nfnf

))(()( влечет ))(()( ))(()( nhnfnhngиngnf ))(()( влечет ))(()( ))(()( nhOnfnhOngиngOnf

Page 11: Лекция 1 Скорость роста функций

Пример №2. Быстрая сортировка.Алгоритм работы.

Исходный массив

f e d a c b

1-ый проход b c a | d e f

2-ой проход a | c b | d | e f

3-ий проход a | b | c | d | e | f

Page 12: Лекция 1 Скорость роста функций

Пример №2. Быстрая сортировка.Алгоритм работы.

void quick_sort(A, n) { quick(A,0,n-1) }

void quick(A, left, right) { i = left; j = right; x = A[ (left+right)/2 ]; do{ while (A[ i ]<x && i<right) i++; while (A[ j ]>x && j>left) j--; if (i <= j) { y = A[ i ]; A[ i ] = A[ j ]; A[ j ]=y; i++; j--; } } while(i<=j) if (left<j) quick(A,left,j); if (right>i) quick(A,i,right);}

Page 13: Лекция 1 Скорость роста функций

Пример №2. Быстрая сортировка. Время работы.

Наихудшее разбиение («наиболее неравныечасти» - 1,n-1):

Наилучшее разбиение («дробление пополам»):

n

k

nknnTnT1

2 )()()()1()(

)()2/(2)( nnTnT

Page 14: Лекция 1 Скорость роста функций

Пример №2. Быстрая сортировка. Время работы.

Основная теорема о рекуррентных оценках.Пусть a>=1 и b>1 – некоторые константы, f(n) – функция,T(n) = aT(n/b)+f(n), при неотрицательных n, где под n/b понимаетсяТогда:

n/b или n/b

)()( 0, для )()( )1 loglog aa bb nnTnOnfесли

))(( n,большых и 1с при )()/( если и 0 для ),()( )3 log

nfT(n)ncfbnafnnfесли ab

);log()( ),()( )2 loglog nnnTnnfесли aa bb

Page 15: Лекция 1 Скорость роста функций

Пример №2. Быстрая сортировка. Время работы.

Исходя из теоремы о рекуррентных оценках,можно сделать вывод, что в лучшем случаевремя работы алгоритма:

Доказано, что среднее время работы алгоритма оценивается также как n log n.

)log()( nnnT

Page 16: Лекция 1 Скорость роста функций

Пример №2. Быстрая сортировка. Графическое изображение.

n

T(n)