- •Теоретичні основи програмування
- •1. Комбінаторні алгоритми обробки структур даних. Задачі пошуку та сортування.
- •2. Алгоритми пошуку елемента в масиві за даними критеріями. Прямий і бінарний пошук.
- •3. Алгоритми пошуку підпослідовності в послідовності. Прямий пошук підрядка в рядку. Алгоритм Кнута – Моріса – Пратта.
- •Прямий пошук підрядка в рядку.
- •Метод Кнута-Моріса-Пратта.
- •4. Прямі алгоритми сортування масивів. Алгоритм сортування прямим включення, прямим вибором, прямим обміном. Шейкерне сортування масивів.
- •Сортування прямим включенням.
- •Сортування прямим обміном.
- •Шейкерне сортування.
- •5. Швидкі алгоритми сортування масивів. Алгоритм Шелла, Quick Sort, Heap Sort. Сортування включенням із зменшуваними відстаннями - алгоритм Шелла (1959).
- •Сортування обміном на великих відстанях - алгоритм Quick Sort.
- •Сортування вибором при допомозі дерева - алгоритм Heap Sort.
- •6. Сортування структур даних з послідовним доступом. Алгоритми злиття.
Сортування вибором при допомозі дерева - алгоритм Heap Sort.
Прямий вибір - повторюваний пошук найменшого елемента серед N елементів, N-1 елементів, N-2 і т.д. Кількість порівнянь при цьому (N2-N)/2. Для підвищення ефективності необхідно залишати після кожного етапу побільше інформації окрім ідентифікації найменшого ключа.
Після N/2 порівнянь можна знайти в кожній парі елементів найменший, після N/4 порівнянь - менший із пари вже вибраних на попередньому кроці і т.д. Виконавши загалом N/2+N/4+...+2+l=N-l порівнянь, можна побудувати дерево вибору та ідентифікувати його корінь як шуканий найменший елемент. Наприклад
На наступному етапі сортування проводиться рух вздовж віток, які відмічені мінімальними елементом, і вилучення його з дерева шляхом заміни на пустий елемент.
Далі здійснюється заповнення «дірок» у дереві. На першому рівні залишається «дірка» від вилученого елемента, а на наступних знову вибирається менший із двох сусідніх попереднього рівня. «Дірка» при порівнянні вважається як завгодно великим значенням.
Елемент,
що опинився в корені - знову найменший.
Після N таких кроків дерево стане пустим,
в ньому будуть лише одні "дірки"
(сортування закінчене). На кожному з N
етапів виконується log(N) порівнянь. Тому
на весь процес впорядкування потрібно
порядку N*log(N) операцій плюс N-1 операцій
для побудови дерева. Ефективність
порядку
.
6. Сортування структур даних з послідовним доступом. Алгоритми злиття.
Пряме злиття є простим алгоритмом сортування, і його часто використовують як допоміжну операцію в більш складних процесах сортування послідовностей. Цей прийом полягає в послідовному виконанні наступних дій :
1)вихідна послідовність а розбивається на дві підпослідовності приблизно однакової довжини b і с ;
2) отримані частини b і с зливаються в одну послідовність, причому вибрані з них по одному елементи утворюють впорядковані пари ;
3) об'єднана таким чином послідовність під тим же іменем а знову розбивається на дві частини та зливається в одну. Але при цьому вибираються вже по два підряд елементи і впорядковуються четвірки;
4)такі послідовні розбиття та об'єднання із збільшенням на кожному етапі кількості вибраних для злиття елементів повторюються, поки не отримається повністю відсортована послідовність.
На останньому етапі зливатимуться всі елементи обох частин b і с.
