Professional Documents
Culture Documents
7. Grafs
7.1 Introducció
Un graf 𝐺 és un conjunt definit com 𝐺 = {𝑉, 𝐸}, on 𝑉 és un conjunt finit de vèrtexs del
graf i 𝐸 és un conjunt d’arestes (edges) del graf. Cada aresta comunica un parell de
vèrtexs (𝑢, 𝑣). L’ordre d’un graf és el número de vèrtex que té, i la mida és el número
d’arestes. Dos vèrtex són adjacents si estan connectats per una aresta (bidireccional).
𝐸 = 𝑉(𝑉 − 1)
𝑉(𝑉 − 1)
𝐸=
2
Hi ha grafs amb costos o etiquetes, definits com 𝐺 = {𝑉, 𝐸, 𝑊}, on cada vèrtex té un
cost o etiqueta 𝑤.
En un graf dirigit, els vèrtex tenen successors 𝑠𝑢𝑐𝑐(𝑣) i predecessors 𝑝𝑟𝑒𝑑(𝑣). El grau
d’entrada 𝑑 7 (𝑣) d’un vèrtex equival al número de successors, i el grau de sortida
𝑑 8 (𝑣)equival al número de predecessors.
El grau total d’un vèrtex és 𝑑(𝑣) = 𝑑 7 (𝑣) −𝑑 8 (𝑣). Lògicament, un graf no dirigit tindrà
un grau total 𝑑(𝑣) = 0, degut a la bidireccionalitat.
Un camí es una seqüencia de vèrtexs 〈𝑣= , 𝑣> , … , 𝑣@ 〉. Podem dir que es tracta de un camí
simple si no es repeteix cap vèrtex. També podem dir que es tracta d’un camí tancat si
𝑣= = 𝑣@ , i en cas contrari serà un camí obert.
Un cicle és un camí simple tancat. Si un graf té cicles, diem que és cíclic, si no, direm que
és acíclic.
1
Andrés Luengo Blázquez Tema 7 PAED
• Graf Eulerià: conté un cicle que inclou totes les arestes. Per poder fer-ho, com
......... a màxim pot haver-hi dos vèrtex amb grau senar. En un graf dirigit,
.......... tots els vèrtexs han de tenir grau 0.
• Graf complet: tots els vèrtexs tenen que ser adjacents a la resta de vèrtexs.
• Graf regular: tots els vèrtexs tenen el mateix grau.
• Matriu d’adjacències
Consisteix en una matriu 𝐴 amb mida 𝑉𝑥𝑉, on guardem els costos (en cas d’existir)
de connexió entre vèrtexs. Per exemple:
A B C D
A 0 4 11 -1
B 4 0 5 8
C 11 5 0 9
D -1 8 9 0
• Llista d’adjacències
És una manera compacta de representar els grafs. Consisteix en una array 𝐴𝑑𝑗 de
mida 𝑉, on cada posició conté els seus vèrtexs adjacents. Per exemple:
A B C D
B A A B
C C B C
D D
És preferible utilitzar la llista d’adjacències per a grafs dispersos, és a dir, que el número
d’arestes és molt més petit que el número de vèrtexs. Això és degut a que té un millor
cost de memòria.
2
Andrés Luengo Blázquez Tema 7 PAED
Únicament es aplicable sobre grafs dirigits acíclics. Sempre comencem a ordenar pels
vèrtexs amb grau d’entrada 0. Interessa conèixer el grau d’entrada de tot els vèrtexs, i
actualitzarem a cada iteració els nous graus d’entrada. Si ho intentem fer sobre un graf
cíclic, arribarà un punt on no tindrem cap vèrtex amb grau d’entrada 0.
Exemple:
path = ø
1ª iteració 4ª iteració
visited = 1 0 0 0 0 0 visited = 1 1 1 0 1 0
in_degrees = 0 0 1 2 0 1 in_degrees = 0 0 0 0 0 1
2ª iteració 5ª iteració
visited = 1 1 0 0 0 0 visited = 1 1 1 1 1 0
in_degrees = 0 0 0 1 0 1 in_degrees = 0 0 0 0 0 0
path = {A B} path = {A B C E D}
3ª iteració 6ª iteració
visited = 1 1 1 0 0 0 visited = 1 1 1 1 1 1
in_degrees = 0 0 0 1 0 1 in_degrees = 0 0 0 0 0 0
path = {A B C} path = {A B C E D F}
3
Andrés Luengo Blázquez Tema 7 PAED
És aplicable a tot tipus de graf. La seva funció és construir un graf acíclic (tipus arbre)
que serveix per obtenir informació del graf i fer comprovacions.
Es tracta d’anar recorrent el graf en ordre, i tornant enrere quan ja no trobem cap nou
vèrtex (no visitat).
Exemple:
Podem reaprofitar el DFS per tal de fer la ordenació topològica (obviàment només en
grafs dirigits acíclics. Hem de fer un DFS marcant als vèrtexs durant el recorregut un
keytime de discovery, i un altre de finished, i previàment ordenar-los per finished
descendentment, per tal d’obtenir l’ordenació topològica.
Exemple:
Ordenació topològica
path = {E F C A B D}
El seu objectiu és combinar un conjunt d’arestes tal que es connectin tots els vèrtexs i
que la suma del pes d’aquests sigui mínima. És aplicable a grafs no dirigits amb pesos.
Estudiarem dos algorismes que realitzen el MST: Prim i Kruskal. Tot i així, cal esmentar
que per a grafs densos és millor utilitzar Prim.
4
Andrés Luengo Blázquez Tema 7 PAED
a) Prim
Comença per un vèrtex qualsevol. A cada iteració, escull l’aresta amb pes mínim i on
únicament un dels dos vèrtexs de l’aresta hagi estat visitat.
Exemple:
Q=ø
path = ø
b) Kruskal
Afegim totes les arestes a una cua de prioritats, en ordre de cost ascendent. Creem tants
conjunts inicials com vèrtexs tingui el graf. S’utilitzen els conjunts per tal d’evitar cicles,
ja que només afegirem al conjunt parts dels altres conjunts.
Exemple:
Q = {b,a,c,d,e}
Conjunts = {A},{B},{C},{D}
5
Andrés Luengo Blázquez Tema 7 PAED
7.2.4 Dijkstra
És aplicable en grafs amb pesos. El seu objectiu és crear un arbre de recorreguts mínims
a partir d’un vèrtex inicial cap a la resta. El pes de tota aresta ha de ser positiu.
Q= {A, B, C, D, E, F}
distancies = 0 4 10 ¥ ¥ ¥ distancies = 0 4 7 12 16 10
paths = A A A - - - paths = A A B B F B
Q= {B,C,D,E,F} Q= {D,E }
distancies = 0 4 7 12 ¥ 10 distancies = 0 4 7 12 16 10
paths = A A B B - B paths = A A B B F B
Q= {C,F,D,E} Q= {E }
distancies = 0 4 7 12 18 10 distancies = 0 4 7 12 16 10
paths = A A B B C B paths = A A B B F B
Q= {F,D,E } Q= ø
Una vegada la cua està buida, ja tenim els camins per anar des de
A fins a qualsevol altre vèrtex en un cost mínim. Podem interpre-
tar la solució com: