Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЕК. Алгоритмізація. Конспект лекцій.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.89 Mб
Скачать
    1. Застосування індексів для пошуку у невпорядкованих даних

Індекси – додаткові допоміжні дані, які створюються для прискорення пошуку

Індекси доцільно використовувати у випадках:

Коли задача реалізації пошуку є пріоритетною

Коли порядок даних не можна змінювати

Коли дані розміщені у пам’яті з повільним доступом

Використання індексів передбачає певну попередню підготовчу роботу для побудови індексу, а також підтримки його у актуальному стані, коли поновлюються дані

Найпоширенішими є індекси на основі різних варіантів дерев, зокрема, бінарних та Б-дерев

  1. Алгоритми обробки даних на основі списків та дерев

План лекції

      1. Визначення списку.

      2. Види списків: незалежні списки, однозв’язані списки; двозв’язані списки; кільцеві списки; упорядковані списки.

      3. Основні операції над списками: включення елементу до списку; видалення елементу; перехід між елементами; ітератор для списку.

      4. Упорядкування та пошук в списках.

      5. Похідні структури даних: черга, стек, дек.

      6. Визначення дерева.

      7. Впорядковані дерева.

      8. Бінарні дерева.

      9. Основні операції з бінарними деревами: включення елементу; видалення елементу; обхід дерева.

      10. Балансування дерева.

      11. Б-дерева.

    1. Визначення списку

Лінійний список - це скінченна послідовність однотипних елементів (вузлів). Кількість елементів у цій послідовності називається довжиною списку.

Наприклад : F=(1,2,3,4,5,6) - лінійний список, його довжина 6.

Лінійні списки підтримують випадковий доступ до будь-якого елементу так же, як і масиви. Так же, як і в масивах, у лінійних списках можна зберігати однакові елементи.

Основна відмінність між списками і масивами полягає в тому, що списки передбачають можливість зміни кількості елементів в процесі виконання програми, а масиви – як правило, ні. Однак деякі мови програмування підтримують динамічні масиви, тобто такі, які дозволяють змінювати кількість елементів у масиві. Мова C# не підтримує динамічні масиви.

    1. Види списків: незалежні списки, однозв’язані списки; двозв’язані списки; кільцеві списки; упорядковані списки

Незалежні списки максимально схожі до масивів, оскільки містять елементи одного типу, що ніяким чином не пов’язані між собою, а також дозволяють довільний доступ до своїх елементів.

Реалізація незалежних списків часто здійснюється на основі масиву – тобто сховищем даних для списку виступає масив.

Зв’язаний список – різновид лінійного списку, у якому всі елементи зв’язані між собою посиланнями. Розглядають односпрямовані (однобічно зв’язані), двоспрямовані (двобічно зв’язані), а також кільцеві списки.

Перевага зв’язаних списків у порівнянні з масивами полягає в тому, що операція включення та виключення елементу зі списку не залежить від розміру списку, недолік – безпосередній доступ до будь-якого елементу списку не передбачений і потребує перебору усіх елементів списку, які передують потрібному.

Крім того, в списках також не існує проблеми "розширення", яка рано чи пізно виникає в масивах фіксованого розміру, коли виникає необхідність включити в нього додаткові елементи. Точно так, фіксований масив, з якого було видалено багато елементів (або вони просто не використовуються) є дуже неефективним з точки зору використання пам'яті. Функціонування списків можливо в ситуації, коли пам'ять комп'ютера фрагментована, тоді як масиви переважно потребують неперервної області для зберігання. Іншим очевидним недоліком списків є необхідність разом з корисною інформацією додаткового збереження інформації про вказівники, що позначається на ефективності використання пам'яті цими структурами.

Однобічно зв’язаний список представлений на рисунку.

Двобічно зв’язаний список представлений на рисунку.

Двобічне зв'язування потребує більше пам'яті на елемент та більших обчислювальних затрат на виконання елементарних операцій. Але такими списками легше маніпулювати, тому що вони дозволяють проходження по списку в обох напрямах, що є необхідною умовою функціонування деяких алгоритмів.