
- •Лабораторна робота 15
- •Основні теоретичні відомості
- •Контрольне завдання
- •1. Операции над структурами данных
- •1. 1. Представление списков. Сортировка
- •1. 1. 1. Замечания в некоторых альтернативных способах представления списков
- •1. 1. 2. Сортировка списков
- •2. Усовершенствованные методы представления множеств деревьями
- •2. 1. Двоично - троичные справочники
- •3. Основные стратегии решения задач
- •3. 1. Предварительные понятия и примеры
- •4. Поиск с предпочтением: эвристический поиск
- •4. 1. Поиск с предпочтением
- •Список литературы
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ |
||||
ХЕРСОНСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ |
||||
Кафедра інформаційних технологій |
||||
|
||||
ЗВІТ З ЛАБОРАТОРНОЇ РОБОТИ 15 |
||||
|
з дисципліни „Логічне програмування” |
|||
|
студента третього курсу денної форми навчання |
|||
|
напряму підготовки 6.050102 “Комп’ютерна інженерія” |
|||
|
з професійною орієнтацією “Комп’ютерні системи та мережі” |
|||
|
галузі знань 0501 “Інформатика та обчислювальна техніка” |
|||
|
факультету кібернетики |
|||
|
Бойко Тараса |
|||
|
||||
Дата проведення лабораторної роботи: |
|
«11» грудня 2012р. |
||
Дата подання звіту за графіком: |
|
«18» грудня 2012р. |
||
|
|
|
||
Дата подання звіту студентом: |
|
____________________ |
||
Підпис студента: |
|
____________________ |
||
|
|
|
||
Позначка викладача про результати та дату перевірки звіту: |
|
____________________ |
||
|
|
|
||
Відомості про викладача, що виконував перевірку звіту (прізвище, ініціали, посада, науковий ступінь, вчене звання): |
|
Веселовська Г.В., доцент кафедри інформаційних технологій ХНТУ, к.т.н., доцент |
||
|
|
|
||
Підпис викладача, що виконував перевірку звіту : |
|
_____________________ |
||
|
||||
Херсон – 2012р. |
Лабораторна робота 15
Тема: Типові приклади застосування логічного програмування мовою Пролог. Частина 3. Операції над структурами даних, удосконалені методи подання множин деревами, основні стратегії розв'язування задач та пошук із перевагою (еврістичний пошук) у Пролог-програмах.
Мета − опановування наступних питань, покладених в основу типових прикладів логічного програмування мовою Пролог:
− можливості різноманітного подання та сортування списків;
− подання множин двійковими деревами;
− двійкові довідники (додавання та видалення елементів);
− відображення дерев;
− графи;
− двійково-трійкові довідники;
− AVL-дерево (наближено-збалансоване дерево);
− попередні поняття та приклади стосовно стратегій пошуку, стратегії пошуку в глибину та ширину, особливості пошуку в графах (технологій, оптимальності та складності пошуку), пошук із перевагою (зокрема, стосовно головоломки “гра у вісім” і в застосуванні до планування виконання задач).
Основні теоретичні відомості
Структури даних та операції над ними, що найбільш часто використовуються в типових прикладах застосування логічного програмування мовою Пролог, представлено в таблиці 15.1.
Таблиця 15.1
Структури даних та операції над структурами даних,
які покладено в основу типових прикладів
застосування логічного програмування мовою Пролог
№ з/п |
Структури даних |
Операції над структурами даних |
1 |
Списки |
− різні варіанти подання списків; − сортування списків (методом “бульбашки”, зі вставками, швидке); − обчислення ефективності наведених вище процедур. |
2 |
Подання множин двійковими деревами та двійковими довідниками |
− пошук елементу в дереві; − додавання елементу до дерева; − видалення елементу з дерева; − додавання елементу в якості листа або кореня дерева; − отримання збалансованих дерев та його зв’язок із ефективністю указаних вище операцій; − відображення дерев. |
3 |
Графи |
− подання графів; − пошук шляху в графі; − побудова остовного дерева. |
Переглянувши главу 9 навчального посібника [2], ви зможете дізнатися про особливості реалізації засобами Прологу указаних вище структур даних і відповідних операцій над ними.
Переглянувши главу 10 навчального посібника [2], ви зможете вивчити особливості реалізації засобами Прологу таких понять, як 2-3-дерева та AVL-дерева, що є наочними прикладами збалансованих дерев.
Збалансовані та наближено-збалансовані дерева гарантують ефективне виконання трьох основних операцій над деревами: пошук, додавання та видалення елементу.
Час виконання вказаних операцій є пропорційним log n, де n – кількість вершин дерева.
Простір станів є формалізмом для подання задач.
Простір станів – направлений граф, вершини якого відповідають проблемним ситуаціям задач, а дуги – можливим ходам.
Конкретна задача визначається стартовою вершиною та цільовою умовою.
Розв’язку задачі відповідає шлях у графі.
Таким чином, розв’язування задачі зводиться до пошуку шляху в графі.
Оптимізаційні задачі моделюються приписуванням кожній дузі простору станів деякого вагового коефіцієнту.
Є дві основних стратегії пошуку в просторі станів – пошук у глибину та пошук у ширину.
Пошук у глибину програмується найбільш легко, проте піддається зациклюванням.
Існують два простих методи запобігання зациклюванню: обмежити глибину пошуку та не допускати дублювання вершин.
Реалізація пошуку в ширину є більш складною, оскільки вимагається зберігати множину кандидатів.
Дана множина може бути з легкістю подана списком списків, але більш економним є подання її у вигляді дерева.
Пошук у ширину завжди знаходить в якості першого рішення найбільш коротке рішення, що не є справедливим по відношенню до стратегії пошуку в глибину.
У випадку обширних просторів станів, існує небезпека комбінаторного вибуху.
Обидві базові стратегії пошуку в просторі станів погано пристосовані для боротьби з указаною проблемою.
У таких випадках, потрібно керуватися еврістиками.
Переглянувши главу 11 навчального посібника [2], ви зможете опанувати наступні поняття: простір станів; стартова вершина; цільова умова; розв’язувальний шлях; стратегія пошуку; пошук у глибину та ширину; еврістичний пошук.
Для оцінювання ступеня віддаленості деякої вершини простору станів від найближчої цільової вершини, можна використовувати еврістичну інформацію.
Переглянувши главу 12 навчального посібника [2], ви зможете дізнатися про числові еврістичні оцінки.
Еврістичний принцип пошуку з перевагою направляє процес пошуку таким чином, що для продовження пошуку завжди обирається та вершина, що є найбільш перспективною з точки зору еврістичної оцінки.
Також у главі 12 запрограмовано алгоритм пошуку, оснований на вказаному вище принципі та представлений у літературі як А*-алгоритм.
Для того, щоб розв’язати конкретну задачу за допомогою А*-алгоритму, необхідно визначити простір станів та еврістичну функцію.
Для складних задач, найбільш важким моментом є підбирання гарної еврістичної функції.
Теорема про припустимість допомагає встановлювати, чи завжди той А*-алгоритм, який використовує деяку конкретну еврістичну функцію, буде знаходити оптимальний розв’язок задачі.