![](/user_photo/1144_wzNgE.jpg)
Полезная методичка
.pdfà ë 6
ОСНОВН Е АЛГОРИТМ НА ГРАФАХ
Сущ ст у т мно о л оритмо н р ф х, осно которых л ит т кой п р ор ршин р ф , при котором к я ршин просм - три тся точности о ин р . Поэтому ной ч й я ля тся н хо ни хороших м то о поиск р ф .
Бу м о орить, что
ршин я ля тся пом ч нной, сли он н с н структуру (т. . й тся н котор я м тк );
ршин я ля тся просмотр нной, сли он у л н и структуры п р ый р (ино структур н котор я ршин мо-т хр ниться н сколько р , но с р ными м тк ми и п р о у л ни нной ршины и структуры л т просмотр нной);
6.1.ПОИСК В ГЛУБИНУ В ГРАФЕ
Поиск лу ину о ин и м то о о хо с х ршин (и у )р ф G = (V; E) , который послу ил осно ой ля р р отки ря эфф кти ных л оритмо н р ф х.
Âпроц сс поиск лу ину ршин м прис и ются м тки, которы соот тст уют поря ку о хо ршин р ф , о р р пом ч ются к к " р сны "или "о р тны ". В н ч л р оты л-оритм ршины н им ют м ток, р р н пом ч ны.
Для про р ммной р ли ции л оритм поиск лу ину р - ф у м исполь о ть ст к.
Âпроц сс р оты л оритм к я ршин ключ тся и исключ тся и ст к только о ин р . Он ключ тся ст к посл то о, к к й прис и тся м тк и исключ тся, ко происхо ито р щ ни и этой ршины.
171
Ал оритм поиск лу ину р ф
1.Н которой фиксиро нной ршин s ïðèñ è òñÿ ì òê k = 1 è ðøèí s носится ст к.
2.Пок с ршины н у ут пом ч ны или ст к н ст н т пуст (прои ой т о р щ ни ршину s , и н с р р у пом ч ны) по торять сл ующи йст ия: пусть v ïîñë - íÿÿ í ñ íí ÿ ñò ê ðøèí è k ïîñë íÿÿ ïðèñ î íí ÿ ì òê , òî î ìî í î í è ñèòó öèé:
èì òñÿ í ïîì ÷ ííî ð ðî (v; w) и у ршины w ó èì òñÿ ì òê , òî ð ðî (v; w) пом ч м к к "о р т- но "и про ол м поиск н пом ч нно о р р , инци нтно о ршин v ;
èì òñÿ í ïîì ÷ ííî ð ðî (v; w) è ðøèí w í èì -ò ì òêè (ÿ ëÿ òñÿ íî îé), òî ïðèñ è ì ðøèí w ì òêó ð íóþ k = k + 1 , ïîì ÷ ì ð ðî (v; w) к к " р сно ", носим ршину w ст к и о р щ мся к ш у 2 л оритм ;
ñ ð ð , èíöè íòíû ðøèí v , ó ïîì ÷ íû, òî-
у ля м ршину v è ñò ê ( ðøèí v ст но ится исполь о нной или просмотр нной) и о р щ мся к ш у 2 л оритм .
Т ким о р ом, поиск лу ину и ршины v ключ тся поиск лу ину ля с х но ых ршин, см ных с v .
Оц ним тру о мкость л оритм . К о ключ ни и исклю- ч ни ршины и ст к ыполня тся р мя O(1) . Т к к к к -я ршин пом ч тся и просм три тся только о ин р , толя с й р оты, с я нной со ст ком, тр у тся р мя O(jV j) . К о р ро р ф пом ч тся только о ин р и это тр у тр м ни поря к O(1) , поэтому тру о мкость пом тки р р сть O(jEj) . Сл о т льно, тру о мкость поиск лу ину р фсть O(jV j + jEj) .
Н рис.6.1.1. при ны прим р р ли ции л оритм поиск лу ину. В р ульт т р оты л оритм :
ê î ð ðî ïîì ÷ íî ê ê: 'd' ð ñíî èëè 'o' î ð ò- íî ;
172
|
|
|
|
[2,1] |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
3 2 |
Hn d |
|
|
|
|
|
|
|
|
|||
[1,0] d |
|
HHH |
[3,2] |
|
|
[4,3] |
|
|||||||||
|
|
|
|
|
|
|
|
|
jH |
|
n |
d |
|
|
||
|
1 |
n |
|
|
|
|
|
4 |
|
- 5 |
n |
|||||
|
X |
|
|
|
|
|
|
|
|
|||||||
|
|
XXz |
3 |
|
|
|
|
|
|
|
|
|||||
|
|
o |
|
|
nd |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[5,4] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[2,1] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d |
|
3 2 |
Hn d |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
H |
HH |
[3,2] |
|
|
[4,4] |
|
|||||
[1,0] |
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
d |
|
|
||||||||
|
|
|
|
|
|
|
|
|
jH |
|
n |
|
|
|||
|
1 |
Xn |
|
|
|
|
|
|
|
4 |
|
- 5 |
n |
|||
|
XXz |
|
|
|
: |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
d |
|
|
3 |
no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[5,1] |
|
|
|
|
|
|
|
|
|
|
|
Рис. 6.1.1.: Поиск лу ину р ф .
к я ршин пом ч н сл ующим о р ом: [ м тк ; но- м р ршины, и которой нн я ршин получил м тку ].
Ç ì ÷ íè 6.1.1. Ç ì òèì, ÷òî ìíî ñò î ñ õ ð ð ð ô G , которы ыли пом ч ны к к " р сны " р ульт т поисклу ину и н которой ст рто ой ршины s , о р уют ори нтиро нно корн о р о T ð ô G ñ êîðí ì ðøèí s (этор о ч сто н ы ют корн ым лу инным р ом).
З м ч ни 6.1.2. Поиск лу ину я ля тся сост ной ч стьюл оритм ля ы л ния с я ных компон нт н ори нтиро нно ор ф .
Для это о ост точно ыполнить поиск лу ину, н чин я с прои ольной н ч льной ршины s . Мно ст о пом ч нныхршин, т к мно ст о " р сных"и "о р тных" у о р -уют компон нту с я ности р ф . Если им ются н пом ч нныршины, то н о хо имо н йти о ну и них, и, пол я к ч - ст н ч льной ршины s , по торить ля н опис нный ыш
173
проц сс поиск лу ину (при этом у т получ н но я компо- н нт с я ности р ф ). Проц сс ы л ния с я ных компон нтр ф к нчи тся, ко с ршины у ут пом ч ны.
Тру о мкость л оритм ы л ния с я ных компон нт н ори нтиро нно о р ф сть O(jV j + jEj) .
С я ны компон нты ор р ф н хо ятся т к , к к н ори-нтиро нном р ф , сли р ссм три ть исхо ный ор р ф к к н ори нтиро нный.
З м ч ни 6.1.3. З м тим, что ко ст к носится н кото- р я ршин v , то ст к со р ит посл о т льность ршин, опр ляющую путь и ст рто ой ршины s ршину v .
Т ким о р ом, сли н м н о хо имо н йти путь и н которой ст рто ой ршины s ршину t , òî î ìî í î í è óõ ñèòó öèé:
Н н котором ш ст к н с н ршин t . Òî ñî ð-èìî ñò ê ñòü ïóòü è s t .
Ñò ê ïóñò, ðøèí t îñò ë ñü í ïîì ÷ ííîé. Òî í ñóù ñò ó ò ïóòè è s t .
Бу м пр пол ть, что р ф н списк ми см ности:
type
uk =" el; el=record val:byte; next:uk; end;
var gr:array[1..n] of uk;
Про р ммн я р ли ция л оритм поиск пути и s t мо тыть ыполн н сл ующим о р ом:
174
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw3175x1.jpg)
function poisk(s; t:byte):boolean; var i; l; z; k:byte; dop:uk;
begin
for i := 1 to n do visit[i]:=false; in_stk(top; s);
while (top =6 nil) and (top " :val =6 t) do
{
k := top " :val; dop := gr[k];
while (dop =6 nil) and (visit[dop " :val] )do dop := dop " :next;
if dop = nil then k:=out_stk(top); else
{
visit[k]:=true; in_stk(top; dop " :val);
}
}
if top = nil then result:=false else result:=true; end;
З м ч ни 6.1.4. Поиск лу ину мо т ыть исполь о н ля опр л ния у ольности р ф .
Н помним, что р ф я ля тся у ольным, сли мно ст оршин р ф мо но р ить н по мно ст ( оли) т ким о р ом, что к о р ро со иня т только ршины и р ных по мно ст .
Пусть v н котор я ршин ст к и он отн с н к п р-ой ( торой) ол , то с ршины, которы у ут пом ч ны и нной ршины, у ут отн с ны ко торой (п р ой) ол . Гр фу т я ляться у ольным, сли с о р тны р р у ут со и- нять ршины р ных ол й.
При нный н рис.6.1.2. р ф я ля тся у ольным, т к к к о р тны р р (v1 ; v3); (v5; v2); (v9; v7) со иняют ршины р - ных ол й (1 set и 2 set).
175
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw3176x1.jpg)
|
2(2 set) |
3(1 set ) |
|
|
4(2 set) |
|
|
|
||||||
|
v2 |
m - |
v4 |
m -v7 m |
|
|
|
|||||||
|
> |
kQ |
|
|
|
|
|
|
|
|
I@ |
|
|
|
1(1 set) |
|
Q |
|
|
|
|
|
|
|
|
8(2 set) |
|||
|
oQ 5(1 set) |
|
o 7(1 set) |
|||||||||||
|
|
|
|
@ |
m- |
|
||||||||
v1 m |
|
Qv5 |
m |
|
v9 |
v10 m |
||||||||
S |
|
|
|
|
|
Q |
7 |
|
|
|
||||
o S |
|
|
|
|
|
|
|
|
|
|
||||
|
wS v3 |
|
|
|
v |
|
|
|
Qs |
|
|
|
|
|
|
m |
|
|
|
|
|
m |
|
|
|
||||
|
|
6 |
|
m |
v8 |
|
|
|
||||||
10(2 set) |
9(1 set) |
|
|
6(2 set) |
|
|
|
Рис. 6.1.2.: Опр л ни у ольности р ф (поиск лу ину).
6.2.ПОИСК В ИРИНУ В ГРАФЕ
Ещ о ним м то ом о хо р ф я ля тся поиск ширину. Поиск ширину осно ы тся н исполь о нии оч р и.
Ал оритм поиск ширину р ф
1.Ïðèñ è ì ñò ðòî îé ðøèí s ì òêó key(s) = 0 , носим
î÷ ð ü è ñ÷èò ì ïîì ÷ ííîé.
2.Пок с ршины н пом ч ны и оч р ь н ст н т пустой, по торя м сл ующую посл о т льность йст ий:
пусть п р ым эл м нтом оч р и я ля тся ршин v è S(v)мно ст о н пом ч нных ршин, см ных с ршиной v , òî
(a)к ую ршину w 2 S(v)
ïîì ÷ ì ì òêîé key(w) = key(v) + 1 ;
носим w î÷ ð ü;
помин м, что ршин w пом ч н и ршины v ;
(b)ршину v счит м просмотр нной, у ля м и оч - р и и о р щ мся к ш у 2 л оритм .
К к сл у т и опис ния л оритм , ч м р ньш пом ч тсяршин , т м р ньш он у т просмотр н .
176
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw3177x1.jpg)
Тру о мкость поиск ширину р ф сть O(jV j + jEj) . Выполним поиск ширину ля р ф , при нно о н
рис.6.2.3.. В к ч ст ст рто ой ршины ы р н ршин s = = 1 . К ой ршин пом ч н сл ующим о р ом:[м тк ; ном рршины, и которой нн я ршин получил м тку].
|
|
[1,1] |
|
|
|
[2,2] |
|
|
|
|
|||
|
|
2 |
l |
- |
6 |
|
l |
|
|
||||
|
7 |
|
|
|
|
|
Q |
|
|
||||
|
|
|
|
|
|
|
|
QQQ [2,4] |
|
||||
|
|
[1,1] |
|
|
|
[2,3] |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
sQ |
|
|
1 |
l- |
3 |
l |
-* 5 |
l |
-:7 |
l |
||||||
ZZ |
|
|
|
|
|||||||||
|
|
~Z |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
l |
|
|
|
|
|
|
|
||
|
|
4 |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||||
|
|
[1,1] |
|
|
|
|
|
|
|
|
|
|
Рис. 6.2.3.: Поиск ширину р ф .
З м ч ни 6.2.1. Поиск ширину мо но исполь о ть ля опр л ния компон нт с я ности н ори нтиро нно о р ф . Если р ф G = (V; E) с я н, то л оритм пом тит с ршины,сли р ф н с я н, то у ут пом ч ны с ршины той компо- н нты с я ности, которой прин л ит ст рто я ршин s . В этом случ ля постро ния сл ующ й компон нты с я ностиост точно ять лю ую н пом ч нную ршину и н ч ть поискширину и н .
Ан ло ично осущ ст ля м поиск компон нт с я ности ор р ф , р ссм три я о к к н ори нтиро нный р ф.
З м ч ни 6.2.2. Ан ло ично с корн ым р ом поиск лу-ину мо но опр лить корн о р о поиск ширину, которо по оля т осст но ить путь и н ч льной ршины н- ную.
З м ч ни 6.2.3. Поиск ширину мо т ыть исполь о н ля
поиск н им ньш о (по числу р р) пути и нной ршины
177
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw3178x1.jpg)
о с х ост шихся. З м тим, что м тк , которой пом ч тся н н котором ш л оритм ршин v , сть н им ньш р с- стояни о нной ршины и ст рто ой ршины s .
Пр поло им, что р ф н списк ми см ности (см. поисклу ину р ф ), то про р ммн я р ли ция поиск н и- м ньш о пути р ф и ст рто ой ршины s о с ост ши сяршины мо т ыть ыполн н сл ующим о р ом:
procedure poisk(s:byte); var i; z; k:byte; dop:uk; begin
head:=nil; tail:=nil; for i:=1 to n do
{
visit[i]:=false; path[i]:=0;
}
visit[s]:=true; key[s]:=0; in_ocher(head; tail; s); while head 6= nil do
{
z:=out_ocher(head; tail); dop := gr[z];
while dop =6 nil do
{
if not (visit[dop " :val]) then
{
k := dop " :val; visit[k]:=true; path[k] := z;
key[k] := key[z] + 1; in_ocher(head; tail; k)
}
dop := dop " :next;
}
}
end;
178
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw3179x1.jpg)
В опис нной ыш проц ур формиру тся м сси path (р - м рности n ), path[i] - ном р ршины и которой ыл пом - ч н i - ÿ ðøèí .
Д нный м сси я ля тся к нонич ским пр ст л ни м корн -о о р , соот тст ующ о р сным у м, получ нными р ульт т поиск ширину. Исполь уя этот м сси , н сло но осст но ить н им ньший по числу р р путь и ст рто ой ршины s лю ую ру ую ршину р ф .
З м ч ни 6.2.4. Поиск ширину мо но исполь о ть ля опр л ния у ольности р ф .
Если отн сти прои ольную ршину р ф к п р ому по мно-ст у (пом тить 1), то см ны с н й ршины у ут от- н с ны ко торому по мно ст у (пом тить их 2); см ны с ними к п р ому по мно ст у и т. . Выполни поиск ширину, мы р о ь м мно ст о ршин р ф н по мно ст . Если р ф н я ля тся у ольным, то к кой-то мом нт поис- к мы о н ру им, что ршин , пом ч нн я 1 или 2, ок тся см ной с ршиной с той м ткой.
Р ссмотрим р ф, при нный ни н рисунк , и ыполним поиск ширину ля н о (к ой ршин у м ст ить соот-тст и ном р по мно ст , к которому он отн с н ).
|
2 |
|
|
1 |
|
l |
2 |
|
l |
|
|
|
|
|
|
||||||||
|
|
|
|
@ |
|
|
|
|
|
|
|
|
l |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
2 |
|
l |
|
5 |
|
|
|
8 |
|
|
11 |
l |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
1 |
|
|
@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
2 |
@ |
|
|
|
|
|
|
2 |
|
|
|
|
|
l |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
l |
|
|
|
l |
@ 1 |
|
|
l |
|
|
|
|
l |
|
|
|
|
l |
|
||
1 |
3 |
|
|
|
|
|
|
|
12 l |
l |
|||||||||||||
|
|
6 |
|
|
|
9 |
|
14 |
|||||||||||||||
|
@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
,,, |
|
||
|
@@ |
2 |
|
|
1 |
|
|
|
2 |
|
|
|
|
|
|
||||||||
|
@ |
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, |
|
|
||
|
|
|
|
|
|
l |
7 |
|
|
l |
|
10 l |
|
13 l |
|
|
Н н котором ш л оритм мы пыт мся пом тить с р- шины и ршины с ном ром 8 (эт ршин отн с н к по мно-ст у 2): это ршин с ном ром 11 (относим к по мно ст у
179
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw3180x1.jpg)
1) и ршин с ном ром 9, котор я у ыл отн с н ко торому по мно ст у ( он ыл пом ч н и ршины с ном ром 6). Т ким о р ом ок ы тся, что см ны ршины с ном р - ми 8 и 9 пом ч ны о ной м ткой (2), и поэтому р ф, н я ля тсяу ольным.
Р ссмотрим р ф, при нный ни н рисунк , и ыполнимля н о поиск лу ину.
2
* 2 1
1 HmH Hj 3
2
1 |
2 |
|
m |
|
- |
1 |
|
m |
- |
2 |
m |
|
|
|
|
|||||||
Q |
1 |
|
|
Q |
|
|
|||
Q |
|
|
|
|
Q |
|
|||
Qs |
4 m |
|
|
|
|||||
* |
= QQs |
|
|||||||
m |
|
|
|
|
m |
|
|
m |
|
|
4 |
|
|
|
3 |
|
|||
|
|
|
|
Д нный р ф я ля тся у ольным.
6.3.КРАТЧАЙ ИЙ ПУТ В ГРАФЕ
Ïð ïîëî èì, ÷òî í ð ô G = (V; E) è ê îìó ð ðó (v; w)ð ô G припис н н котор я стоимость c(v; w) > 0 . Òð ó òñÿ í éòè êð ò÷ éøèé ïóòü ð ô G è s t , т. . путь, сумм рн я стоимость р р которо о миним льн .
Н и ол у о ной структурой нных ля поиск кр тч йших пут й р ф с поло ит льными лин ми р р я ля тся куч (приорит тн я оч р ь).
Ал оритм н хо ния кр тч йш о пути р ф
1.До ля м кучу ст рто ую ршину s с приорит том p(s) := 0 .
2.Пок н просмотр н кон чн я ршин t или куч н ст н т пустой, ыполня м сл ующую посл о т льность ш о :
(a)è êó÷è ó ëÿ òñÿ ðøèí v (с миним льным приори- т том p(v) );
180