
- •Лекція 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 кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
13.3. Пошук у Хеш-таблицях
Природним розвитком застосування таблиць з безпосереднім доступом є обчислення адреси не в повному діапазоні 0.. n-1, а в деякому обмеженому. Цей метод відомий як метод перемішаних адрес або метод змістовної адресації.
У простій таблиці з безпосереднім доступом з п можливих ключів можна згенерувати унікальну адресу в діапазоні 0.. n-1. Але якщо з‘являється тільки l<<nключів, то втрачається великий обсяг пам‘яті. Отже, доцільно обчислювати адресу в діапазоні l < m<<n, однак це збільшить ймовірність появи колізії.
Розглянемо приклад з табл. 9.1. Для восьми елементів відведемо тільки 10 одиниць пам‘яті, тобто l=8, m =10.
Наприклад, для побудови хеш-таблиці будемо обчислювати хеш-адресу від ключа в діапазоні 0..9 таким чином: складемо всі десяткові коди обох символів, що утворюють ключ, а потім візьмемо залишок від ділення цієї суми на 10 (ділення за модулем 10). Значення такої хеш-функцїї наведені в табл. 13.2, а в табл. 13.3 - побудова хеш-таблиці за цією функцією. Для ліквідації ситуації колізії застосовувалося повторне хешування.
Таблиця 13.2.
Обчислення хеш-адреси
№ |
Ключ |
Коди букв |
Адреса |
1 |
AN |
0 13 |
3 |
2 |
AX |
0 23 |
3 |
3 |
BC |
1 2 |
3 |
4 |
BI |
1 8 |
9 |
5 |
BJ |
1 19 |
0 |
6 |
CM |
2 12 |
4 |
7 |
JR |
9 17 |
6 |
8 |
MO |
12 14 |
6 |
Таблиця 13.3.
Побудова хеш-таблиці
Адреса |
Ключ |
0 |
BJ |
1 |
|
2 |
|
3 |
AX |
4 |
CM |
5 |
AN |
6 |
MO |
7 |
JR |
8 |
BC |
9 |
BI |
Для фіксованих таблиць можна знайти достатньо ефективну функцію адресації. Якщо ж таблиці не фіксовані і всі можливі ключі вибираються з деякої достатньо великої множини потенційно можливих ключів, то ідеальної функції адресації не існує.
Довжина пошуку в хеш-таблицях залежить від коефіцієнта заповнення адресного простору, тобто відношення q=n/m , де п - кількість записів; m - розмірність таблиці, а також методу розв‘язку задачі колізії.
Питання до другого модуля
Тема 9 Лінійні списки. Основні визначення та поняття. Однонаправлені списки. Двонаправлені списки. Циклічні списки. Організація списків.
Рівень І
Основні властивості списків...
Однонаправлений список це...
Який список називається лінійним?
Двонаправлені списки це ...
Що називають "збиранням сміття"?
Рівень ІІ
З чого складається елемент списку?
Що записано в заголовку списку?
Які дії виконуються при обробці списків ?
Зі скількох значень складається довідка однонаправленого списку?
Що записано у довідці останньої ділянки однонаправленого списку в полі вказівника?
Зі скількох полів складається довідка елемента двонаправленого списку?
Зі скількох значень складається довідка заголовної ділянки однонаправленого списку?
Рівень ІІІ
Схема процедури включення нового запису в однонаправленому списку.
Схема процедури виключення нового запису в однонаправленому списку.
Які бувають списки за кількістю зв'язків та за типом функції зв'язку?
Які є способи зображення списків?