2. Базовые понятия
Алгоритм – это формально описанная
вычислительная процедура, получающая
исходные данные и выдающая результаты
вычислений на выход.
Правильный алгоритм при любом
допустимом для данной задачи входе
заканчивает работу и выдает результат,
удовлетворяющий условиям задачи.
3. Базовые понятия
Главным показателем качества алгоритма
является время его работы, а точнее, его
зависимость от размера входа алгоритма
Время работы зависит не только от размера
входа алгоритма, но и от значений входа,
поэтому различают время работы алгоритма в
наилучшем, наихудшем и в среднем случае
4. Пример №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; }
}
5. Пример №1. Сортировка вставками.
Время работы.
∑∑
−
=
−
=
−+−+−++=
1
1
54
1
1
321общ )1()1()1(1)-(nc1)-(nc(n)T
n
i
i
n
i
i nctctc
const-)ncc(c(n)T 521л ++=
const-)nc2/c2/cc(c/2)nc2/(c(n)T 54321
2
43х ++++++=
1=it
2
)1( −
=
nn
ti
В общем случае:
В лучшем случае:
В худшем случае:
6. Пример №1. Сортировка вставками.
Графическое изображение.
)()(
)()(
2
nnT
nnT
x
л
Θ=
Θ=
Время работы алгоритма
в лучшем случае имеет
порядок роста n, а в
худшем n2
.
n
T(n)
7. Отношение асимптотически точной оценки
симметрично, т.е если то
.
Говорят, что , если найдутся такие
константы с1,с2>0 и такое число n0, что будет
выполняться для всех n >= n0.
Асимптотические обозначения
))(()( ngnTx Θ=
)()()( 21 ngcnTngc ≤≤
))(()( ngnf Θ=
Если убрать понятие n0 из определения, то g(n)
будет являться асимптотически точной оценкой.
))(()( nfng Θ=
8. Запись включает две оценки:
верхнюю и нижнюю. Их довольно часто разделяют:
Верхняя оценка:
Говорят, что , если найдется с>0 и
такое число n0, такие что , при
всех n>n0.
Нижняя оценка:
Говорят, что , если найдется с>0 и
такое число n0, такие что , при
всех n>n0.
Асимптотические обозначения
))(()( ngnf Θ=
))(()( ngnf Ω=
))(()( ngOnf =
)()(0 nfncg ≤≤
)()(0 ncgnf ≤≤
11. Пример №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
12. Пример №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);
}
13. Пример №2. Быстрая сортировка.
Время работы.
Наихудшее разбиение («наиболее неравные
части» - 1,n-1):
Наилучшее разбиение («дробление пополам»):
∑=
Θ=Θ=Θ+−=
n
k
nknnTnT
1
2
)()()()1()(
)()2/(2)( nnTnT Θ+=
14. Пример №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)ncfbnaf
nnfесли ab
Θ==><≤
>Ω= +
εε
);log()(),()()2 loglog
nnnTnnfесли aa bb
Θ==>Θ=
15. Пример №2. Быстрая сортировка.
Время работы.
Исходя из теоремы о рекуррентных оценках,
можно сделать вывод, что в лучшем случае
время работы алгоритма:
Доказано, что среднее время работы алгоритма
оценивается также как n log n.
)log()( nnnT Θ=