- •Лекція 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 кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
Лекція 12 пошук даних.
Задача пошуку виникла пізніше, ніж задача сортування. Поява її спричинена головним чином появою автоматизованих інформаційних систем АІС, які будуються на основі комп‘ютерів.
Розглянемо звичайну пошукову задачу: як знаходити дані, що зберігаються в пам‘яті комп‘ютера за певною ідентифікацією.
Наприклад, в обчислювальній задачі потрібно знайти f(х), маючи значення x і таблицю значень функції f(x); у лінгвістичних задачах може цікавити англійський еквівалент відповідного слова.
Взагалі будемо припускати, що зберігається множина з n записів i необхідно визначити місцезнаходження відповідного запису. Розглянемо ряд алгоритмів пошуку і наведемо їх короткі характеристики, а також рекомендації застосування.
12.1. Послідовний пошук
Найпростішим методом пошуку певного запису, що знаходиться у невпорядкованій таблиці, є послідовний перегляд кожного запису, доки не буде виявленого злиття (співпадіння) з шуканим. Такий метод називають послідовним або лінійним пошуком.
Алгоритм L.
Таблиця містить п записів R1 ,..., Rп з ключами k1 ,..., kп . Необхідно знайти запис iз заданим ключем k.
L1. Ініціалізація індексу проходження таблиці: і=1.
L2. Якщо k=ki - кінець успішний; якщо ні, перехід на L3.
L3. Зміна індексу і =i+1.
L4. Перевірка умови i<n? Так: перехід на L2. Ні - кінець неуспішний.
Ефективність алгоритму можна оцінити, підрахувавши кількість виконаних порівнянь тих значень ключів, які приймають участь у пошуку. Середня кількість таких порівнянь дорівнює величині п. Таким чином асимптоматична складність алгоритму - O(n). У зв’язку з малою ефективністю в порівнянні з іншимиалгоритмами лінійний пошук зазвичай використовують лише тоді, коли відрізок пошукової системи містить дуже мало елементів, однак лінійний пошук не вимагає додаткової пам’яті або аналізу функції, так що може працювати в потоковому режимі при безпосередньому отриманні даних з будь-якого джерела. Так само, лінійний пошук часто використовується у вигляді лінійних алгоритмів пошуку максимуму (мінімуму).
Приклад програмної реалізації.
Вихідний код програмної реалізації алгоритму лінійного пошуку на мові програмування C має наступний вигляд:
int* search(int *arr, int cnt, int req)
{
for (int i = 0; i < cnt; i++)
if (arr[i] == req)
return arr + i;
return NULL;
}
12.2. Двійковий пошук
Другим відносно простим методом доступу до таблиць є метод бінарного пошуку. Двійковий пошук можливий у таблицях, організованих як дерева порівнянь. Елементи в таких таблицях зберігаються в лексикографічному (тобто алфавітному) порядку, або в порядку зростання числових значень ключів.
Загальна стратегія організації дерева полягає у поділі таблиці на підтаблиці, сукупності елементів на підмножини елементів. Тоді процедура пошуку елемента в дереві порівнянь нагадує пошук імені в телефонному довіднику. Для відшукання елемента потрібно спочатку вирішити, в якій підмножині знаходиться елемент, знайти цю підмножину і після цього продовжувати пошук.
