+ All Categories
Home > Documents > Drumuri în grafuri orientate.doc

Drumuri în grafuri orientate.doc

Date post: 12-Nov-2015
Category:
Upload: andrey-andy
View: 95 times
Download: 6 times
Share this document with a friend
40
MINISTERUL EDUCAȚIEI,CERCETĂRII,TINERETULUI ȘI SPORTULUI COLEGIUL TEHNIC MĂTĂSARI ATESTAT PROFESIONAL Prof.Îndrumător: Săceanu Ion Elev:Vâlsan Alina Corina Profil:Matematica-Informatică Colegiul Tehnic Mătăsari 1
Transcript

Grafuri Orientate

MINISTERUL EDUCAIEI,CERCETRII,TINERETULUI I SPORTULUI

COLEGIUL TEHNIC MTSARI

ATESTAT PROFESIONALProf.ndrumtor:

Sceanu IonElev:Vlsan Alina Corina

Profil:Matematica-Informatic

Colegiul Tehnic Mtsari

2015MINISTERUL EDUCAIEI,CERCETRII,TINERETULUI I SPORTULUI

COLEGIUL TEHNIC MTSARI

DRUMURI N GRAFURI ORIENTATE

Prof.ndrumtor:

Sceanu IonElev:Vlsan Alina Corina

Profil:Matematica-Informatic

Colegiul Tehnic Mtsari

2015CUPRINSArgument.4Grafuri orientate 5Drumuri minime i maxime n grafuri orientate7 Altgoritmul lui Dijkstra9Altgoritmul lui Roy-Floid13Drumuri maxime n grafuri orientate17Grafuri euleriene20 Grafuri hamiltoniene25Bibliografie27Argument

Informatica este tiina procesrii sistematice a informaiei. n special a procesrii cu ajutorul calculatoarelor. Istoric, informatica s-a dezvoltat ca tiin din matematic, n timp ce dezvoltarea primelor calulatoare i are originea n electrotehnic i telecomunicaii. De aceea, calculatorul reprezint doar dispozitivul pe care sunt implementate conceptele teoretice. Informaticianul olandez Edsger Dijkstra afirm: 'n Informatic ai de-a face cu calculatorul, cum ai n astronomie cu telescopul'.

Informatica teoretic se ocup cu studiul 'teoriei limbajelor formale', respectiv automatic, 'teoria computaional i complexitii','criptologie', 'logic','teoria grafurilor' punnd bazele pentru construirea compilatoarelor pentru limbajele de programare i pentru formalizarea problemelor din matematic. Ea este, prin urmare, coloana vertebral a informaticii.

Am ales aceast tem deoarece sunt pasionat de informatic i am studiat la orele de informatic grafurile.Grafuri orientate

Noiuni de bazUn graf orientat G este format dintr-o pereche ordonat de mulimi G= (X, U). ca i n cazul grafurilor neorientate, X este mulimea vrfurilor sau nodurilor grafului. Mulimea U este format din perechi ordonate de elemente distincte din X, numite arce. Orice arc u U va fi notat prin u= (x, y) cu x, yX i xy.

Spunem c vrful x este extremitatea iniial a arcului u, iar vrful y este extremitatea final a arcului u. Spre deosebire de cazul grafurilor neorientate, notaiile (x, y) i (y, x) vor desemna doua arce diferite.

Dac graful G conine arcul (x, y) vom spune c vrfurile x i y sunt adiacente n G i amndou sunt incidente cu arcul (x, y). Deci, un graf orientat G poate fi imaginat c o mulime de vrfuri, dintre care unele sunt unite dou cte dou prin arce. Un graf orientat poate fi desenat n plan reprezentnd vrfurile sale prin puncte i arcele prin sgei care sunt orientate de la extremitatea iniial ctre extremitatea final a fiecrui arc.

Graful orientat G= (X, U) unde:

X= {1,2,..., 8} i U= {(1,2), (2,3), (3,1), (3,2), (2,4), (4,5), (3,5), (6,8), (8,7), (7,8), (7,6)} se reprezint ca n figur:

2 u5 4

u1

1

u3 u4

u7

u2

3

u6

5

Vom nota arcele aa cum se indic n figur , adic u1=(1,2), u2=(3,1),., u11=(6,8).

Gradul exterior al unui vrf x, notat prin d+(x), este numrul arcelor de form (x,y) cu yX. Gradul exterior al unui vrf x, notat prin d-(x),este numrul arcelor de form (y,x) cu yX.

Un graf parial al unui graf orientat G=(X,U) se definete n acelai mod ca i n cazul neorientat. El este un graf G1=(X,V) unde VU, deci este graful G nsui sau se obine din G prin suprimarea anumitor arce.

i definiia unui subgraf al unui graf orientat G=(X,U) este asemntoare cu cazul neorientat.Prin definiie , un subgraf al lui G este un graf H=(Y,V), unde YX, iar arcele din V sunt toate arcele din U care au ambele extremiti n mulimea de vrfuri Y.

Deci un subgraf H al unui graf orientat G este graful G nsui sau se obine din G prin suprimarea anumitor vrfuri i a tuturor arcelor incidente cu acestea .

Vom spune c subgraful H este indus sau generat de mulimea de vrfuri Y.

Astfel,subgraful grafului G din figura ,indus de mulimea de vrfuri Y1 ={1,2,4,5} are ca mulime de arce mulimea V1 ={(1,2), (2,4), (4,5)},iar subgraful indus de mulimea de vrfuri Y2 ={6,7,8} are mulimea arcelor V2={(7,6),(6,8),(7,8),(8,7)}.

Un graf orientat este complet dac oricare dou vrfuri sunt adiacente.

n timp ce n cazul neorientat un graf complet cu n vrfuri este unic determinat, n cazul orientat exista mai multe grafuri complete cu un numr dat de vrfuri.Ele se deosebesc fie prin orientarea arcelor , fie prin faptul c ntre dou vrfuri oarecare exista un arc sau dou arce de sensuri contrare.

Un lan al unui graf orientat se definete ca un ir de arce:

L=[u1,u2,..,up]

Cu proprietatea c oricare arc uI din acest ir are comun o extremitate cu ui-1 , iar cealalt extremitate este comun cu ui+1 pentru orice i=1,...,p-1.

Dac toate arcele lanului L au aceeai orientare ,care este dat de sensul deplasrii de la x0 ctre xr lanul se numete drum.

Deci un drum ntr-un graf orientat G=(X,U) este un ir de vrfuri notat :

D=(x0,x1,...,xr)

cu proprietatea c (x0,x1), (x1,x2), .... , (xr-1,xr)U, deci sunt arce ale grafului.

Vrfurile x0 i xr se numesc extremitile drumului D. Dac vrfurile x0 ,x1 , ... , xr sunt distincte dou cte dou, drumul D se numete elementar. Din aceste definiii rezult c orice drum este i lan , dac l privim ca un ir de arce.

Un drum D=(x0, ... ,xr) poate fi interpretat ca fiind traseul unei daplasari pe arcele grafului n ordinea (x0,x1), (x1,x2), ... , (xr-1,xr).

De aceea drumul D de extremiti x0 i xr , se mai spune c este un drum de la x0 la xr .Dac x0=xr i toate arcele (x0,x1), (x1,x2), ... ,(xr-1,xr) sunt distincte dou cte dou, drumul D se numete circuit.

Dac toate vrfurile circuitului, cu excepia primului i a ultimului vrf, sunt distincte dou cte dou, circuitul se numete elementar.

Noiunile de conexitate i de componenta conexa a unui graf orientat sunt similare cu cele de la grafurile neorientate , utiliznd noiunea de lan din cazul grafurilor orientate.

Astfel, un graf orientat G se numete conex dac pentru oricare dou vrfuri distincte x i y exist un lan de extremiti x i y n G. O component conexa C a unui graf orientat G se definete ca fiind un subgraf conex maximal al lui G , deci nu exist nici un lan care s uneasc un vrf din C cu un vrf care nu aparine lui C.

DRUMURI MINIME I MAXIME N GRAFURI ORIENTATE

O alt noiune de conexitate care apare numai n cazul grafurilor orientate este aceea de conexitate tare: Un graf orientat G se numete tare conex dac pentru oricare dou vrfuri distincte x i y ale lui G exist un drum (x, ... ,y) de la x la y .Deoarece putem schimba rolul lui x i y uneori definiia unui graf tare conex se bazeaz pe existena unui drum de la x la y i a unui drum de la y la x pentru oricare dou vrfuri distincte x i y ale grafului.

Pentru grafurile orientate conexitatea tare implica conexitatea simpl , adic orice graf tare conex este i conex.

O component tare conexa a unui graf orientat G se definete ca fiind un subgraf tare conex maximal C al lui G , deci nu exist drumuri care s uneasc n ambele sensuri un vrf x din C cu un vrf y al lui G care nu aparine lui C, pentru orice x i y cu proprietile menionate. Rezult c orice graf tare conex are o singur componenta tare conexa care conine toate vrfurile grafului.

S considerm o funcie l definit pe mulimea U a arcelor unui graf orientat G=(X,U) cu valori numere reale pozitive:

l :Ux xR, x 0}.

Aceast funcie asociaz oricrui arc u al grafului lungimea sa notata l(u). Dac =(x, ... ,y) este un drum de la x la y n graful G, vom defini lungimea drumului n mod aditiv, prin egalitatea:

l()=u l(u),

adic lungimea unui drum este egal cu suma lungimilor arcelor sale.

Un drum de la x la y se va numi drum minim ( respectivmaxim)lungimea drumului este minimul ( respectiv maximul) lungimilor drumurilor de la x la y , presupunnd c mulimea acestor drumuri este nevida. Totui ntre aceste dou noiuni de drum minim i de drum maxim exist o deosebire importanta .

Orice drum minim este elementar , deoarece n caz contrar dac un vrf se repet n irul care definete drumul , subdrumul cuprins ntre dou apariii consecutive ale unui vrf poate fi eliminat i obinem un drum de lungime strict mai mic dect drumul presupus minim , ceea ce este absurd.

Deoarece mulimea drumurilor elementare de la x la y este finit pentru oricare dou vrfuri distincte x i y , rezult c un drum minim de la x la y va exista ntotdeauna pentru oricare dou vrfuri distincte x i y ale unui graf tare conex .

Pentru tratarea problemelor de minim vom asocia graful G o matrice a costurilor C=(cij)nn definit astfel :

l(xi ,xj) daca (xi , xj)(U

Cij= 0 daca i=j +( daca (xi ,xj)(UIntuitiv,aceast alegere ar nsemna c drumul cel mai scurt de la xi la el nsui este de lungime 0 iar inexistenta arcului ( xi, xj )este totuna cu existena unui arc de lungime infinit ( care evident nu va interveni niciodat ntr-un eventual drum minim de la xi la xj ) . Algoritmul lui Dijkstra

Problem: Fiind dat un graf orientat G=(X,U) , o funcie l:UR+ i un nod xi0 , s se determine pentru toate vrfurile xi pentru care exist drum de la xi0 la xi , lungimea celui mai scurt drum precum i unul dintre drumurile minime de la xi0 la xi.

Algoritmul utilizeaz metoda Greedy genernd drumurile minime n ordinea cresctoare a lungimilor.

Exemplu:

Pentru graful urmtor , considernd nodul de plecare 1 se vor obine n ordine:

D1=(1,2) de lungime 1;

D2=(1,2,5) de lungime 2;

D3=(1,2,5,3) de lungime 4;

D4=(1,2,5,3,4) de lungime 5;

Deci pornind din nodul 1 avem n final :

de la 1 la 2 D1 de lungime 1;

de la 1 la 3 D3 de lungime 4;

de la 1 la 4 D4 de lungime 5;

de la 1 la 5 D2 de lungime 2;

de la 1 la 6 nu exist drum.

2 7

1 3

1 2

1 5 4

3

1 3

6

Se pornete de la vrful xi0 . Evident cel mai scurt drum de la xi0 la unul dintre celelalte vrfuri ale grafului este dat de arcul (xi0 , xj) de lungime minim . Urmtorul drum n ordinea lungimilor va fi dat fie de un alt arc cu extremitatea iniial xi0 fie de un drum (xi0 ,xj ,xp). Alegem n continuare drumuri n ordinea cresctoare a lungimilor , pn cnd am determinat drumuri minime de la xi0 ctre toate vrfurile pentru care exist drum pornind din xi0.Pentru aceasta se considera S mulimea vrfurilor xjX pentru care am gsit drum minim de la xi0 la xj. Iniial S={ xi0 }. La fiecare pas , adugm n S acel nod xkX \S cu proprietatea c drumul minim de la xi0 la xk are cel mai mic cost dintre toate drumurile de la xi0 la xp , cu xpX\S.

Pentru exemplul considerat S va avea pe rnd urmtorul coninut:

S={1}

S={1,2}

S={1,2,5}

S={1,2,5,3}

S={1,2,5,3,4}

S observm c drumul minim de la xi0 la xk (xk nodul ce urmeaz s-l adugm n S la un moment dat) trece numai prin vrfuri din S ( cu excepia lui xk); ntr-adevr notnd xi primul vrf de pe acest drum ce nu aparine lui S i presupunnd c xi xk ar rezulta c drumul de la xi0 la xi este mai scurt dect cel de la xi0 la xk ceea ce ar contrazice alegerea lui xk.

Pentru a alege nodul xk X\S ce urmeaz a fi adugat n S vom folosi un vector d=( d1 , d2 , ... , dn ) astfel nct

lungimea drumului minim de la xi0 la xi , dac xi( S

di= lungimea drumului minim de la xi0 la xi ce folosete numai

vrfuri din S dac xi( S

Iniial di=C(i0 ,i)( i=1,n unde C este matricea costurilor .

La un moment dat , adugam n S nodul xk cu proprietatea c

dk=min{dj ( xj(X( S }.

Dup adugarea lui xk n S trebuie actualizate valorile lui d pentru elementele care nu sunt n S , deoarece este posibil ca drumul minim de la xi0 la unul din aceste noduri ( folosind noduri din S ) s foloseasc nodul xk pe care tocmai l-am adugat . Fie xj X|S un astfel de nod . Drumul minim de la xi0 la xj ce folosete noduri din S ( inclusiv xk ) va fi de forma D=(xi0 , ... .... , xk , xj ). ntr-adevr, presupunnd c exist noduri intermediare xp pe drumul de la xk la xi adic D=( xi0 , ... ,xk , ... ,xp , ... ,xj ) ar exista drumul mai scurt format din drumul minim de la xi0 la xp ( care evident nu conine xk deoarece xp a fost adugat mai nainte la mulimea S ) i secven din D de la xp la xj. Deci pentru xjXS , dj se modifica dup adugarea lui xk la S numai dac

dk+C(k,j)< , caz n care dj: +C(k,j).

n final , vectorul va conine costurile ( lungimile ) drumurilor minime de la xi0 la celelalte noduri ; dac pentru un nod xj nu exist drum de la xi0 la xj, dj= .

Mai jos este prezentat algoritmul n limbaj Pascal. Pentru reprezentarea mulimii S s-a folosit vectorul caracteristic S cu n componente

S[i]= 0 daca xi(S

1 daca xi(S

Ca mulime de noduri se consider X={1,2, ... ,n} iar lungimile arcelor se consider numere ntregi

program Dijkstra;

const nmax=15;

inf=maxint div 2;

var c:array[1..nmax , 1..nmax] of integer;

k,i,j,arc,m,n,x,y,z,xp: intrger;

s,d,prec:array[1..nmax] of integer

g: boolean;

procedure min(var k: integer);

var m,i: integer;

begin

m:=inf*2;

for i:=1 to n do

if (s[i]=0) and (d[i]d[k]+c[k,j]) then

begin

d[j]:=d[k]+c[k,j];

prec[j]:=k;

end;

end;

until (not g);

for i:= 1 to n do

if ixp then

if d[i]=inf then

begin

write(Nu exista drum de la ,xp, la,i);

writeln;

end

else begin

writeln(Drum minim de la ,xp,la,i);

drum(i);

writeln

end

end.

Algoritmul lui Roy- Floyd

Problem: Fiind dat un graf G=(X,U) cu X={x1 , ... , xn} i o funcie l:UR+ s se determine pentru fiecare pereche de noduri xi , xj (ij) lungimea minim a drumurilor de la xi la xj precum i aceste drumuri (n caz c exist drum de la xi la xj)

Algoritmul Roy Floyd determina lungimile minime ale drumurilor ntre oricare dou noduri ale grafului ntr-o matrice C=(cij)nn unde

CIJ =dac i=j

lungimea drumului minim de la xi la xj dac exist drum de la xi la xj

dac nu exist drum de la xi la xj

Determinarea mtricii C este asemntoare algoritmului Roy-Warshall

pentru obinerea mtricii drumurilor

Se pornete de la matricea costurilor C

for k=1 to n

for i=1 to n (ik)

for j=1 to n (jk)

cij : = min (cij , cik + ckj)

endfor

endfor

endfor

Observaie : Acest algoritm poate fi privit ca o succesiune de n transformri aplicate mtricii C , o transformare k fiind astfel :

Tk(A) = B, B =(bij)nn , bij= min(aij ,aik+a) i,j { 1 , ... , n}.

Simultan cu determinarea lungimilor minime ale drumurilor , pot fi reinute i acestea . Vom folosi o matrice D=(dij)nn ale crei elemente dij sunt mulimi de noduri (dij va reprezenta n final mulimea nodurilor ce pot precede pe xj n drumul minim de la xi la xj).

Odat cu iniializarea mtricii C cu matricea costurilor vom iniializa i matricea D astfel :

{xi} daca cij( ( si i( j

dij=

( daca cij=( sau i=j

Pe msur ce se actualizeaz matricea C vom actualiza i matricea D dup cum urmeaz :

dac cijcik+ckj se iniializeaz dij cu dkj .

n final reconstituirea drumurilor minime ntre oricare dou vrfuri xi,xj se face pornind din xj astfel : precedentul lui xj l alegem din mulimea dij avnd unul din aceste noduri fixat (s-l numim xg) precedentul acestuia va fi orice nod din mulimea dig . Procedeul continua pn ajungem la nodul xi .

Observaie : Dac ne intereseaz doar cte un drum pentru fiecare pereche de noduri xi , xj vom considera n locul mtricii D o matrice D tot nn astfel nct dij s rein un nod ce-l poate precede pe xj n drumul minim de la xi la xj .

Mai jos este scris programul Pascal de determinare a tuturor drumuri-

lor minime ntre oricare dou vrfuri ale unui graf G=(X,U) cu X={1 , ... , n}

program roymin;

const nmax=20;

inf=maxint div 2;

{inf poate fi initializat cu o valoare ce depaseste suma tuturor costurilor}

type multime = set of 1.. nmax;

var c= array[1..nmax , 1..nmax] of word;

{c initial matricea drumurilor}

d: array [1..nmax , 1..nmax] of multime;

dr: array [1..nmax] of 1..nmax;

n,m,i,j.k.lg:word;

procedure initc;

{initializeaza matricea costurilor C}

var i,j,x,y,z: word;

begin

write(` Dati nr de noduri: `);

readln(n);

for i:=1 to n do

begin

for j:=1 to n do

c[i,j] := inf;

c[i,i] :=0; end;

write(`Dati nr de noduri : `);

readln(m);

for i:=1 to m do

begin

write(`Extremitatile si lungimea arcului `,i,`: `);

readln(x,y,z);

c[x,y]:=z;

end;

end;

procedure initd;

{iniializeaza matricea D}

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to n do

if(c[i,j]c[i,k]+c[k,j] then

begin

c[i,j]:=c[i,k]+c[k,j]:

d[i,j]:=d[k,j]

end

else

if c[i,j]=c[i,k]+c[k,j] then

d[i,j]:=d[i,j]+d[k,j];

afiare;

end.

DRUMURI MAXIME IN GRAFURI ORIENTATE

Fie G=(X,U) un graf fr circuite cu X={x1 , x2 ,... , xn} i l:UR+ .

Ne punem problema determinrii drumurilor de lungime maxim n acest graf. Vom ataa grafului G o matrice M=(mij)nn definit astfel :

l(xi , xj) daca (xi , xj)(U

mij= - ( daca (xi , xj)(U si (i(j)

0 daca i=j

Observm c aceasta matrice este asemntoare mtricii costurilor ataat grafului pentru determinarea drumurilor minime , cu diferena c pentru perechi de noduri xi , xj (ij) pentru care nu exist arcul (xi,xj) marcm n matrice - . Intuitiv , aceasta ar nsemna c inexistena arcului (xi , xj) este totuna pentru studiul drumurilor maxime, cu existena unui arc de lungime - (care evident nu va interveni niciodat ntr-un eventual drum maxim de la xi la xj) .

Algoritmii de determinare a drumurilor minime pot fi adaptai cu mici modificri pentru determinarea drumurilor maxime. Considernd problema determinrii drumurilor maxime ntre oricare dou vrfuri xi , xj(ij) pentru care exist drum de la xila xj , putem utiliza urmtorul algoritm:

Fie M matricea asociat grafului c mai sus , iar D=(dij)nn cu

{xi} daca mij>-( si (i(j)

dij=

daca mij= -( sau i=jfor k=1 to n

for i=1 to n (k(i)

for j=1 to n (k(j)

if mij inf) and (ij) then d[i,j]:=[i]

else d[i,j]:=[];

end;

prodcedure drum(i,j:integer);

var k:word;

begin

if ij then

begin

for k:=1 to n do

if k in d[i,j] then

begin

lg:= lg+1;

dr[lg]:=k;

drum(i,k),

lg:=lg-1

end;

end

else begin

writeln;

for k:=lg downto 1 do

write(dr[k]:4)

end;

end;

procedure afisare;

var i,j:word;

begin

for i:=1 to n do

for j:=1 to n do

begin

writeln;

if c[i,j]=inf then

writeln(( nu exista drum intre (,i(, si (,j)

else

begin

writeln((Lungimea drumurilor maxime de la,i,la,j, este ,c[i,j]);

if ij then begin

lg:=1;

dr[1]:=j;

drum(i,j)

end

end

end

end;

begin

initc;

initd;

for k:=1 to n do

for i:=1 to n do

for j:=1 to n do

if (c[i,k]inf) and (c[k,j]inf) then

if (c[i,j]=n/2, atunci graful este hamiltonian.

drum hamiltonian: un drum elementar care trece prin toate nodurile grafului;

circuit hamiltonian: un circuit care trece prin toate nodurile grafului;

n timp, s-au evideniat o multitudine de probleme reductibile la gsirea unui drum (sau circuit) hamiltonian ntr-un graf, cum ar fi:

1. Problema potaului (gsirea traseului cel mai scurt care trece pe la toate locuinele ce aparin de oficiul potal la care lucreaz acesta);

2. Problema adunrii deeurilor (cel mai scurt drum care trece pe la toate punctele de depozitate a deeurilor);

3. Problema succesiunii operaiilor (executarea mai multor operaii pe o main n acea ordine n care suma timpilor consumai cu pregtirea mainii pentru trecerea de la o operaie la urmtoarea s fie minim)

4. Ordinea lipirii unor componente electronice pe o plac, etc;

Determinarea drumurilor hamiltoniene Problema determinrii drumului (circuitului) hamiltonian de valoare optim s-a dovedit deosebit de dificil, neexistnd nici acum un algoritm care s rezolve problema n timp polinomial i nici mcar o metod simpl prin care s se decid dac ntr-un graf dat exist sau nu drumuri hamiltoniene.

Exist ns mai muli algoritmi, unii exaci alii heuristici, care reuesc, ntr-un caz sau altul, s rezolve problema satisfctor i n timp util.

Teorema Dac ntr-un graf orientat fr circuite exist un drum hamiltonian atunci acesta este unic.

Demonstraie Deoarece un drum hamiltonian se identific cu o permutare a nodurilor grafului, existena a dou drumuri hamiltoniene implic existena a dou permutri distincte a nodurilor grafului i cum dou permutri distincte difer prin cel puin o inversiune vor exista dou noduri xi i xj n ordinea xi xj pe un drum i invers pe cellalt, existnd deci un drum att de la xi la xj ct i de la xj la xi, cele dou formnd mpreun un circuit, n contradicie cu ipoteza.

Graful din figura 1. Este hamiltonian, deoarece ciclul C=[1,2,3,5,4,1] este elementar (pleaca din varful 1 si se incheie tot in 1, iar muchiile [1,2], [2,3], [3,5], [5,4] si [4,1] sunt distincte doua cate doua) si in plus contine toate varfurile.

BIBLIOGRAFIE

1. Manual de informatica pentru clasa a XI-a , George Daniel Mateescu /

Pavel Florin Moraru, Editura Niculescu , 2004

2. Metoda backtracking cu exemple in limbajul Pascal , Tiberiu Socaciu ,

Editura Edusoft , 2005

Figura 1.

Fig.3

PAGE 4


Recommended