
- •Обчислення часу виконання програми. Правила.
- •Правила аналізу часу виконання алгоритмів.
- •Реалізація атд “Список” при допомозі масивів
- •Реалізація атд “Черга” при допомозі циклічного массиву
- •Оператори для роботи із атд “Множина”. Моделі представлення.
- •Insert(X, a) – робить х елементом множини а. Або іншими словами аè{X}.
- •Реалізація атд “Множина” при допомозі двійкових векторів
- •Реалізація атд “Множина” при допомозі зв’язаних списків
- •Атд “Словник”. Реалізація словників
- •Хешування та хеш-таблиці
- •Тип даних “Дерево”. Основні означення. Обхід дерева в симетричномупорядку
- •Тип даних “Дерево”. Основні означення. Обхід дерева в зворотному орядку
- •Реалізація атд “Дерево” при дпомозі списків синів
- •Функція знаходження опорного елементу та функція перестановки елементів для методу швидкого сортування
- •Пірамідальне сортування.
- •Пошук із використання індексації по ключах
- •Послідовний метод пошуку
- •Метод бінарного пошуку
Реалізація атд “Дерево” при дпомозі списків синів
сellspace array [1..maxnodes] of struct
int node
int next
// повертає самого лівого сина вузла n дерева Т
function LEFTMOST_CHILD (node n, TREE T):node
int L; // курсор на початок списку синів вузла n
L = T.header[n]
if EMPTY(L) // n є листком
then return 0
else return cellspace[L].node
// повертає батька вузла n дерева T
function PARENT (node n, TREE T):node
node p;
position i;
for p from 1 to maxnodes do
i = T.header[p];
while i ≠ 0) do // перевірка на наявність синів у вузла p
if cellspace.node == n
then return p
else i = cellspace.next;
return 0
Двійкові дерев
Бінарним (двійковим) деревом називається таке дерево в якого кожен вузол або немає синів, або має чи лівого, чи правого, або має обидва.Той факт, що кожен син вузла дерева визначений як лівий або правий суттєво відрізняє бінарне дерево від впорядкованого орієнтованого дерева.Обхід бінарного дерева в прямому, симметричному і зворотньому порядках відповідає таким же обходам для звичайних дерев.
Постановка задачі сортування. Види сортування. Алгоритми сортування
Сортуванням або впорядкуванням списку об’єктів називається розташування цих об’єктів по зростанню чи спаданню.В загальному розрізняють два види сортування – внутрішнє і зовнішнє.При внутрішньому сортуванні, усі дані розміщуються в оперативній пам’яті комп’ютера, де можна отримати доступ до них у будь-якому порядку.Зовнішнє сортування застосовується тоді, коли об’єм даних, що необхідно впорядкувати, надто великий не може бути перенесений в оперативну пам’ять комп’ютера.При розгляді алгоритмів сортування, будемо вважати, що ми сортуємо певні об’єкти. В якості представлення таких об’єктів будемо використовувати структуру, що складається з одного або декількох полів і одне з полів такої структури називатиметься ключем і міститеме тип, для якого визначено відношення лінійного порядку.
В загальному, задача сортування полягає у впорядкуванні послідовності записів таким чином, щоб значення полів з ключами складали не спадаючу прогресію.
Бульбашкове сортування, Сортування вставками, Сортування через вибір,Швидке сортування, Пірамідальне сортування,“Кишенькове” сортування
Схема “бульбашкового” сортування
Щоб описати схему роботи даного алгоритму, уявимо собі що структури, які необхідно посортувати лежать в масиві, розташованому вертикально.Структури з малим значенням ключового поля більш легкі і в спливають догори як бульбашки. При першому проході масиву, береться перший об’єкт і значення його ключа порівнюється із ключовими полями усіх іншими об’єктів в масиві. Коли зустрічається об’єкт із більш легким значенням ключа, то об’єкти міняються місцями, і вже цей об’єкт стає еталоном для порівняння.
В результаті структура з найменшим значенням ключа виявляється на вершині. Під час другого проходу, знаходиться об’єкт із другим по величині ключем і він розміщується на позиції одразу під вершиною.
for (int i=0; i<n; i++)
for (int j = n-1; j>i; j--)
if (A[j].key<A[j-1].key)
swap (A[j].key, A[j-1].key);
Схема сортування через вибір
При такому сортуванні, на і-му етапі вибирається об’єкт, з найменшим значенням ключа серед об’єктів A[i]…A[n] і міняється місцем із об’єктом A[i]. В результаті, після виконання цього кроку, всі об’єкти A[1],…A[i] будуть впорядковані. для i від 0 до n-1 вибрати серед A[i],…,A[n] елемент із найменшим ключем і поміняти його місцями із A[i]. Реалізувати такий алгоритм можна наступним чином:
int lowindex, lowkey;
for (int i = 0; i < (n-1); i++) {
lowindex = i;
lowkey = A;
for (int j = i+1; j < n; j++)
if (A[j].key< lowkey) {
lowkey = A[j].key;
lowindex = j; }
swap (A.key, A[lowindex].key); }
Схема сортування вставками
При сортуванні вставками на і-тому кроці ми вставляємо і-тий елемент А[i] в потрібну позицію серед елементів A[1], A[2],…, A[i-1], які вже впорядковані. Після цієї вставки перші іелементів будуть впорядкованими.Алгоритм роботи можна описати так:
для i від 1 до n перемістити A[i] на позицію j≤і таку, що A[i]<A[k] для j≤k≤i
for (int i = 1; i<n; i++) {
j = i;
while (A[j]<A[j-1]) {
swap (A[j], A[j-1]);
if (--j == 0)
break;}}
Швидке сортування
Для сортування елементів A[1]…A[n], вибирається значення ключа v в якості опорного елементу, відносно якого перевпорядковується всі елементи масиву.Значення опорного елементу необхідно вибрати близьким по значенню до медіани розподілу значень ключів, так щоб опорний елемент розбивав множину значень ключів на дві приблизно рівні частини.Далі елементи масиву переставляються так, щоб для деякого індексу j всі переставлені елементи A[1],…,A[j] мали значення ключів, менше від v, а всі елементи A[j+1],…,A[n] – значення ключів, більше або рівне v.Після цього, процедура швидкого сортування рекурсивно застосовується до множини елементів A[1],…,A[j] та A[j+1],…,A[n] для впорядкування цих множин окремо.