
- •Дерева. Означення та основні властивості.
- •Кореневе дерево. Упорядковане кореневе дерево, m-арне дерево, повне m-арне дерево.
- •Властивості повного m-арного дерева. Рівень вершини і висота кореневого дерева. Збалансоване дерево.
- •Обхід бінарних дерев (три способи).
- •6.Інфіксна форма запису.
- •7. Префіксна форма запису виразів (прямий польський запис).
- •8. Постфіксна форма запису виразів. (обернений польський запис).
- •9. Бінарне дерево пошуку.
- •10. Дерево прийняття рішень.
- •11. Алгоритм бектрекінг. Приклади: пошук гамільтонових циклів у графі, задача про n ферзів та інші задачі.
- •12. Каркаси графів. Способи їх побудови.
- •13. Задача про мінімальний каркас. Алгоритм Краскала.
- •14. Відношення. Означення відношення із однієї множини в іншу, n-арні відношення. Означення відношення на множині. Бінарні відношення. Властивості відношень. Способи задання бінарних відношень.
- •15. Відношення еквівалентності.
- •16. Відношення часткового порядку.
- •17. Рефлексивне замикання відношення. Симетричне замикання відношення.
- •18. Транзитивне замикання відношення. З’єднувальне відношення.
- •19. Алгоритм Уоршала.
- •20. Постановка проблеми кодування, її значення в інформатиці. Алфавітне і рівномірне кодування. Достатні умови однозначності алфавітного кодування.
- •21. Властивості однозначного алфавітного кодування. Нерівність Крафта-Макміллана.
- •22. Задача оптимального кодування. Метод Фано побудови «економних» кодів.
- •23. Метод Хаффмана побудови оптимального коду.
- •24. Коди, стійкі до перешкод. Загальна теорія.
- •25. Коди, стійкі до перешкод: коди Хемінга.
- •26. Булеві функції. Означення, задання таблицями і формулами, істотні і неістотні змінні.
- •27. Диз’юктивні нормальні форми.
- •28. Кон'юктивні нормальні форми.
- •29. Поліном Жегалкіна
- •30. Алгебри булевих функцій
- •31. Алгебра Жегалкіна
- •35. Клас l. Лема про нелінійну функцію.
- •36. Теорема Поста.
- •37. Постановка задачі мінімізації булевих функцій.
- •38. Методи Квайна та Мак-Класкі.
- •39. Імплікантна таблиці Квайна. Метод Петрика відбору тупікових днф.
- •40. Граматики з фразовою структурою.
- •42. Скінченні автомати з виходом. Способи задання, приклади.
- •43. Скінченні автомати без виходу. Способі задання приклади.
- •44. Машина Тьюрінга.
11. Алгоритм бектрекінг. Приклади: пошук гамільтонових циклів у графі, задача про n ферзів та інші задачі.
Основна ідея методу полягає в тому, що розв’язок будується поступово починаючи або з третьої порожньої послід. (довжини 0), або з однойменної послід. (довжини 1). Тобто, якщо ми маємо деякий частковий розв’язок х1,…, хі, то намагаємось знайти таке допустиме значення xi+1, що не виключає можливість продовження до повного розв’язку. Якщо таке допустиме, але ще не використане значення хі+1 існує то долучаємо цю нову компоненту до часткового розв’язку і продовжуємо процес до послід. х1,..,хі,хі+1. Якщо значення хі+1 не існує то повертаємось назад до попередньої послід. х1,…,хі-1 і продовжуємо процес шукаючи нове, ще не використане значення хі’ і так далі.
Побудова гамільтонових циклів.
Починаємо з довільної вершини. Будуємо шлях без повторення вершин, доки це можливо, якщо вдалось пройти всі вершини, то перевіряємо чи існує ребро, яке з’єднує останню і початкову вершини цього шляху. Якщо описаний процес у певний момент неможливо продовжити, то повертаємось на одну вершину назад і намагаємось продовжити побудову шляху іншим способом.
Задача про n ферзів.
Як n ферзів можна розмістити на шахівниці nxn так, щоб жодні 2 не били один одного? Для розв’язування цієї задачі потрібно визначити n позицій на шахівниці nxn так, щоб жодні 2 позиції не були в одному рядку, в одному стовпчику і в одній діагоналі. Діагональ містить усі позиції з координатами (i,j) такі, що i+j=m для деякого m, або i-j=m (i – номер рядка, j – номер стовпця). Починаємо з порожньої шахівниці. На (k+1)-му кроці намагаємось поставити нового ферзі в (k+1)-му стовпці, причому в перших k стовпцях уже є ферзі. Перевіряємо клітинки в (k+1)-му стовпці, починаючи з верхньої, а саме, шукаємо таку позицію для ферзі, щоб він не був у рядку та діагоналі з тими ферзями, які вже є на шахівниці. Якщо це неможливо, то повертаємось до місця ферзя на попередньому k-му кроці і розміщаємо цього ферзя на наступному можливому рядку в цьому k-му стовпці, якщо такий рядок є. Якщо немає, то повертаємось до ферзя у (k-1)-му стовпці.
12. Каркаси графів. Способи їх побудови.
Нехай G – простий зв’язний граф. Каркасом, або з’єднувальним деревом графа G називають його підграф, який є деревом і містить всі вершини графа G. Нехай граф G має n вершин та m ребер. Для того, щоб отримати каркас, можна використати процедуру вилучення ребер, що належать простим циклам. У такому разі, очевидно, потрібно вилучати ϒ(G)=m-(n-1)=m-n+1 ребер. Число ϒ(G) – називають цикломатичним числом графа G. Побудова каркаса є поширеною задачею. Алгоритм, який полягає у вилученні ребер з простих циклів, не ефективний для комп’ютерної реалізації. Такий алгоритм вимагає ідентифікації простих циклів, що є складною задачею. Ефективним для комп’ютерної реалізації алгоритмом побудови каркаса є послідовний добір ребер у каркас. Це можна здійснити за допомогою обходу графа G як пошуком вглиб, так і пошуком вшир. Під час виконання цих алгоритмів природним чином будують каркас.
Т-ма. Нехай Т – каркас графа G, побудований пошуком вшир, починаючи з вершини R, тоді шлях із а до довільної вершини v в Т є найкоротшим шляхом із а до v у графі G.
Д-ня ґрунтується на аналізі алгоритму пошуку вшир у графі G і пропонується як вправа.
Зауваження. Якщо для побудови дерева найкоротших шляхів від вершини а використати алгоритм Дейкстри (вважаємо, що довжина кожного ребра =1), то отримаємо те саме дерево, що і у разі використання алгоритму пошуку вшир.