Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab5_descreet_math.doc.doc
Скачиваний:
9
Добавлен:
18.03.2016
Размер:
4.2 Mб
Скачать

11

Лабораторна робота №5

Тема: Побудова найкоротшого шляху у графі

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

Теоретичні відомості:

Хвильовий алгоритм побудови найкоротшого маршруту у незваженому графі

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

  1. Вершина хн помічається як 0, а інші вважаються не поміченими; і=0.

  2. і=і+1. Помічаються індексом і всі непомічені раніше вершини, в яких є дуги від помічених вершин. Якщо помічена вершина хк, то виконується п.2, інакше, якщо поточним значенням індексу і виявились поміченими які-небудь вершини, то виконується п.1, інакше робиться висновок, що маршрутів з вершини хн в вершину хк немає.

  3. Зворотним проходом по дугам, починаючи від вершини хк, виділяються ті дуги і вершини, які інцидентні виділеним вершинам і різниця між вагами яких рівна 1. Під час руху від вершини хн по відзначеним дугам виявляються побудовані всі найкоротші маршрути до вершини хк (рис. 1).

Приклад

Рис. 1 – Хвильовий алгоритм

Вершина x1 помічена і=0, вершини х2 і х3 помічаються і=1, потім вершини х4 і х5 - помічаються і =2, нарешті, вершина х6к помічається і=3. Зворотній прохід: вершина х6 виділена, різниці ваг пар вершин х46 і x5,x6=1, виділяються дуги 46) і (х56) і вершини х4 і х5. Від цих виділених вершин відповідно їх входам обчислюються різниці ваг пар вершин х42, х43 і х53, які дорівнюють одиниці, і виділяються дуги 24), (хз,х4) і 35) і вершини х2 і х3. Кінцева різниця ваг пар вершин х21 і х34 дорівнює 1, виділяються дуги 12) і 13). Рухаючись від вершини х1 по виділеним дугам, отримуємо три найкоротші маршрути:

Довжини l всіх маршрутів однакові і дорівнюють числу і кроків розповсюдження хвилі (l =і=3).

Хвильовий алгоритм для зваженого графа

Відмітимо особливості побудови найкоротшого маршруту для зваженого графа хвильовим алгоритмом.

  1. Замість одиничної зміни індекса і (номера кроків розповсюдження

хвилі) під час обчислення пройденого маршруту для кожної вершини по­винна використовуватися сума ваг lі,j дуг (xi,xj), які ведуть до цієї вершини від вершини хн. До кожної вершини можуть йти від вершини хн декілька маршрутів, суми довжин дуг по різних маршрутам відмінні. Під час пошуку найкоротшого маршруту необхідно вибирати найменшу суму. Хвилі розповсюдження ваги по різним маршрутам доходять до кожної вершини послідовно, при черговій хвилі необхідно або залишити стару вагу вершини, або замінити її на новий (менший). Тому під час розрахунку ваги вершини хі за рахунок хвилі, що дійшла до неї дузі (xj,xi), обчислення ваги Vi визначається за формулою Vi= min(Vi ,Vj+ly).

  1. Ваги вершин в процесі розповсюдження хвилі можуть змінюватися

неодноразово. При кожній зміні ваги Vi вершини це зменшення необ­хідно передати вершинам виходу хі тобто необхідні спеціальні засоби, які відображують факти отримання вершиною нової ваги і передачу її іншим вершинам. В якості такого засобу використовуються масиви номерів вер­шин, які отримали нову вагу (при кожній зміні ваг номерів вершини вклю­чаються у цей масив, якщо його там не було при передачі ваги - виключається).

Приклад

Крок 0: V1=0.

Крок 1: V2=0+2=2,

V3=0+4=4

Крок 2: V3=min(4,2+1)=3

Крок 0: V1=0.

Крок 1: V2=0+2=2,

V3=0+4=4

Крок 2: V3=min(4,2+3)=4

Формулювання алгоритму.

1. Вершина хн отримує вагу VH=0, її номер вводиться в масив М но­мерів вершин, які змінили вагу. Всі інші вершини, що залишилися, xi отри­мують вагу Vi= і їх номери не попадають в масив М.

2. Якщо масив М порожній, то виконується п.3, інакше вибирається з виключенням з нього чергової вершини xi і перераховуються ваги вершин, які належать виходу G(xi)(Vj=min(Vj,Vi+lij)). Якщо вага Vj зменшується, то номер j включається зі зведенням подібних в М. Знову виконується п.2.

3. Якщо вага VK=, то робиться висновок, що маршрутів з вершини хн до вершини хк нема, інакше виконується процедура виділення дуг, така ж, як і в хвильовому алгоритмі для незваженого графа, за виключенням, що різниця ваг вершин xi і xlj повинні бути рівні lij. Після виділення дуг буду­ються найкоротші маршрути, довжини яких дорівнюють VK.

Приклад

Розглянемо граф зображений на рис. 2.

Починаємо з вершини х6. G-1(x6)={x4,x5}; (l4,6=4)(V6-V4=3), тому дуга (х46) не виділяється. (l5,6=2)=(V6 -V5=2) і дуга (х56) виділяється, одно­часно виділяється вершина х5. Для виділеної вершини х5: G-1(x5)={x3,x4}; (l3,5=4)(V5 – V3=3), дуга (х35) не виділяється; (l4,5=1)=(V5-V4=1), виділені дуга (х45) і вершина х4. Для вершини х4: G-1(x4)={x2,x3}; (l2,4=5)(V4-V2=4), дуга (х24) не виділяється; (l3,4=2)=(V4-V3=2), виділяється дуга(х34) і вершина х3. Для вершини х3: G-1(x3)={x1,x2}; (l1,3=4)(V3-V1=3), то­му дуга (х13) не виділяється; (l2,3=2)=(V3 -V2=2) і дуга (х23) виділяється, одночасно виділяється вершина х4. G-1(x2)={x1};(l1,2=1)=(V2–V1=1), виді­ляється дуга (х12).Побудований найкорот-ший маршрут (хнк) довжиною 8. (хн12)(х23)(х34)(х45)(х56к).

Процес розв'язання можна офор­мити у вигляді такої таблиці:

X1

X2

X3

X4

X5

X6

M

0

1

0

1

4

2,3

0

1

3

6

3,4

0

1

3

5

7

4,5

0

1

3

5

6

9

5,6

0

1

3

5

6

8

6

0

1

2

5

6

8

Наведемо ще один приклад (рис. 3) з коротким записом процесу розв'язання

X1

X2

X3

X4

X5

X6

M

Рисунок 3

0

1

0

5

2

2,3

0

5

2

8

6

3,4,5

0

4

2

8

5

4,5,2

0

4

2

8

5

10

5,2,6

0

4

2

6

5

9

2,6,4

0

4

2

6

5

9

6,4

0

4

2

6

5

9

4

0

4

2

6

5

8

4

0

4

2

6

5

8

На наведеному графі відмітимо вершини отриманими числовими значеннями ваг і виділимо найкоротші маршрути. Отримано два найкоротших маршрути довжиною 8:

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