
- •9 Лінійні списки. Основні визначення та поняття. Однонаправлені списки. Двонаправлені списки. Циклічні списки. Організація списків.
- •Тема 10 Масиви. Множини I кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
- •Тема 11 Нелінійні структури даних. Класифікація нелінійних структур даних. Таблиці. Зображення таблиць. Основні операції з таблицями.
- •Тема 12. Спискові структури. Основні поняття. Ієрархічні списки. Сіткові структурі. Організація спискових структур.
- •Тема 13. Пошук даних. Послідовний пошук. Двійковий пошук. Алгоритм Кнута, Моріса, Пратта. Алгоритм Бойера-Мурра. Порівняння алгоритмічної складності методів
- •Тема 14. Дерева порівнянь на векторній пам‘яті. Дерева порівнянь на зчепленій пам‘яті. Пошук у таблицях з обчислюваними адресами. Таблиці з прямим доступом. Хеш-таблиці. Задача колізії.
Тема 14. Дерева порівнянь на векторній пам‘яті. Дерева порівнянь на зчепленій пам‘яті. Пошук у таблицях з обчислюваними адресами. Таблиці з прямим доступом. Хеш-таблиці. Задача колізії.
Рівень І
Функція хешування це…
Функції, що відображають імя або ключ у деяке ціле число називають функціями хешування h(k) для ключа k.
Колізія це…
Ситуацію, за якої h(hi) = h(kj), при ki != kj називають колізією.
Дерева порівнянь на векторній пам‘яті.
Розглянемо спочатку, як можна записати дерево у векторну пам‘ять.
Нехай ключі зберігаються у векторі КЛЮЧ(i;j). Елементи у векторній пам‘яті повинні бути впорядкованими за значенням ключів.
При пошуку певного елемента зробимо коренем дерева вмістиме КЛЮЧ(т), де m=[(і+j)/2]- найбільше ціле, менше або рівне (i+j)/2. Тоді ліве піддерево розміщується у векторі КЛЮЧ(i;m-1), а праве - у векторі KЛЮЧ(m+1;j). Цей процес повторюється, доки не буде знайдений потрібний елемент, тобто доки процес не зійдеться у одній вершині, для якої обидва індекси у векторі КЛЮЧ будуть мати однакові значення.
Дерева порівнянь на зчепленій пам‘яті.
??????? гугл тоже в шоці
Рівень ІІ
Алгоритм пошуку у таблицях з обчислюваними адресами.
Розглянемо метод, у якому тривалість пошуку буде незалежною від числа записів у таблиці. Для цього таблиці треба організовувати так, щоб місцезнаходження її елементів визначалося за допомогою обчислюваної адреси. Це так звані таблиці з обчислюваними адресами. Загальна ідея організації таких таблиць полягає у тому, щоб використовувати ключ безпосередньо в ролі адреси або визначати адресу за допомогою функції від ключа і запам‘ятовувати запис за цією адресою.
Функції, що відображають ім‘я або ключ у деяке ціле число, називають функціями хешування h(k) для ключа k. Їх також називають функціями перемішування або рандомізації.
Ситуацію, при якій h(ki)= h(kj) при ki!= kj, називають колізією.
Таблиці з обчислюваними адресами поділяються на таблиці з прямим або безпосереднім доступом і перемішані, або хеш-таблиці. Задача колізії має місце тільки в хеш-таблицях.
Алгоритм пошуку у таблиці з прямим доступом.
Таблицю називають таблицею з прямим або безпосереднім доступом, якщо для визначення місцезнаходження кожного запису використовується його ключ. Функція хешування визначається як відображення К->A , де К- множина ключів, які можуть ідентифікувати записи в таблиці з прямим доступом; А - множина адрес. Доступ до запису за ключем k здійснюється в такому випадку за значенням функції h(k).
Мірою використання пам‘яті в таблицях з прямим доступом є коефіцієнт заповнення q , що визначається як відношення числа записів n до числа місць m в таблиці: q=n/m.
Вибір функції адресації, що забезпечує взаємну однозначність перетворення ключа в адресу її зберігання, взагалі достатньо складна задача. На практиці її можна розв‘язати тільки для постійних таблиць із заздалегідь відомим набором значень ключа. Такі таблиці застосовуються в трансляторах (наприклад, таблиця символів вхідної мови є таблицею з прямим доступом).
Наведемо приклад таблиці з прямим доступом. Якщо маємо n ключів, то кожному заданому ключу k можна поставити у відповідність адресу запису в діапазоні 0.. n-1..