
- •Лекція 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 кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
9.2.1. Реалізація множини
Розглянемо для простоти реалізацію звичайної, не навантаженої множини. (Реалізація навантаженої множини аналогічна реалізації звичайної, просто паралельно з елементами потрібно додатково зберігати навантаження елементів.) У звичайній реалізації множини її елементи зберігаються в масиві, починаючи з першої комірки. Спеціальна змінна містить поточне число елементів множини, тобто кількість використовуваних у цей момент комірок масиву.
При додаванні елемента x до множини спочатку необхідно визначити, чи міститься він у множині (якщо міститься, то множина не змінюється). Для цього використовується процедура пошуку елемента, яка відповідає на запитання, чи належить елемент x множині, і, якщо належить, видає індекс комірки масиву, що містить x. Та ж процедура пошуку використовується й при видаленні елемента з множини. При додаванні елемента він дописується в кінець (у комірку масиву з індексом рівним числу елементів) і змінна числа елементів збільшується на одиницю. Для видалення елемента достатньо останній елемент множини переписати на місце, що видаляється й зменшити змінну числа елементів на одиницю.
У звичайній реалізації елементи множини зберігаються в масиві в довільному порядку. Це означає, що при пошуку елемента x доведеться послідовно перебрати всі елементи, поки ми або не знайдемо x, або не переконаємося, що його там немає. Нехай множина містить 1.00.00 елементів. Тоді, якщо x належить множині, доведеться переглянути в середньому 500.00 елементів, якщо немає - усі елементи. Тому звичайна реалізація підходить тільки для невеликих множин.
9.3. Зберігання множин і масивів
Множини це структури найпростішого вигляду. В пам‘яті їх можна зображувати двома способами:
1) для кожного елемента множини зберігати в пам‘яті його описання аналогічно до математичного способу задання множини переліком її елементів;
2) визначити всі потенційно можливі елементи множини, а потім для всякої підмножини такої універсальної множини вказувати для кожного можливого елемента, чи належить він даній підмножині, чи ні. Цей спосіб аналогічний предикатній формі задання множини в математиці.
У першому випадку множину зручно зберігати у вигляді вектора або лінійного списку. У другому - використовуються вектори бітів. Для цього пронумеруємо всі можливі елементи множини, наприклад, від 1 до N . Відведемо вектор пам‘яті із М бітів і визначимо множину, встановлюючи в і -й біт одиницю, якщо і -й можливий елемент присутній у даній множині, і нуль - у протилежному випадку. Очевидно, якщо N велике, а конкретна підмножина мала, то краще користуватися першим способом. Другий спосіб має переваги, які дозволяють виконувати операції над множинами за допомогою логічних операцій машинного рівня.
Слід відзначити, що як тільки множина виявиться записаною в пам‘яті, спосіб її зображення визначає на ній індексацію, і різні методи зображення дозволяють по-різному її обробляти. Зображення в пам‘яті масивів очевидне. Найпростіший масив одномірний, який ототожнюється з вектором. Багатомірні масиви також зображуються векторами. Формули для локалізації елементів багатомірного масиву у векторному зображенні наведено в підрозд.6.1. Однак так звані розріджені матриці зображуються в пам‘яті нелінійними ба-гатозв‘язними структурами.