Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LK-12.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
375.69 Кб
Скачать

3.4 Пошук в глибину

При використанні формулювання задачі у вигляді простору станів може бути передбачено багато підходів до пошуку шляху вирішення. Двома основними стратегіями пошуку є пошук в глибину і пошук в ширину. У цьому розділі розглядаються стратегія пошуку в глибину і її варіант, званий ітеративним поглибленням.

Почнемо розробку даного алгоритму і його варіантів з аналізу описаної нижче простої ідеї.

Щоб знайти шлях вирішення Sol від заданого вузла N до деякого цільового вузла, необхідно реалізувати в програмі наступні операції:

• якщо N - цільовий вузол, то Sol = [N];

• інакше, якщо існує вузол-наступник N1 вузла N, такий, що мається шлях Sol від вузла N1 до цільового вузла, то Sol = [N | Sol].

Це формулювання може бути переведена на мову Prolog наступним чином:

Лістинг 12.1 ­– ­ Знаходження шляху від заданого вузла

solve(N,[N]) :-

goal ( N).

solve(K, [K | Soll]) :-

S < N , N1,

Solve (N, Soll)

По суті, ця програма являє собою реалізацію стратегії пошуку в глибину. Її називають пошуком в глибину з урахуванням того, в якому порядку розглядаються варіанти в просторі станів. Кожен раз, коли програмі пошуку в глибину надається можливість продовжити пошук шляхом переходу до одного з декількох вузлів, вона завжди віддає перевагу вибрати з них самий глибокий. Найглибшим вузлом є той, який розташований далі всіх, від початкового вузла. На рис. 12.4 показано, в якому порядку відвідуються вузли. Цей порядок відповідає трасуванні виконання програми Prolog при пошуку відповіді на наступне питання: ?- solve (a, Sol).

Рисунок 12.3 – Пошук в глибину

Пошук в глибину найбільшою мірою прийнятний для рекурсивного стилю програмування мовою Prolog. Причина цього полягає в тому, що сама система Prolog при виконанні мети перевіряє варіанти за принципом пошуку в глибину.

3.5 Пошук в ширину

На відміну від стратегії пошуку в глибину, стратегія пошуку в ширину передбачає відвідання в першу чергу тих вузлів, які є найближчими до початкового вузла. Це призводить до здійснення процесу пошуку, який, як правило, розвивається більшою мірою в ширину, ніж у глибину (рис. 12.5).

Рисунок 12.4 –Пошук в ширину

Складання програми пошуку в ширину складніше порівняно з пошуком в глибину. Причина такого ускладнення полягає в тому, що необхідно супроводжувати цілий безліч можливих альтернативних вузлів, а не розглядати тільки один вузол, як при пошуку в глибину. Таке безліч можливих вузлів являє собою цілу грань дерева пошуку, яка поступово зсувається вниз. Але навіть така безліч вузлів є недостатнім, якщо в процесі пошуку необхідно також виділити шлях до вирішення. Тому замість супроводу безлічі можливих вузлів доводиться супроводжувати безліч можливих шляхів.

Для представлення безлічі можливих шляхів буде використовуватися наступний спосіб: це безліч буде представлено як список шляхів, а кожен шлях - як список вузлів у зворотному порядку. Це означає, що голова а списку вузлів являє собою вузол, сформований в саму останню чергу, а останнім елементом у списку є початковий вузол пошуку.

Для здійснення пошуку в ширину по заданому безлічі можливих шляхів необхідно виконати наступні дії:

• якщо голова першого шляху являє собою цільовий вузол, то вважати цей шлях вирішенням завдання;

• в іншому випадку видалити перший шлях з безлічі можливих шляхів і сформувати безліч, що складається з усіх можливих однокрокових продовжень цього шляху, додати цю безліч продовжень до кінця множини можливих шляхів і виконати пошук в ширину на цій модифікованій множині.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]