ASD w6

background image

Pseudokody do wyk ladu 6

31 marzec 2011

Problem otoczki wypuk lej

Otoczka wypuk la zbioru punkt´

ow Q,

|Q| ≥ 3, to najmniejszy

wieloka

,

t wypuk ly P taki, ˙ze ka˙zdy punkt ze zbioru Q le˙zy albo

na brzegu P albo w jego wne

,

trzu

Algorytm: (Grahama)

– niech p

0

be

,

dzie punktem w Q o minimalnej wsp´

o lrze

,

dnej y

(lub w przypadku remisu, pierwszym takim punktem z lewej

strony)

– niech (p

1

, p

2

, . . . , p

m

) be

,

da

,

pozosta lymi punktami Q

posortowanymi ze wzgle

,

du na wsp´

o lrze

,

dna

,

ka

,

towa

,

wzgle

,

dem

p

0

w kierunku przeciwnym do ruch wskaz´

owek zegara; je´

sli

wie

,

cej ni˙z jeden punkt ma taka

,

sama

,

wsp´

o lrze

,

dna

,

ka

,

towa

,

,

usu´

n wszystkie opr´

ocz po lo˙zonego najdalej od p

0

Wsp´

o lrze

,

dna ka

,

towa punktu p

i

wzgle

,

dem punktu pocza

,

tkowego

p

0

, to ka

,

t wektora p

i

− p

0

w biegunowym uk ladzie wsp´

o lrze

,

dnych

Typeset by

AMS-TEX

1

background image

2

– od l´

o˙z pierwsze trzy punkty na stos S

PUSH (S, p

0

)

PUSH (S, p

1

)

PUSH (S, p

2

)

– stos S zawiera kandydat´

ow na wierzcho lki otoczki; ka˙zdy

punkt z wej´

sciowego zbioru Q jest raz wk ladany na stos,

a punkty nie be

,

da

,

ce wierzcho lkami otoczki sa

,

w ko´

ncu

ze stosu zdejmowane

for i

3 to m

do while ka

,

t utworzony przez punkty NEXT-TO-TOP (S),

TOP (S) i p

i

nie stanowi skre

,

tu w lewo

do POP (S)

PUSH(S, p

i

)

gdzie funkcja NEXT-TO-TOP(S) zwraca element po lo˙zony o jedno
miejsce poni˙zej szczytu stosu, bez zmiany stosu S

– po zako´

nczeniu algorytmu stos S zawiera wy la

,

cznie

wierzcho lki otoczki w przeciwnej do ruch wskaz´

owek

zegara kolejno´

sci ich wyste

,

powania na brzegu

return S

background image

3

Przeszukiwanie grafu wszerz

Dany jest graf G = (V, E) wraz z wyr´

o˙znionym wierzcho lkiem s,

zwanym ´

zr´

od lem

Badamy krawe

,

dzie grafu G w celu znalezienia ka˙zdego wierzcho lka,

kt´

ory jest osia

,

galny z s

Przy okazji obliczamy odleg lo´

c (najmniejsza liczba krawe

,

dzi) od

´

zr´

od la s do wszystkich osia

,

galnych wierzcho lk´

ow

W konsekwencji mo˙zna otrzyma´

c drzewo (przeszukiwania wszerz)

o korzeniu w s, kt´

ore zawiera wszystkie osia

,

galne wierzcho lki grafu

Zasada przeszukiwania wszerz: wierzcho lki w odleg lo´

sci k od

´

zr´

od la sa

,

odwiedzane przed wierzcho lkami w odleg lo´

sci k + 1

Idea algorytmu

* graf G = (V, E) jest reprezentowany za pomoca

,

listy sa

,

siedztwa.

Niech dla ka˙zdego u

∈ V elementami A[u] sa

,

wszystkie

wierzcho lki v takie , ˙ze

{u, v} ∈ E, tj. A[u] ,,sk lada” sie

,

ze

wszystkich wierzcho lk´

ow sa

,

siaduja

,

cych z u w grafie G

* z ka˙zdym wierzcho lkiem zwia

,

zane sa

,

naste

,

puja

,

ce zmienne

kolor[u] – zapamie

,

tuje kolor wierzcho lka u

p[u] – zapamie

,

tuje poprzednika wierzcho lka u

d[u] – odleg lo´

c od korzenia s

zr´

od la) do wierzcho lka u

* pocza

,

tkowo wszystkie wierzcho lki (z wyja

,

tkiem s) sa

,

bia le

for ka˙zdy u

∈ V \ {s}

do kolor[u]

bia ly

d[u]

← ∞

p[u]

NIL

background image

4

ponadto

kolor[s]

szary

d[s]

0

p[s]

NIL

* ka˙zdy nowo napotkany wierzcho lek staje sie

,

odwiedzony

a jego kolor staje sie

,

szary (potem czarny); wierzcho lki

szare sa

,

wierzchokami odwiedzonymi, kt´

orych listy sa

,

siedztwa

nie zosta ly jeszcze w ca lo´

sci przejrzane

* wierzcho lki szare pamie

,

tane sa

,

w kolejce Q typu FIFO

Q

← ∅

ENQUEUE(Q, s)

* dop´

oki kolejka nie jest pusta, badamy sa

,

siad´

ow pierwszego

elementu kolejki (nale˙zy go usuna

,

´

c z kolejki): je˙zeli jego

sa

,

siad, powiedzmy v nie by l jeszcze odwiedzony to

kolorujemy go na szaro, uaktualniamy warto´

sci wektor´

ow d[v],

p[v] i wstawiamy go do kolejki

while Q

̸=

do u

DEQUEUE(Q)

for ka˙zdy v

∈ A[u]

do if kolor[v] = bia ly

then kolor[v]

szary

d[v]

← d[u] + 1

p[v]

← u

ENQUEUE(Q, v)

* kiedy wszystkie wierzcho lki z listy sa

,

siedztwa wierzcho lka u

sa

,

ju˙z przeanalizowane, to u jest kolorowany na czarno

kolor[u]

czarny

background image

5

Algorytm: (BFS – Breadth-First Searching)

BFS(G, s)

for ka˙zdy u

∈ V \ {s}

do kolor[u]

bia ly

d[u]

← ∞

p[u]

NIL

kolor[s]

szary

d[s]

0

p[s]

NIL

Q

← ∅

ENQUEUE(Q, s)
while Q

̸=

do u

DEQUEUE(Q)

for ka˙zdy v

∈ A[u]

do if kolor[v] = bia ly

then kolor[v]

szary

d[v]

← d[u] + 1

p[v]

← u

ENQUEUE(Q, v)

kolor[u]

czarny

SCIEZKA (G, s, v)

if v = s

then wypisz s
else if p[v] = NIL

then wypisz ,,nie ma ´

scie˙zki od s do v

else SCIEZKA (G, s, p[v])

wypisz v


Wyszukiwarka

Podobne podstrony:
nw asd w6
ASD W6
nw asd w6
W6 Technika harmonogramów i CPM
w6 Czołowe przekładanie walcowe o zebach srubowych
ASD od z Sawanta II Wykład17 6
AM1 W6
ulog w6 E
ZP W6 Planowanie
ASD 2012 test6
Metody numeryczne w6
nw asd w13
teoria asd, stud, II semestr, ASD
Kosmetologia lecznicza W6
w6  11

więcej podobnych podstron