- •Лекція 1
- •Основні визначення та поняття
- •1.1.Термінологія
- •1.2. Класифікація структур данях
- •1.3. Основні операції над структурами даних
- •Контрольні запитання
- •Лекція 2 алгоритми. Складність алгоритмів
- •1. Зображення алгоритмів
- •2 Складність алгоритмів
- •3. Класи алгоритмів
- •Контрольні запитання
- •Лекція 3 методи сортування
- •Лекція 4 методи сортування (продовження)
- •4. Сортування включенням
- •5. Сортування розподілом
- •6. Сортування злиттям або об’єднанням
- •Лекція 5 Дерева
- •1. Основні визначення та поняття
- •2. Бінарні дерева
- •3. Зображення в пам‘яті комп‘ютера графоподібних структур
- •Контрольні запитання
- •Лекція 6 дерева (продовження)
- •4. Сортування на деревах
- •4.2. Пірамідальне сортування.
- •Контрольні запитання
- •Лекція 7 лінійні структури даних
- •1. Стеки, черги, деки
- •1.1. Стеки
- •1.2. Черги
- •1.3. Деки
- •1.4. Організація стеків, черг і деків
- •Контрольні запитання та вправи
- •3. Множини I кортежі
- •4. Зберігання множин і масивів
- •4.1 Зберігання розріджених матриць
- •Контрольні запитання
- •Лекція 9 Лінійні списки
- •1. Основні визначення та поняття
- •2. Однонаправлені списки
- •3. Двонаправлені списки
- •4. Циклічні списки
- •Контрольні запитання та вправи
- •Лекція 11 нелінійні структури даних
- •1. Таблиці
- •2. Зображення таблиць
- •Контрольні питання
- •Лекція 13 Пошук даних
- •1. Послідовний або лінійний пошук
- •2. Двійковий пошук
- •1. Дерева порівнянь на векторній пам‘яті.
- •3.Пошук у таблиці
- •4. Прямий пошук стрічки
- •5. Алгоритм Кнута, Моріса і Прата пошуку в стрічці.
- •7. Алгоритми з поверненням
- •Лекція 14 Пошук у таблиці
- •1. Пошук у таблицях з обчислюваними адресами
- •2. Пошук у таблицях з прямим доступом
- •3. Пошук у Хеш-таблицях.
- •Контрольні питання
Лекція 4 методи сортування (продовження)
4. Сортування включенням
При сортуванні включенням до відсортованої множини R кожний раз приєднується один елемент, а саме: із невідсортованої вхідної множини М вибирається довільний елемент і розміщується у вихідну множину R.
Алгоритм V.
Нехай задано множину елементів М, |M|=n.
V1. k =1; повторювати кроки V2, V3, доки k<n.
V2. Вибір довільного елемента x вхідної множини М : x=M(k).
V3. Розміщення x у вихідній множині R так, щоб вона залишалась відсортованою.
V4. Кінець.
Вихідну множину R при кожному включенні можна відсортовувати відомим методом сортування, наприклад, методом простої вибірки.
Майже всі методи сортування включенням у найгіршому випадку вимагають порядку n2 порівнянь, тому їх застосування пов‘язане з деяким ризиком. Є багато варіантів цього методу сортування.
Розглянемо метод Шелла.
Його суть полягає в тому, що на кожному кроці групуються та сортуються елементи, що стоять один від одного на певній відстані h. Потім ця відстань зменшується на крок рівний степені двійки. На останньому кроці іде звичайне одинарне сортування. Перша відстань вибирається відносно кількості елементів в масиві поділена на 2.
Приклад:
44 55 12 42 94 18 06 67 n=8, h=n/2=4
44 18 06 42 94 55 12 67 h=h/2=4/2=2
06 18 12 42 44 55 94 67 h=h/2=2/2=11
06 12 18 42 44 55 67 94 стоп.
Математичний аналіз показує, що затрати на сортування цим методом пропорційні величині О(n1.2).
5. Сортування розподілом
Методи сортування розподілом являють собою природне узагальнення ручних методів сортування. Вони передбачають розбиття вхідної множини елементів М на р підмножини М1,..., Мр, для яких виконуються умови М1 < М2 < ... < Мр
Алгоритм R має рекурсивну структуру (позначено квадратними дужками)
Нехай задано множину М елементів, що розбита на р підмножини Мі
R1. Якщо |M|=0 або |М|=1, кінець.
R2. Інакше [Розбиття М на М1... Мp так, щоб М1 < Мp ; i=1, виконувати доки і<p [Сортування розподілом підмножини Мі ; i=i+1] ] .
R3. Кінець.
Одну з версій цього алгоритму називають цифровим або порозрядним сортуванням за аналогією з системою числення. На практиці механічне сортування починається з молодшого розряду і просувається в напрямку до старшого, при цьому відсортовані підмножини послідовно об’єднуються і перерозподіляються.
Приклад:
329 720 720 329
457 355 329 355
657 436 436 436
839 457 839 457
436 657 355 657
720 329 457 720
355 839 657 839
Цифрове сортування не використовує порівняння елементів, тому не можна оцінювати його в звичайних термінах. Якщо елементи містять m цифр, то потрібно виконати m проходів i, якщо на кожному проході розподіляється n елементів, то основні кроки виконуються mn раз. Цифрове сортування зручно використовувати для рядків символів.
6. Сортування злиттям або об’єднанням
Методи цього класу працюють за таким принципом: невідсортовану вхідну множину довільно розбивають на підмножини М1,..., Мp. Потім ці підмножини сортують окремо одним з відомих методів сортування і об’єднують в одну відсортовану множину. Продемонструємо цю схему на двох множинах, оскільки багаторазове злиття можна здійснювати багаторазовим виконанням попарного злиття.
Нехай маємо дві відсортовані множини X і У; потрібно об’єднати їх у множину Z , яка також повинна бути відсортованою. У ролі Z1 приймаємо min (x1, y1) якщо Z1 = x1є X, тоді Z2 = min(x2, y1 ) і т.д.
Для запису алгоритму використовуємо таке позначення: і - індекс для множини X , j - індекс для множини Y , k – індекс для множини Z, i=1,n; j=1,m; k=1,(n+m).
Для зручності розмістимо в кінці кожної множини фіктивні елементи: xn+1= max, ym+1 =max.
Алгоритм C
Дано X={ x1 ,…, xn }; Y={ y1 ,…, ym }.
C1. Ініціалізація індексів i=1, j=1, k=1;
C2. Виконувати C3, C4 доки k<n+m.
С3 [Якщо xi < yi то [ zk = xi; i=i+1] інакше [ zk=yi, j=j+1]
C4. k=k+1]
C5. Кінець.
В квадратних дужках записані дії які повторюються. Кількість порівнянь, яку необхідно виконати в алгоритмі С для злиття двох множин, дорівнює |x|+|y|=n+m.
Вся процедура злиття разом вимагає не більше ніж n порівнянь для n елементів i потрібно буде виконати log2 n переходів із однієї множини у другу. Тобто алгоритм С вимагає п log2 n порівнянь.