kategória | ||||||||||
|
||||||||||
|
||
Gráfalgoritmusok: gráfok bejárása, útmátrix, legrövidebb utak mátrixának meghatározása.
Gráfok és alkalmazásaik
G=(V,E) egyszerű gráf (irányított), V = m
A csomópontok rendezettek: v1,v2,v3, ...... ,vm
Szomszédsági mátrix: A=(aij) szomszédsági mátrixa G-nek, ha aij=0, ha minden vi vj él és aij=0 különben.
Példa
v1 v3 242d32c 242d32c 0 1 1 1
242d32c 242d32c 242d32c A= 0 0 0 0
242d32c 242d32c 242d32c 242d32c 0 0 0 1
v2 v4 242d32c 242d32c 0 0 1 0
Tétel A a G gráf szomszédsági mátrixa. A2:= A*A, A3:=A*A*A ..., Ak:=(ak(i,j)). Ekkor ak(i,j) egyenlő a vi-ből vj-be vezető k hosszúságú utak számával.
Példa
A2= 0 0 1 1 242d32c v1 v4 v3
0 0 0 0
0 0 1 0
0 0 0 1
Útmátrix: P=(pij) mátrix a G irányított gráf útmátrixa, ha pij=1, ha minden vi-ből vj-be út és pij=0 különben.
Tétel: pij=1 Û ha Bm=A+A2+A3+....+Am mátrix (i,j)-ik eleme ¹ 0, ahol A a G gráf szomszédsági mátrixa, m a csúcsok száma.
Példa
242d32c v2 0 1 1 242d32c 0 0 1 242d32c 0 0 0
v1 242d32c A= 0 0 1 A2= 0 0 0 A3= 0 0 0
242d32c v3 0 0 0 242d32c 0 0 0 242d32c 0 0 0
242d32c 0 1 2 242d32c 242d32c 0 1 1 Nem minden elem
B2=A+A2+A3= 0 0 1 Összesen kétféle módon P= 0 0 1 egyenlő 1-gyel Þ
242d32c 0 0 0 juthatok el v1-ből v3-ba! 0 0 0 nem szorosan összefüggő!
Warshall - algoritmus
Cél: G mátrix esetén P útmátrix meghatározása.
Az algoritmus: 1. P:=A
242d32c 2. FOR K=1 TO M
242d32c 3. FOR I=1 TO M
242d32c 4. FOR J=1 TO M
242d32c P(i,j) := P(i,j) vagy (P(i,k) és P(k,j))
Példa Előző
0 1 1 242d32c 0 1 1 242d32c 0 1 1 242d32c 0 1 1
P:= 0 0 1 =A P1= 0 0 1 P2= 0 0 1 P3= 0 0 1
0 0 0 242d32c 0 0 0 242d32c 0 0 0 242d32c 0 0 0
Legrövidebb út algoritmus
(Ez az algoritmus egy módosított Warshall-algoritmus)
G súlyozott irányított gráf, W:=(wij) súlymátrix [wij = 0, ha nem létezik vi vj él]
Cél: Q=(qij) mátrix megkeresése, ahol q(i,j) az vi vj legrövidebb út hossza.
Jelölés: Pk(i,j):=1, ha létezik vi vj út csak v1, v2, ... ,vk csúcsokat tartalmazza, és Pk(i,j):=0 különben.
Megjegyzés: P0(i,j)=1, ha létezik vi vj él, azaz P0=A szomszédsági mátrix. Továbbá Pm=P 242d32c útmátrix.
Állítás: Pk(i,j) = 1, ha
242d32c - vagy Pk-1(i,j) = 1
242d32c - vagy Pk-1(i,j) = 1 és Pk-1(k,j) = 1 242d32c vk
242d32c - vagy 242d32c 242d32c vagy 242d32c
vi 242d32c vj 242d32c vi 242d32c 242d32c vj
242d32c 242d32c v1, ... ,vk-1 csúcsokat tartalmazó út
Azaz Pk(i,j) = Pk-1(i,j) vagy (Pk-1(i,k) és Pk-1(k,j)), ahol:
és 0 1 242d32c 242d32c vagy 0 1
0 0 0 242d32c 242d32c 0 0 1
1 0 1 242d32c 242d32c 1 1 1
Jelölés: Qk(i,j) := min(Qk-1(i,j));Qk-1(i,k)+Qk-1(k,j))
v1,...,vk-1 csúcsokat felhasználó legrövidebb út hossza
Az algoritmus: 1. Q(i,j):=W(i,j), ha W(i,j) ¹ 0 és Q(i,j):= ¥ különben
242d32c 2. For K:=1 to M
242d32c 3. For I:=1 to M
242d32c 4. For J:=1 to M
242d32c 242d32c Q(i,j):= min(Q(i,j);Q(i,k)+Q(k,j))
Példa
1 v2 242d32c 0 1 4 242d32c ¥ 1 4
v1 2 242d32c W= 0 0 2 242d32c 1. Q= ¥ ¥ 2
4 v3 242d32c 0 0 0 242d32c ¥ ¥ ¥
¥ 1 4 242d32c ¥ 1 3 242d32c ¥ 1 3
2. ¥ ¥ 2 242d32c 3. ¥ ¥ 2 242d32c 4. ¥ ¥ 2
¥ ¥ ¥ 242d32c ¥ ¥ ¥ 242d32c ¥ ¥ ¥
v1 242d32c 242d32c v1, v2 242d32c v1, v2, v3
Gráfok megvalósítása kapcsolt adatszerkezettel
Példa v2
242d32c 242d32c 242d32c Csúcs Szomszédsági lista
242d32c 242d32c 242d32c v1 v2, v3, v4
v1 242d32c v3 242d32c v2 v3
242d32c 242d32c 242d32c v3 v4
242d32c v4 242d32c v4
A kapcsolt adatszerkezet:
Start 242d32c Csúcslista 242d32c Éllista
242d32c v1 242d32c Æ
242d32c v2 242d32c Æ
242d32c v3 242d32c Æ
242d32c v4 Æ Æ
Gráfok bejárása
Keresztirányú keresés:
1. A kiindulópontot vizsgáljuk
2. A szomszédjait vizsgáljuk
3. A szomszédok szomszédjait, stb.
Megvalósítás: sor segítségével.
Jelölés: Egy csomópont státusza (ST) lehet
¾ 1 - készenléti állapot (még nem vizsgált)
¾ 2 - várakozó állapot (a sorban van)
¾ 3 - feldolgozott állapot
Az algoritmus:
1. Minden pont státusza legyen 1.
2. A kiindulópont (A) elhelyezése a sorban ST(A):=2.
3. Ismétlés, amíg a sor üres nem lesz:
4. A sor első elemének (N) eltávolítása, N feldolgozása, ST(N):=3.
5. N készenléti állapotú szomszédainak hozzácsatolása a sorhoz, státuszuk 2-re
242d32c változtatása.
Megjegyzés: Ha maradnak feldolgozandó pontok, melyek A-ból nem érhetők el, egy ilyen 242d32c ponttal újra kell kezdeni az algoritmust.
Példa
242d32c 242d32c A sor alakulása: ST(v1, v2, v3):=
242d32c v2
v1 242d32c 242d32c v1 ST(v1):=2
242d32c v3 v2 v3 ST(v1):=3 ST(v2,v3):=2
v4
242d32c 242d32c 242d32c v3 ST(v2):=3
242d32c 242d32c 242d32c v4 ST(v3):=3
242d32c 242d32c 242d32c ST(v4):=3
Hosszirányú keresés:
1. A kiindulópont feldolgozása.
2. A-ból kiinduló egy P út teljes feldolgozása.
3. Visszalépés P-n
(Hasonlít a bináris fa inorder bejárásához.)
Megvalósítás: veremmel
Az algoritmus:
1. Minden csomópont státusza legyen 1.
2. A kiindulópont (A) ráhelyezése a veremre, ST(A) :=2.
3. Ismétlés, amíg a verem ki nem ürül.
4. A verem felső elemének (N) leemelése, N feldolgozása, ST(N):=3.
5. N készenléti állapotú szomszédainak ráhelyezése a veremre, státuszuk legyen 2.
Példa
242d32c 242d32c ST(v1, ... ,v5):=1
242d32c v5 1. 242d32c 2.
v1 242d32c 242d32c v1 ST(v1) :=2 v5 ST(v1):=3
242d32c 242d32c 242d32c 242d32c v4 ST(v3,v4,v5):=2
242d32c v4 242d32c 242d32c 242d32c 242d32c v3
v2 v3
3. 242d32c 4. 242d32c 5. 242d32c 6.
v4 ST(v5):=3 ST(v4):=3 242d32c ST(v3):=3 242d32c ST(v2):=3
v3 242d32c v3 242d32c v2
Gráfok topológiai rendezése
T.f.h. G gráf nem tartalmaz kört
Definiáljuk az alábbi a relációt: u < v, ha létezik u v út.
Állítás: a részleges rendezési reláció:
Ui.: 1. Minden v csomópontra v ³ v (nem reflexív)
2. Ha u<v, akkor v ³ u (assszimetrikus)
3. Ha u<v és v<w, akkor u<w (tranzitív)
Def.: G gráf topológiai rendezése G csúcsainak olyan lineáris sorbarendezése, melyre, ha létezik v u út G-ben azaz v<u, akkor v megelőzi u-t a sorban.
Példa 242d32c A
242d32c 242d32c 242d32c Két topológiai rendezése a gráfnak:
G 242d32c 242d32c 242d32c B D G A F E C
242d32c F E C vagy
B 242d32c 242d32c 242d32c E G B A D F C
242d32c
242d32c D
Tétel: G véges irányított gráf, mely nem tartalmaz köröket. Ekkor G-nek létezik topológiai rendezése.
Jelölés: BE(N) : N csúcs éppen aktuális be-fokának tárolása.
Cél: G topológiai rendezése.
Megvalósítás: sor segítségével.
1. Zérus be-fokú pont megkeresése.
2. N és a hozzá tartozó élek törlése a gráfból.
Az algoritmus:
1. A G gráf minden pontjának be-fokának meghatározása.
2. A zérus be-fokú pontok elhelyezése a sorban.
3. Ismétlés, míg a sor üres nem lesz.
242d32c 4. Sor első elemének eltávolítása (N).
242d32c 5. Az N pont minden M szomszédjára: BE(M):=BE(M)-1
242d32c Ha BE(M)=0, M hozzácsatlakozik a sorhoz.
Példa
242d32c B 242d32c A sor alakulása: BE(A):=0 BE(B):=1
A 242d32c 242d32c 242d32c 242d32c BE(C):=1 BE(D):=2
242d32c C
242d32c D
1., A
A 2., BE(B):=1-1=0 BE(C):=1-1=0
3., B C
AB 4., C BE(D):=2-1=1
ABC 5., BE(D):=1-1=0
6., D
ABCD 7.,
a topológiai rendezés
:
2244