Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Полезная методичка

.pdf
Скачиваний:
82
Добавлен:
01.04.2014
Размер:
1.09 Mб
Скачать

à ë 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

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

 

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

QQ

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

Тру о мкость поиск ширину р ф сть 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

о с х ост шихся. З м тим, что м тк , которой пом ч тся н н котором ш л оритм ршин 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

В опис нной ыш проц ур формиру тся м сси 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

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

Соседние файлы в предмете Структуры и алгоритмы обработки данных