
- •Лекція 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 кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
Лекція 6 методи сортування на деревах
6.1. Сортування на деревах
Розглянемо два методи сортування, які використовують деревоподібне зображення початкової таблиці: простий і складний. Простий метод подібний до класуалгоритмів вибірки, складний - спирається на пірамідальне зображення дерева, його називають також по імені автора - алгоритмом Флойда .
6.1.1. Метод вибірки з дерева /алгоритм Н /.
Послідовність чисел розбивається на пари, які об‘єднуються за принципом «син-батько». Батьком з двох синів стає найбільше число. Процес повторюється, доки не буде виділене одне число, найбільше, яке стане корнем утвореного дерева. У разі відсутності одного числа, батьком стає єдиний нащадок (син). Число, що попало в корінь замінюється на безмежність. Процес повторюється для знаходження наступного найбільшого числа і т.д. З рис. 6.1 видно, що задана послідовність буде впорядкована у низхідному порядку за 10-1=9 кроків.
Сумарний час виконання такого сортування приблизно пропорційний величині п log2 n . Існує декілька модифікацій цього алгоритму, які скорочують цей час.
Рис.6.1. Схема сортування методом вибірки з дерева:
а - послідовність з десяти чисел для відбору першого найбільшого елемента;
б - вибір другого найбільшого елемента.
6.1.2. Пірамідальне сортування.
Цей метод опирається на пірамідальну структуру дерева. Він складається з двох частин - побудови піраміди (алгоритм Р ) і безпосередньо сортування (алгоритмF).
Послідовність ключів K1 , К2... К n називають "пірамідою", якщо Kj < Ki при 2<j<n. i =[ j /2] - ціла частина від j/2 .
Бінарне дерево розміщується послідовно таким чином, що індекси лівого і правого "синів" запису будуть мати відповідно значення 2і і 2і+1. Навпаки, індекс "батька" запису буде мати значення [j/2]. Якщо знайдено пірамідальне зображення таблиці, то запис з найбільшим ключем знаходиться в корені дерева.
На вхід алгоритму Р подається невідсортована послідовно розміщена таблиця, а на виході - утворюється піраміда. Початковим моментом у роботі алгоритму Р є побудова піраміди, яка на початку складається з одного запису. Потім в неї послідовно вставляються чергові записи, поки не вичерпаються всі записи вхідної таблиці і в результаті чого сформується піраміда.
В алгоритмі Р використані такі позначення: вхідна таблиця R містить пзаписів R1,.. . , Rn ; індексна змінна q служить для керування кількістю виконаних вставок; змінна і є індексом "батька" запису Rj ; NEW- робоча область для запису; KEY містить ключ запису, який у даний момент повинен бути вставлений у наявну піраміду.
Алгоритм Р побудови піраміди.
Р1. Побудова піраміди. Повторювати кроки Р2 –Р6 при q=2,3,4,...,n.
P2. Ініціалізація: встановити j=q, NEW= Rq.; KEY= Kq.
P3. Вставка нового запису в наявну піраміду. Повторювати кроки Р4, Р5 доти, доки і>1.
Р4. Знаходження "батька" нового запису: встановити і=[j/2].
Р5. Перестановка записів: якщо KEY > Ki , то встановити Ri = Rj , i=j, інакше перейти до кроку Р6.
Р6. Копіювання нового запису у відповідне місце: встановити Rj =NEW.
P7. Кінець. Вихід.
Перший крок алгоритму - оператор, що повторюється. Він керує побудовою потрібної піраміди, послідовно вставляючи нові записи. У кроці Р2 вибирається запис, який повинен бути встановлений у наявну піраміду, і виконується копіюванням цього запису в область NEW. У кроках Р4 і Р5 новий запис приєднується /у вигляді листка/ до наявної піраміди /тобто до бінарного дерева/ і просувається на дереві по шляху між новим листком і вершиною піраміди. Цей процес повторюється доти, доки новий запис не досягне в дереві позиції, що задовольняє визначенню піраміди. Копіювання нового запису у відповідне йому місце в дереві виконується у кроці Р6.
Безпосередньо сортування наявної піраміди зводиться до багаторазового виключення вершини піраміди і подальшої її реконструкції - запису цієї вершини на своє остаточне місце. Алгоритм сортування використовує алгоритм Р - алгоритм побудови піраміди.
Алгоритм F сортування з використанням алгоритму Р- алгоритм Флойда.
Нехай задана таблиця R , що містить n записів R1,.. . , Rn, i алгоритм побудови піраміди P. Цей алгоритм здійснює сортування таблиці у зростаючому порядку. Змінна q є індексом обходу дерева. Індексні змінні і ,j, використовуються у тому випадку, коли j є індексом лівого "сина" запису з ключем Кi; SAVE - робоча область зберігання запису; KEY - змінна, що містить ключ запису при кожному проходженні; і - індекc вершини - "батька".
Алгоритм F по кроках.
Fl. Побудова піраміди: виклик програми Р.
F2. Виконання сортування: повторювати кроки F2 - F8 при q=n,n-1,…,2.
F3. Локалізація запису з iндексом q : встановити R1= Rq .
F4. Ініціалізація індексів: встановити i=1,, SAVE= R1,KEY=k1, j=2.
F5. Реконструкція піраміди: повторювати кроки F6, F 7 доки j<q-1.
F6. Одержання iндексa "сина" з найбільшим значенням ключа:
якщо j+1<q, Kj+1 > Kj , встановити j=j+1.
F7. Чи потрібна перестановка записів? Якщо Kj > KEY, то встановити Ri= Rj, i=j, j=2*I; Інакше перейти на крок F8.
F8. Копіювання запису на відповідне місце: встановити Ri=SAVE.
F9. Кінець: вихід.
Робота даного алгоритму починається з побудови піраміди для вхідної таблиці. Крок F2 здійснює керування n-1 проходженням всієї таблиці, необхідним для її сортування, інші кроки аналогічні крокам алгоритму Р для побудови нової піраміди після включення нового запису. Ця аналогія полягає у тому, що вершина R1 піраміди поміняється місцями з вершиною Rn, а потім нова піраміда, що містить n-1 записів, реконструюється за допомогою програми Р. Результатом такої реконструкції є розміщення запису з другим найбільшим значенням ключа у вершині R1. Цей запис поміняється місцями із записом Rn-1, і будується нова піраміда, що містить n-2 записи, і т.д.
Аналіз найгіршого випадку для цього алгоритму показав, що число порівнянь, які потрібно виконати, дорівнює величині порядку О(п log2 n). Крім того, для даного алгоритму непотрібно додаткових робочих областей пам‘яті, за виключенням поля для одного запису.
Отже, розглянуто велику кількість різних методів сортування. Кращі методи потребують порядку п log2 n порівнянь, найпростіші - порядку n2 . Методи сортування з обчисленням адреси і числове або цифрове сортування використовують додаткову інформацію про дані і вимагають n порівнянь. Кращі методи сортування не вимагають додаткової пам‘яті, крім тієї, яка потрібна для зберігання даних, програми і фіксованого набору керуючих величин. Багато методів сортування використовують додаткову пам‘ять обсягом порядку log2 n або n квантів.
При виборі методу сортування необхідно враховувати структуру даних, вимоги до часу і обсягу пам‘яті, а також складність програмування алгоритму.