Professional Documents
Culture Documents
Algorithms and Data Structures
Algorithms and Data Structures
ЛЕКЦІЯ 1
Вступна лекція
Валенда Н.А.
Кафедра Програмної інженерії,
факультет КН, ХНУРЕ
1
Зміст лекції:
2
Метою дисципліни "Алгоритми та структури даних" є
вивчення методів побудови алгоритмів та аналіз їх
ресурсних характеристик. У курсі розглядаються такі
питання: основні структури даних, зв'язок структур даних та
алгоритмів, базові алгоритми для вирішення типових
завдань, оцінка складності алгоритмів
3
Література
4
Термін – алгоритм
• Походження терміна «алгоритм» пов'язано з математикою. Це
слово походить від Algorithmi – латинського написання імені
Мухаммеда аль-Хорезмі (787 – 850) видатного математика
середньовічного Сходу. У своїй книзі "Про індійський рахунок"
він сформулював правила запису натуральних чисел за
допомогою арабських цифр та правила дій над ними
стовпчиком. У XII ст. було виконано латинський переклад його
математичного трактату, з якого європейці дізналися про
десяткову позиційну систему числення та правила арифметики
багатозначних чисел. Саме ці правила тоді називали
алгоритмами.
• Надалі алгоритмом стали називати точне розпорядження, що
визначає послідовність дій, що забезпечує отримання
необхідного результату.
5
Поняття алгоритму
• «Алгоритм — точний припис про виконання у певному порядку
деякої системи операцій, які ведуть до вирішення всіх завдань
цього типу». (М.М. Розенталь)
Вимоги до алгоритму:
6
Властивості алгоритмів
• Дискретність - алгоритм будується з окремих кроків (інструкцій,
дій, команд). Множина кроків, з яких складено алгоритм, кінцева.
Наименование Обозначение
Блок начало-конец
Блок вычислений
Предопределённый процесс
Данные
(ввод-вывод)
Граница цикла
Соединитель
9
Структури даних
Структури даних – це спосіб організації даних у пам'яті
комп'ютера (наприклад – масиви, списки, стеки, дерева
тощо)
10
Структури даних
– Масив (Array)
– Список (List)
• Зв'язаний список (Linked list)
– Хеш-таблиця (Hash table)
– Дек (Deque) — двозв'язкова черга
– Стек (Stack, LIFO — Last in, first out)
– Черга (Queue, FIFO — First in, first out)
• Черга з пріоритетом (Priority queue)
11
Структури даних
• Граф (Graph)
– Список ребер (Adjacency list)
– Дерева
• 2-3-дерево
• Дерево відрізків
• BSP-дерево
• Двійкове дерево пошуку (Binary search tree)
– Дерево пошуку, що самобалансується (Self-balancing binary search
tree)
» АВЛ-дерево (AVL tree)
» Червоно-чорне дерево (Red-black tree)
» Дерево, що розширюється (Splay tree)
• Купа (Heap)
– Двійкова купа (Binary heap)
– Біноміальна купа (Binomial heap)
– Фібоначчієва купа (Fibonacci heap)
• Дерево розбору (Parse tree)
• Інші структури даних
– Об'єднання (Union)
– Таблиця (Table) 12
Показники ефективності алгоритмів
• порівнювати алгоритми
• оцінювати потреби алгоритмів у обчислювальних
ресурсах
13
Аналіз алгоритмів
• Аналіз алгоритмів – теоретичне дослідження
продуктивності алгоритмів та споживаних ними ресурсів.
14
Лінійний пошук
public int LinearSearch(int[] array, int x)
{
for (int index = 0; index < array.Length; index++)
{
if (array[index] == x)
{
return index;
}
}
return NotResult; Кількість виконань циклу?
}
11 разів
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2 3 8 15 23 27 33 40 51 66 68 71 79 85 86 90 92 98 99 100
15
Двійковий пошук
int low, high, mid;
low = 0;
high = array.Length - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (x < array [mid])
high = mid - 1;
else if (x > array [mid])
low = mid + 1;
else Кількість виконань циклу?
return mid;
}
return -1;
0 }1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
16
2 3 8 15 23 27 33 40 51 66 68 71 79 85 86 90 92 98 99 100
Двійковий пошук
1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2 3 8 15 23 27 33 40 51 66 68 71 79 85 86 90 92 98 99 100
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2 3 8 15 23 27 33 40 51 66 68 71 79 85 86 90 92 98 99 100
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2 3 8 15 23 27 33 40 51 66 68 71 79 85 86 90 92 98 99 100
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2 3 8 15 23 27 33 40 51 66 68 71 79 85 86 90 92 98 99 100
17
Покроковий метод аналізу алгоритму
18
Лінійний пошук
код кількість
повторень
for (int index = 0; index < array.Length; index++) n+1
{
if (array[index] == x) n
{
return index; 1
}
}
return NotResult; 1
T(n)= n+1+n+1+1=2*n+3
19
Двійковий пошук
код кількість
повторень
while (low <= high) log n
{
mid = (low + high) / 2; log n -1
if (x < array [mid]) log n -1
high = mid - 1;
else if (x > array [mid]) log n -1
low = mid + 1; log n -1
else 1
return mid; 1
}
return -1; 1
T(n)=2*n+3
T(n)=5*log n - 1
21
Види аналізу
22
Сортування вибором
23
Сортування вибором
6, 5, 3, 4, 11
3, 5, 6, 4, 11
3, 4, 6, 5, 11
3, 4, 5, 6, 11
3, 4, 5, 6, 11
24
Сортування вибором
25
Сортування вибором
min = j; с5
k = a[ i ]; с6 n-1
a[ i ] = a[ min ]; с7 n-1
a[ min ] = k; с8 n-1
26
Арифметичні прогресії
(1 n)n
i0 ti n (n 1) (n 2) ... 2 2 1
n 1
n(n 1)
i 0 (ti 1) (n 1) (n 2) ... 1 2
n 1
27
Оцінка складності
T (n) c1* n c 2 * (n 1) c3 * i 0 ti (c 4 c5) *
n 1
n 1
i 0
(ti 1) (c6 c7 c8) * (n 1)
n(1 n) n(n 1)
c1* n c 2 * (n 1) c3 * 1 (c 4 c5) *
2 2
(c6 c7 c8) * (n 1)
n n2 n2 n
c1* n c 2 * (n 1) c3 * 1 (c 4 c5) *
2 2
c3 c 4 c5
(c6 c7 c8) * (n 1) (c1 c 2 c6 c7 c8) * n
2 2 2
(c3 c 4 c5) 2
* n (c 2 c3 c6 c7 c8) a * n 2 b * n c
2
28
Види аналізу
29
Порівняння швидкодії алгоритмів
30
Асимптотичні позначення
31
Межі функції Т(n)
32
Асимптотична функція Ɵ
f(n)= Ɵ(g(n)).
34
Асимптотична функція О
Нехай f (n) - це кількість операцій, що виконуються алгоритмом,
f(n)= О(g(n)),
якщо виконуються наступні умови:
f(n)=1/2n2-3n
Доведемо, що g(n)=n2 є асимптотичною оцінкою f(n)
f(n)=θ(n2)
1 2
0 C1 * n 2 n 3n C 2 * n 2
2
1 3
0 C1 C 2
2 n
При С2= 1/2 нерівність буде виконуватись (n→∞)
n0 = 7, так як n = 6 брати не можна (С1 і С2> 0)
C1 = 1/14, С2 = 1/2 з виразу - 1/2-3/7 = 1/14.
Твердження вірне
36
Асимптотична оцінка
f(n)=6n3
Доведемо, що g(n)=n2 є асимптотичною оцінкою f(n)
f(n)=θ(n2)
0 C1n 2 6n 3 C 2 n 2
0 C1 6n C2
37
Найбільш розповсюджені асимптотичні функції
38