- •Лекція 1. Структури даних. Основні визначення та поняття
- •1.1. Термінологія
- •1.2. Типи даних
- •1.3. Рівні організації даних
- •1.4. Представлення даних
- •1.5. Класифікація структур даних
- •1.6. Основні операції над структурами даних
- •1.7. Документування даних
- •Лекція 2. Алгоритми. Складність алгоритмів.
- •2.1. Зображення алгоритмів
- •2.2. Складність алгоритмів
- •2.3. Класи алгоритмів
- •2.4. Документація алгоритмів
- •Лекція 3. Методи сортування .
- •3.1. Задача сортування
- •3.2.Метод простої вибірки.
- •3.3. Метод бульбашки.
- •3.4.Швидкий метод сортування
- •Лекція 4 методи сортування (продовження)
- •4.5. Сортування включенням
- •4.6. Сортування розподілом
- •4.7. Сортування злиттям або об’єднанням
- •4.8. Сортування підрахунком
- •Лекція 5 нелінійні структури даних
- •5.1. Дерева
- •5.1.1. Бінарні дерева
- •5.1.2. Алгоритм обходу дерева
- •5.1.3. Зображення в пам‘яті комп‘ютера графоподібних структур
- •Лекція 6 методи сортування на деревах
- •6.1. Сортування на деревах
- •6.1.2. Пірамідальне сортування.
- •Питання до першого модуля
- •Тема 1. Основні визначення та поняття. Термінологія. Класифікація структур даних. Основні операції над структурами даних.
- •Тема 2. Поняття алоритму. Зображення алгоритмів. Алгоритмічна складність. Поліноміальна та неполіноміальна складність алгоритмів..
- •Тема 3-4. Алгоритми сортування
- •Тема 5-6. Дерева. Основні визначення та поняття. Бінарні дерева. Зображення в пам‘яті еом графоподібних структур. Алгоритми обходу дерев.Висхідні, нисхідні, змішані алгоритми обходу дерев.
- •Лекція 7. Лінійні структури даних. Стеки, черги і деки.
- •7.1. Стеки
- •7.1.1. Реалізація стеку на базі масиву
- •7.2. Черги
- •7.2.1. Використання черги в програмуванні
- •7.2.2. Реалізація черги на базі масиву
- •7.3. Деки
- •Лекція 8. Лінійні структури даних.
- •8.1. Лінійні списки . Основні визначення та поняття
- •8.2. Однонаправлені списки
- •8.3. Двонаправлені списки
- •8.4. Циклічні списки
- •Лекція 9. Масиви, множини, кортежі
- •9.1. Масиви
- •9.2. Множини I кортежі
- •9.2.1. Реалізація множини
- •9.3. Зберігання множин і масивів
- •9.4. Зберігання розріджених матриць
- •Лекція 10. Нелінійні структури даних
- •10.1. Таблиці
- •10.1.1. Зображення таблиць
- •Лекція 11. Нелінійні структури даних
- •11.1. Спискові структури
- •11.1.1. Ієрархічні списки
- •11.1.2. Організація спискових структур
- •11.2. Сіткові структури
- •Лекція 12 пошук даних.
- •12.1. Послідовний пошук
- •12.2. Двійковий пошук
- •12.2.1. Дерева порівнянь на векторній пам‘яті.
- •12.3. Прямий пошук стрічки
- •12.4. Алгоритм Кнута, Моріса і Прата пошуку в стрічці.
- •12.5. Алгоритм Бойера - Мура пошуку в стрічці
- •12.6. Алгоритми з поверненням
- •Лекція 13 пошук у таблицях
- •13.1. Пошук у таблицях з обчислюваними адресами
- •13.2. Пошук у таблицях з прямим доступом
- •13.3. Пошук у Хеш-таблицях
- •Питання до другого модуля
- •Тема 9 Лінійні списки. Основні визначення та поняття. Однонаправлені списки. Двонаправлені списки. Циклічні списки. Організація списків.
- •Тема 10 Масиви. Множини I кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
Лекція 4 методи сортування (продовження)
4.5. Сортування включенням
При сортуванні включенням до відсортованої множини 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 стоп.
Час роботи залежить від вибору значень h. Існує декілька підходів вибору цих значень:
· При виборі , , , …, h m = 1 час роботи алгоритму, в найгіршому випадку, становить O(N2).
· Якщо h - впорядкований за спаданням набір чисел виду (3j – 1)/2, j Î N, h i < N, то час роботи є O(N1.5).
· Якщо h - впорядкований за спаданням набір чисел виду 2i 3j, i, j Î N,
h k < N, то час роботи є O(N∙log2N).
4.6. Сортування розподілом
Методи сортування розподілом являють собою природне узагальнення ручних методів сортування. Вони передбачають розбиття вхідної множини елементів М нар підмножини М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 елементів, то основні кроки виконуються m*n раз. Цифрове сортування зручно використовувати для рядків символів.
