- •Тема 6. Дерева. 96
- •Тема 1 Множини. Операції над множинами
- •1. Основи теорії множин
- •2. Види множин
- •3. Операції над множинами
- •4. Розбиття і покриття.
- •5. Властивості операцій над множинами:
- •6. Ком’ютерне зображення множин
- •Тема 2 Комбінаторика
- •1. Класичні задачі комбінаторики
- •2. Правило суми та добутку
- •3. Основні формули
- •4. Задача про цілочислові розв'язки
- •5. Біном н’ютона
- •6. Арифметичний трикутник (трикутник Паскаля)
- •7. Розв’язування рекурентних рівнянь.
- •8. Числа Фібоначчі
- •Тема 3. Основи теорії відношень
- •1. Основні поняття теорії відношень
- •2. Способи задання бінарних відношень
- •3. Операції над відношеннями
- •4. Властивості бінарних відношень
- •1. Рефлексивність
- •2. Антирефлексивність
- •3. Симетричність
- •4. Несиметричність
- •5. Антисиметричність
- •6. Транзитивність
- •7. Антитранзитивність
- •5. Відношення еквівалентності, порядку, толерантності
- •Тема 4. Теорія функцій. Алгебри
- •1. Алгебраїчні структури
- •2. Алгебри булевих функцій
- •Тема 5. Теорія графів
- •1. Основні означення та властивості
- •2. Деякі спеціальні класи простих графів
- •3. Способи подання графів
- •3.1. Матриця інцидентності
- •3.2. Матриця суміжності
- •3.3. Подання графа списком пар (списком ребер)
- •3.4. Подання графа списками суміжності
- •3.5. Матриці досяжностей і контрдосяжностей
- •4. Шляхи та цикли. Зв’язність
- •4.1. Головні означення та результати. Термінологія
- •4.2. Характеристики зв’язності простого графа
- •5. Ізоморфізм графів
- •6. Ейлерів цикл у графів
- •7. Гамільтонів цикл у графі
- •8. Зважені графи та алгоритми пошуку найкоротших шляхів
- •9. Обхід графів
- •9.1. Пошук углиб у простому зв'язному графі
- •9.2. Пошук ушир у простому зв'язному графі
- •10. Планарні графи
- •11. Розфарбування графів
- •12. Незалежні множини вершин. Кліки
- •Тема 6. Дерева.
- •1. Основні означення та властивості
- •2. Рекурсія. Обхід дерев. Префіксна та постфіксна форми запису виразів
- •43018, Луцьк-18, вул. Львівська,75
2. Рекурсія. Обхід дерев. Префіксна та постфіксна форми запису виразів
Об'єкт називають рекурсивним, якщо він містить сам себе, або означений за допомогою самого себе. Рекурсія – потужний засіб у математичних означеннях.
Приклад 4. Означимо повне бінарне дерево рекурсивно:
а) о (ізольована вершина) – повне бінарне дерево;
б) якщо А та В - повні бінарні дерева, то конструкція, зображена на рис 4 – повне бінарне дерево.
Рис. 4
Приклад 5. Рекурсивне означення функції п\ для невід'ємних цілих чисел має такий вигляд:
а) 0! = 1;
б) якщо п>0,
то
Очевидно, що потужність рекурсії пов'язана з тим, що вона дозволяє означити нескінченну множину об'єктів за допомогою скінченного висловлювання. Так само нескінченні обчислення можна описати за допомогою скінченної рекурсивної програми, навіть якщо ця програма не містить явних циклів. Проте, краще за все використовувати рекурсивні алгоритми в тих випадках, коли задача, яку розв'язують, або функція, яку обчислюють, або дані, які обробляють, задано за допомогою рекурсії.
Чимало задач можна моделювати з використанням кореневих дерев. Поширене таке загальне формулювання задачі: виконати задану операцію обробити з кожною вершиною дерева. Тут обробити – параметр загальнішої задачі відвідування всіх вершин, або так званого обходу дерева. Розглядаючи розв'язування цієї задачі як єдиний послідовний процес відвідування вершини дерева в певному порядку, можна вважати їх розміщеними одна за одною. Опис багатьох алгоритмів істотно спрощується, якщо можна говорити про наступну вершину дерева, маючи на увазі якесь упорядкування. Є три принципи впорядкування вершин, які природно випливають зі структури дерева. Як і саму деревоподібну структуру, їх зручно формулювати за допомогою рекурсії.
Звертаючись до бінарного дерева, де R - корінь, А та В - ліве та праве піддерева, можна означити такі впорядкування.
1. Обхід у прямому порядку або зверху вниз: R, А, В (корінь відвідують до обходу піддерев);
2. Обхід у внутрішньому порядку або зліва направо: А, R, В:
3. Обхід у зворотному порядку або знизу вверх А, В, R (тобто корінь відвідують після обходу піддерев).
Нижче наведено рекурсивні алгоритми обходу бінарних дерев. У кожному способі обходу використано команду обробити (v), де v- вершина. Цей термін залишено невизначеним, бо його значення залежить від того, що ми хочемо зробити під час проходження вершин. Для наших цілей достатньо використати звичайну команду друку символу.
Алгоритм обходу в прямому порядку позначено як ОПП (х). у внутрішньому - як ОВП (х) і в зворотному - як ОЗП (х). У всіх трьох алгоритмах х - це корінь дерева, яке обходять. Лівого сина вершини v позначено як лс (v), а правого - як пс (v).
Алгоритм обходу дерева в прямому порядку - ОПП (корінь)
• Обробити(корінь)
• Якщо лс (корінь) існує, то ОПП (лс (корінь))
• Якщо пс (корінь) існує, то ОПП(пс(корінь))
Алгоритм обходу дерева у внутрішньому порядку - ОВП (корінь)
• Якщо пс (корінь) існує, то ОВП {пс (корінь))
• Обробити(корінь)
• Якщо пс(корінь) існує, то ОВП (пс(корінь)
Алгоритм обходу дерева у зворотному порядку - ОЗП (корінь)
• Якщо лс (корінь) існує, то ОЗП (лс (корінь))
• Якщо пс (корінь) існує, то ОЗП (пс (корінь))
• Обробити (корінь)
Рис. 5
Приклад 6. На рис. 5 зображено бінарне дерево. Різні обходи дадуть такі послідовності вершин:
обхід у прямому порядку: abdehocfmpq;
обхід у внутрішньому порядку: abheoafcpmq;
обхід у зворотному порядку: dhoebfpqmca.
Зазначені способи обходу бінарних дерев можна узагальнити й на довільні m-арні дерева.
Надзвичайно поширене застосування в інформатиці обходу дерев-зіставлення виразам (арифметичним, логічним тощо) дерев і побудова на цій основі різних форм запису виразів. Суть справи зручно пояснити на прикладі. Розглянемо арифметичний вираз (зірочкою позначено операцію множення)
Подамо його у вигляді дерева. Послідовність дій відтворено на рис. 6. Рамкою на ньому обведено дерево, яке відповідає заданому арифметичному виразу. Внутрішнім вершинам цього дерева відповідають символи операцій, а листкам – операнди.
Рис. 6
Обійдемо це дерево, записуючи символи у вершинах у тому порядку, у якому вони зустрічаються в разі заданого способу обходу. Тоді отримаємо такі три послідовності:
♦ у разі обходу в прямому порядку - префіксний або польський запис:
♦ у разі обходу у внутрішньому порядку - інфіксний запис (поки що без дужок, потрібних для визначення порядку операцій):
.
♦ у разі обходу в зворотному порядку - постфіксний або зворотний польський запис:
.
Для обчислення значення виразу в польському записі його проглядають справа наліво та знаходять два операнди разом зі знаком операції перед ними. Ці операнди та знак операції вилучають із запису, виконують операцію, а її результат записують на місце вилучених символів.
Приклад 6. Обчислимо значення виразу в польському записі (стрілка означає піднесення до степеня)
+ – *2 3 5/
2
3 4.
За сформульованим правилом виділимо 2 3, ці символи вилучимо й обчислимо 2 Т 3 = 8, результат записуємо на місце вилучених символів:
+ – *2 3 5/ 8 4.
Продовжимо обчислення. Динаміку процесу відображено в табл. 1.
Таблиця 1
Крок |
Вираз |
Виділені символи |
Виконання операції |
1 |
+ – *2 3 5/ 2 3 4 |
2 3 |
2 3 =8 |
2 |
+–*235/84 |
/84 |
8/4=2 |
3 |
+–*2352 |
*23 |
2*3=6 |
4 |
+–652 |
–65 |
6–5=1 |
5 |
+12 |
+12 |
1+2=3 |
6 |
3 |
|
|
Для обчислення значення виразу в зворотному польському записі його проглядають зліва направо та виділяють два операнди разом зі знаком операції після них. Ці операнди та знак операції вилучають із запису, виконують операцію, а її результат записують на місце вилучених символів.
Приклад 7. Обчислимо значення виразу в зворотному польському записі
723 *– 4 93/+.
Динаміку обчислень відображено в табл. 2.
Таблиця 2
Крок |
Вираз |
Виділені символи |
Виконання операції |
1 |
723*–4 93/+ |
23* |
2*3=6 |
2 |
76–4 93/+ |
76– |
7–6=1 |
3 |
14 93/+ |
14 |
1 4=1 |
4 |
193/+ |
93/ |
9/3=3 |
5 |
13+ |
13+ |
1+3=4 |
6 |
4 |
|
|
Література
Андерсон, Джеймс А. Дискретная математика и комбинаторика: Пер. с англ. – М.: Издательскийдом «Вильямс», 2004 р. – 960 с.
Зарипова Э.Р., Кокотчикова М.Г. Дискретная математика. Часть III. Теория графов. – Издательство: РУДН, 2013. – 179 с.
Нікольський Ю.В., Пасічник В.В., Щербина Ю.М. Дискретна математика. – К.: Видавнича група ВНV, 2007. – 368 с.
Комп’ютерна дискретна математика: Підручник / М.Ф. Бондаренко, Н.В. Білоус, А.Г. Руткас. – Харків: «Компанія СМІТ», 2004. – 480 с.
Дискретна математика: Підручник / Ю.М. Бардачов, Н.А. Соколова, В.Є. Ходаков; За ред. В.Є. Ходакова. – 2-е вид., переробл. і допов. – К.: Вища шк., 2007. – 383 с.: іл.
НАВЧАЛЬНО-МЕТОДИЧНЕ ВИДАННЯ
Дискретна математика [Текст]: конспект лекцій
для студентів спеціальності 7.05010201 «Комп’ютерні системи та мережі» навчально-наукового центру післядипломної освіти. / уклад. М.В. Делявський, Н.В. Здолбіцька, – Луцьк: Луцький НТУ, 2014. – 100 с.
Комп’ютерний набір і верстка: Н.В. Здолбіцька
Редактор В.Є. Костюхіна
Підпис до друку ______20___ р. Формат 60х84/16. Папір офс.
Гарн. Таймс. Ум. друк. арк. . Обл.-вид. арк. .
Тираж 40 прим. Зам. №.______
Редакційно-видавничий відділ
Луцького національного технічного університету
