Реферат на тему:

Пошук шляхів у графі

Користуючись методами, викладеними в попередньому розділі, можна
визначити зв’язність (тобто наявність або відсутність шляху) між
будь-якими вершинами vi і vj заданого графа G =(V,E ). Однак часто буває
необхідним не просто встановити існування шляху між заданими вершинами,
але й знайти послідовність вершин і ребер (шлях), що веде з vi у vj.

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

Двома класичними методами розв’язання цих проблем є: метод або алгоритм
пошуку (обходу графа) вшир та метод або алгоритм пошуку (обходу графа)
вглиб.

Сформулюємо постановку проблеми пошуку та обидва методи її розв’язання.

Нехай задано граф G =(V,E ), VO (V ( множину початкових вершин і VK (V (
множину кінцевих (заключних, цільових) вершин графа G. Необхідно знайти
шлях з деякої вершини v (VO в одну з вершин w (VK , тобто знайти
послідовність ребер (vi,vi +1)(E, і =1,2,…,t (1 таку, що v1= v і
vt= w.

Зокрема, множина початкових вершин VO і/або множина кінцевих вершин VK
можуть містити тільки по одній вершині. Такі вершини природно називати
початковою і кінцевою вершинами графа G.

Для опису алгоритмів нам знадобляться три списки ребер ВІДКР, ЗАКР і
РОЗВ. Крім того, для вершини v (V через S  (v) будемо позначати множину
всіх вершин w (V таких, що в графі G існує ребро (v,w)(E. Такі вершини w
часто називають синами вершини v, а множину S (v) ( множиною синів
вершини v.

Для зручності додамо до множини вершин V графа G «порожню» вершину p, а
до множини ребер — «порожні» ребра виду (р,v), де v (VO. При визначенні
шляху з VO у VK «порожні» ребра не враховуються.

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

Алгоритм пошуку вшир / вглиб.

1. Всі «порожні» ребра розмістити у списку ВІДКР (у довільному порядку).

2. Якщо ВІДКР = (, то РОЗВ = ( (тобто сформульована задача не має
розв’язку) і алгоритм завершує свою роботу.

3. Закрити перше ребро (v,w) з ВІДКР, тобто перенести ребро (v,w) зі
списку ВІДКР у список ЗАКР.

4. Якщо вершина w закритого ребра є кінцевою вершиною (w(VK), то шуканий
список РОЗВ (тобто шуканий шлях з VO у VK) міститься серед ребер списку
ЗАКР і може бути виділений з нього послідовно, починаючи з останнього
закритого ребра шляху. Зауважимо, що при побудові результуючого шляху
для кожного з ребер (v,w) списку ЗАКР необхідно вибирати
ребро-попередника (u,v) так, що воно є першим ребром з кінцем v у списку
ЗАКР. Алгоритм завершує свою роботу.

У противному разі (w (VK) перейти до пункту 5.

5. Визначити S (w) ( множину синів вершини w останнього закритого ребра,
а також множину ребер R (w)={(w,z) | z (S (w) }.

Розмістити у списку ВІДКР усі ребра з множини R  (w) \ (ВІДКР ( ЗАКР)
після / перед усіх ребер, що вже містяться в цьому списку.

6. Перейти до пункту 2.

Відмінність між обома алгоритмами пошуку знаходиться в позиції 5 і
полягає в тому, що в алгоритмі пошуку вшир необхідно розміщувати
відповідні ребра після, а в алгоритмі пошуку вглиб ( перед усіма
ребрами, що знаходяться в списку ВІДКР.

Для наведених алгоритмів вживають скорочені назви АПШ і АПГ (відповідні
англійські назви ( BFS (breadth first search) i DFS (depth first
search)).

Таким чином, для АПШ список ВІДКР є чергою, тобто такою сукупністю
елементів, в якій нові елементи розміщуються в кінці сукупності, а
елемент, що «обслуговується» (закривається), вибирається з голови
(початку) цієї сукупності. У той час для АПГ список ВІДКР є так званим
стеком, тобто сукупністю, в якій елементи, що додаються до сукупності, і
елементи, що відбираються для «обслуговування», розміщуються тільки на
початку сукупності — у верхівці стеку (за принципом: “останній прийшов
— перший обслуговується”).

Приклад 3.8. Розглянемо дію алгоритму пошуку вшир для графа, зображеного
на рис.3.6 (див. таблицю 3.1). Вважаємо, що VO= {3} i VK= {11}.

Рис.3.6

Кожний рядок таблиці описує результат виконання одного циклічного кроку
(позиції 2(6) алгоритму. Оскільки список ЗАКР тільки поповнюється і на
кожному кроці поповнюється тільки одним ребром, то в таблиці записуємо
лише це ребро (не повторюючи всі елементи, які ввійшли до складу ЗАКР на
попередніх кроках). Нагадаємо також, що ребра (v,w) і (w,v) збігаються.

Таблиця 3.1.

Алгоритм пошуку вшир (АПШ)

Крок ВІДКР ЗАКР w R (w)

0 (p,3)

1 (3,2),(3,4) (p,3) 3 (3,2),(3,4)

2 (3,4),(2,1),(2,4),(2,5),(2,6) (3,2) 2 (2,1),(2,4),(2,5),(2,6)

3 (2,1),(2,4),(2,5),(2,6),(4,5),(4,8) (3,4) 4 (4,5),(4,8)

4 (2,4),(2,5),(2,6),(4,5),(4,8) (2,1) 1

5 (2,5),(2,6),(4,5),(4,8) (2,4) 4

6 (2,6),(4,5),(4,8),(5,8) (2,5) 5 (5,8)

7 (4,5),(4,8),(5,8),(6,7) (2,6) 6 (6,7)

8 (4,8),(5,8),(6,7) (4,5) 5

9 (5,8),(6,7),(8,7),(8,9) (4,8) 8 (8,7),(8,9)

10 (6,7),(8,7),(8,9) (5,8) 8

11 (8,7),(8,9) (6,7) 7 (7,12),(7,11),(7,9),(7,10)

12 (8,9),(7,12),(7,11),(7,9),(7,10) (8,7) 7

13 (7,12),(7,11),(7,9),(7,10) (8,9) 9

14 (7,11),(7,9),(7,10),(12,10),(12,11) (7,12) 12 (12,10),(12,11)

15 (7,9),(7,10),(12,10),(12,11) (7,11) 11

Алгоритм завершує свою роботу на п’ятнадцятому кроці. Аналізуючи список
ребер ЗАКР від його кінця до початку, будуємо список РОЗВ, тобто
знаходимо шуканий шлях від вершини 3 у вершину 11:
3,(3,2),2,(2,6),6,(6,7),7,(7,11),11. Довжина цього шляху ( 4.

Радимо побудувати аналогічну таблицю для алгоритму пошуку вглиб шляху з
вершини 3 у вершину 11 і порівняти дію та результати обох алгоритмів.

Список літератури

1. Харари Т. Теория графов.- М.,1973.

2. Лекции по теории графов / Емеличев В.А., Мельников О.И., Сарванов
В.И., Тышкевич Р.И.- М., 1990.

3. Зыков А.А. Основы теории графов.- М., 1987.

4. Оре О. Теория графов.- М., 1980.

5. Свами М., Тхуласираман К. Графы, сети, алгоритмы.- М., 1984.

6. Уилсон Р. Введение в теорию графов.- М., 1977

7. Кристофидес Н. Теория графов. Алгоритмический подход.- М.,1978

8. Рейнгольд Э., Нивергельт Ю., Део Н. Комбинаторные алгоритмы.-М.,1980

3

2

1

4

5

6

7

8

9

10

11

12

Похожие записи