
- •1. Асимптотическая оценка алгоритма
- •2. Методика оценки не рекурсивных алгоритмов. Пример
- •3. Рекурсивные алгоритмы, построение асимптотической оценки. Пример
- •4. Методика оценки рекурсивных алгоритмов.
- •5. Алгоритмы сортировки массивов за полиномиальное время
- •6. Быстрые алгоритмы сортировки массивов, основанные на сравнении элементов
- •7. Алгоритмы сортировки массивов за линейное время
- •8. Линейные структуры данных, основные операции и характеристики
- •9. Деревья, виды, способы представления, структуры данных, обходы дерева
- •10. Двоичные деревья поиска, операции добавления элементов.
- •11. Двоичные деревья поиска, операции удаления элементов и поиска следующих
- •13. Двоичные кучи, основные операции и характеристики
- •16. Динамическое программирование, основные особенности
- •17. Жадные алгоритмы, основные особенности
- •18. Построение кода Хаффмена
- •19. Алгоритм обхода графов в ширину
- •20. Алгоритм обхода графов в глубину
- •21. Остовое дерево, классификация ребер, топологическая сортировка.
- •22. Сильно связные компоненты, алгоритм поиска
- •23. Построение минимально покрывающего дерева, алгоритм Крускала
- •24. Построение минимального покрывающего дерева, алгоритм Прима
- •25. Происк кратчайшего пути. Алгоритм Дейкстры
- •26. Поиск кратчайшего пути. Алгоритм Беллмана-Форда
1. Асимптотическая оценка алгоритма
Анализ алгоритмов – теоретическое исследование производительности компьютерных программ и потребляемых ими ресурсов.
Быстродействие – время работы алгоритма, в зависимости от объема входных данных.
Определяется функцией Т(n), где n – объем входных данных
Виды анализа
Наихудший случай: T(n) – максимальное время для любых входных данный размера n.
Средний случай: T(n) – ожидаемое время для любых входных данных размера n.
Наилучший случай – минимальное время работы.
Асимптотическая оценка
O - нотация: асимптотическая верхняя граница
f (n) = O(g(n)) Þ
($c > 0, n0> 0 Þ 0 ≤ f (n) ≤ c · g(n), n ≥ n0)
O(g(n)) = {f (n) : $ c > 0, n0 > 0 Þ 0 ≤ f (n) ≤ c · g(n), n ≥ n0}
Пример: 2n2 = O(n3)
Ω - нотация: асимптотическая нижняя граница
Ω(g(n)) = {f (n) : $c > 0, n0 > 0 Þ 0 ≤ c · g(n) ≤ f (n), n ≥ n0}
Пример 1
f(n)=1/2n2-3n
Докажем, что g(n)=n2 является асимптотической оценкой f(n)
f
(n)=θ(n2)
При С2= 1/2 неравенство будет выполнятся (n→∞) n0=7, так как n=6 брать нельзя (С1и С2>0)
C1= 1/14, С2= 1/2 из выражения – 1/2-3/7=1/14. Утверждение верно
Пример 2
f(n)=6n3
Д
окажем,
что g(n)=n2 является
асимптотической оценкой f(n)
f
(n)=θ(n2)
П
редположение
неверно т.к. не выполняется условие
Асимптотические оценки:
θ(1) , θ(log2n), θ(n), θ(n*log2n), θ(n2), θ(n3), θ(2n)
2. Методика оценки не рекурсивных алгоритмов. Пример
for(i=0; i < n-1; i++) { |
с1 |
n |
min = i ; |
с2 |
n-1 |
for ( j = i+1; j <= n-1; j++ ) |
с3 |
|
if (a[ j ] < a [min ]) |
с4 |
|
min = j; |
с5 |
|
k = a[ i ]; |
с6 |
n-1 |
a[ i ] = a[ min ]; |
с7 |
n-1 |
a[ min ] = k; |
с8 |
n-1 |
} |
|
|
= = n + (n-1) + (n-2)…+2 =
-1
= (n-1) + (n-2)…+1 =
3. Рекурсивные алгоритмы, построение асимптотической оценки. Пример
Сортировка слиянием
sort(А,p,r) //p - начало массива, r – конец массива T(n)
{
if(p < r) //1
{
q=(p + r)/2; //Вычисляем середину массива 1
sort(А,p,q); //сортируем левую часть T(n/2)
sort(А,q+1,r); //сортируем правую часть T(n/2)
merge(p,q,r); //сливаем два массива в один n
}
}
Дерево рекурсии: T(n) = 2*T(n/2) +cn, с –const, c>0
4. Методика оценки рекурсивных алгоритмов.
Метод итераций
На основании формулы T(n) записываем формулу для меньшего элемента, находящегося в правой части формулы для T(n).
Подставляем правую часть полученной формулы в исходную формулу
Выполняем первые два шага, пока не развернем формулу в ряд без функции T(n)
Оценим полученный ряд на основании арифметической или геометрической прогрессии
Пример:
T(n)=T(n-1)+n, T(1)=1
T(n)=θ(g(n)), g(n)=?
T(n-1)=T(n-2)+(n-1)
T(n-2)=T(n-3)+(n-2)
T(n)= T(n-1)+n=
T(n-2)+(n-1)+n=
T(n-3)+(n-2)+(n-1)+n=…
1+…(n-2)+(n-1)+n=
n*(n+1)
2
T(n)=θ(n2)
Дерево рекурсии - графический метод отображения подстановки соотношения самого в себя
T(n)=2T(n/2)+n2
n2
T(n/2) T(n/2)
n2
(n/2)2 (n/2)2
T(n/4) T(n/4) T(n/4) T(n/4)
n2
n2
(n/2)2 (n/2)2 log n (1/2)*n2
(n/4)2 (n/4)2 (n/4)2 (n/4)2 (1/4)*n2
T(n)=θ(n2)
Mетод подстановки
Догадаться (предложить) о решении
Проверить решение с помощью индукции
Найти и подставить константы
T
(n) = 2T (n/2) + n
Догадка:
T(n) = (n log n)
Посылка индукции: T(n) ≤ с * n* log n, c>0
Пусть эта оценка верна для n/2
T(n/2) ≤ c*(n/2)*log(n/2)
Подставим ее в исходную формулу для T(n)
T(n) ≤ 2*(c*(n/2)*log(n/2))+n ≤
c*n*log(n/2)+n =
c*n*log n - c*n*log 2 +n =
c*n*log n - c*n +n ≤
c*n*log n
c≥1, n ≥ 2
Основная теорема о рекуррентных оценках
T (n) = aT (n/b) + f (n), a ≥ 1, b > 1, f (n) − (f (n) > 0, n > n0)