Gráfelméleti feladatok d e c f a b gráf, csúcsok, élek séta: a, b, c, d, e, c, a, b, f vonal: c, d, e, c, b, a út: f, b, a, e, d (walk, lanţ) (trail, lanţ simplu) (path, lanţ elementar) 1
irányított gráf, irányított csúcsok, irányított élek irányított séta irányított vonal irányított út (directed walk, drum) (directed trail, drum simplu) (directed path, drum elementar) 2
Gráfnak nevezzük a G = (V, E, G) rendezett hármast, ahol V csúcsok (vagy szögpontok esetleg pontok) nem üres halmaza, E élek halmaza, G : E V V. Ha G(e 1 ) = G(e 2 ), akkor e 1 és e 2 párhuzamos vagy többszörös élek. Ha G(e) = {a, a}, akkor az e él hurokél. Ha G(e) = {a, b}, akkor azt mondjuk, hogy az a és b csúcsokat az e él köti össze, a és b szomszédosak, az e él illeszkedik az a és b csúcsokra, az a és b csúcsok az e él végpontjai. 3
Az a és b csúcsokra illeszkedő (párhuzamos) élek halmaza: G 1 (a, b) = {e E G(e) = {a, b}}. Legyen x a G gráf egy csúcsa. Jelöljük N G (x)-szel vagy csak N(x)-szel az x-szel szomszédos csúcsok halmazát: vagy N G (x) = {y V (G) e E(G), G(e) = {x, y}} N G (x) = {y V (G) G 1 (x, y).} A G gráfban az x-hez illeszkedő élek (amelyek nem hurokélek) halmaza: I G (x) = {e E(G) y V (G), y x, G(e) = {x, y}} Az x-hez illeszkedő hurokélek halmaza: L G (x) = {e E(G) G(e) = {x, x}} 4
Az x csúcs fokszáma vagy foka, amelyet ϕ(x)-szel jelölünk, az x-hez illeszkedő élek száma (a hurokéleket kétszer számolva): ϕ(x) = I G (x) + 2 L G (x). Ha ϕ(x) = 0, akkor x izolált csúcs. Ha ϕ(x) = 1, akkor x levél. Egy többszörös éleket és hurokéleket nem tartalmazó gráfot egyszerű gráfnak nevezzük. Ha G egyszerű gráf, akkor G 1 (a, b) 1 tetszőleges a, b V csúcsokra, és G 1 (a, a) = tetszőleges a V csúcsra, tehát G(e) = {a, b} helyett egyszerűen írhatunk {a, b}-t, amely a megfelelő élt jelenti. Ekkor a gráf is jelölhető egyszerűbben: G = (V, E). 5
Egyszerű gráfban az x fokszáma vagy foka, amelynek jele szintén ϕ(x) vagy ϕ G (x), az N G (x) halamz elemszáma: ϕ(x) = N G (x). Példák. V (G 1 ) = {1, 2, 3, 4, 5}, E(G 1 ) = {e 1, e 2, e 3, e 4, e 5, e 6, e 7 }, G(e 1 ) = G(e 2 ) = G(e 3 ) = {1, 4}, G(e 4 ) = {2, 4}, G(e 5 ) = {2, 1}, G(e 6 ) = {2, 3}, G(e 7 ) = {3, 4}. ϕ(1) = 4, ϕ(2) = 3, ϕ(3) = 2, ϕ(4) = 5, ϕ(5) = 0. 6
V (G 2 ) = {a, b, c, d, e}, E(G 2 ) = { {a, c}, {a, d}, {b, c}, {b, e}, {b, d}{e, d} } 7
Ha egy gráf minden fokszáma azonos, például r, akkor a gráf reguláris vagy r-reguláris. A következő gráf egy (7,14) 4-reguláris gráf. 8
Ha egy egyszerű gráfban bármely két csúcsot él köt össze, akkor a gráf teljes gráf. Az n-csúcsú teljes gráf jele: K n. 9
A G = (V, E) egyszerű gráf a G = (V, E) egyszerű gráf komplementuma vagy komplementere, ha V = V, E = { {a, b} {a, b} E }. Ha a G egyszerű gráf n-csúcsú, akkor E(G) E(G) = E(K n ). 10
A G 1 és G 2 gráfok izomorfak, ha létezik egy bijektív fügvény ψ : V (G 1 ) V (G 2 ), úgy, hogy ha {a, b} E(G 1 ), akkor {ψ(a), ψ(b)} E(G 2 ). Az izomorfizmust tetszőleges gráfokra is értelmezhetjük. Két G 1 és G 2 gráf izomorf, ha létezik egy ψ : V (G 1 ) V (G 2 ) bijektív függvény úgy, hogy G1 1 (a, b) = G 1 2 (ψ(a), ψ(b)) minden a, b V (G 1)-re. 11
Példa izomorf gráfokra. A ψ függvény: x 1 2 3 a b c ψ(x) x 1 x 5 x 3 x 2 x 6 x 4 Izomorf gráfokban ϕ(x)=ϕ(ψ(x)) minden x V (G 1 )-re. 12
Irányított gráfok Irányított gráfnak nevezzük a G = (V, E, G) rendezett hármast, ahol V a csúcsok (vagy szögpontok vagy pontok) halmaza, E az irányított élek halmaza és G : E V V Ha e E és (a, b) G(e), akkor a az e él kezdőpontja, b pedig az e él végpontja. Ha egy élnek a kezdő- és végpontja egybeesik, akkor az az él hurokél. 13
Ebben az irányított gráfban az e 1 és e 2 élek párhuzamosak, de e 6 és e 8 nem. Ha egy irányított gráfban nincsenek párhuzamos élek és hurokélek, akkor az egyszerű irányított gráf. 14
Legyen G irányított gráf. Ekkor N be G (y) = {x V ( G) G 1 (x, y) } az y-ba befutó élek kezdőpontjainak halmaza N ki G (y) = {z V ( G) G 1 (y, z) } az y-ból kifutó élek véppontjainak halmaza. Egy irányított gráfban az x csúcs be-foka az x-be befutó élek száma (jelölése ϕ be (x)), az x csúcs ki-foka az x-ből kifutó élek száma (jelölése ϕ ki (x)). Ha egyszerű irányított gráfról van szó, akkor: ϕ be (x) = N be (x) ϕ ki (x) = N ki (x). 15
Gráfok ábrázolása 1) geometriai ábrázolás 2) szomszédsági (adjacencia) mátrixszal G = (E, V, G), V = {x 1, x 2,..., x n } A = (a ij ) i,j=1,n a szomszédsági mátrix, ahol a ij = { G 1 (x i, x j ) ha i j 2 G 1 (x i, x j ) ha i = j 16
ϕ(x i ) = n j=1 a ij, minden i = 1, 2,..., n Az egyszerű gráf szomszédsági mátrixa csak 0 és 1 számokat tartalmaz. Irányított gráf esetében a definíció hasonló. 17
3) illeszkedési (incidencia) mátrixszal G = (E, V, G), V = {x 1, x 2,..., x n }, E = {e 1, e 2,..., e m } B = (b ij ) i=1,n,j=1,m, b ij = 1 ha x i illeszjedik e j -hez és e j nem hurokél 2 ha x i illeszjedik e j -hez és e j hurokél 0 ha x i nem e j -hez. 18
19
4) listával a) Minden csúcsnak felsoroljuk a szomszédjait. x 1 x 2 x 3 x 4 x 2 x 1 x 3 x 3 x 3 x 1 x 2 x 2 x 4 x 4 x 4 x 1 x 3 x 3 Használhatunk láncolt listákat is. b) A listákat egymás után írjuk egy-egy -gal elválasztva, a végére két csillagot téve. x 2 x 3 x 4 x 1 x 3 x 3 x 1 x 2 x 2 x 4 x 4 x 1 x 3 x 3 20
c) A -okat elhagyjuk, és még egy listát használunk, amelyikben az egyes listák kezdőindexeit adjuk meg. x 2 x 3 x 4 x 1 x 3 x 3 x 1 x 2 x 2 x 4 x 4 x 1 x 3 x 3 1 4 7 12 A második lista elemei az egyes listák kezdőelemeire mutatnak a következőképpen: x 2 x 3 x 4 x 1 x 3 x 3 x 1 x 2 x 2 x 4 x 4 x 1 x 3 x 3 21
Legrövídebb utak A szomszédsági mátrix: A = ( a ij ) a ij = i,j=1,n, ahol a ij = d (0) ij, azaz: W(v i, v j ) ha {v i, v j } E(G) (vagy (v i, v j ) E( G)) 0 ha i = j ha {v i, v j } E(G) (vagy (v i, v j ) E( G)) A Floyd Warshall-algoritmus távolsági mátrix meghatározása Floyd, Robert W. (1936 2001) Warshall, Stephen (1935 2006) 22
Kezdetben p ij := i ha d ij és i j; más esetekben p ij := 0. FloydWarshall(D 0 ) 1. D := D 0 2. for k := 1 to n do 3. for i := 1 to n do 4. for j := 1 to n do 5. if d ij > d ik + d kj then 6. d ij := d ik + d kj 7. p ij := p kj 8. return D, p 23
Egy u x u y utat a következő algoritmussal határozzuk meg: 1. k := n : 2. u k := y 3. while u k x do 4. u k 1 := p xuk 5. k := k 1 A keresett út: u k, u k+1,..., u n. 24
Példa. 25
A szomszédsági mátrixa és a megfelelő P mátrix kezdeti értéke: D 0 = 0 1 3 8 0 1 5 0 1 0 2 4 0 P 0 = 0 1 1 0 1 0 0 2 0 2 0 0 0 3 0 0 0 0 0 4 0 0 5 0 0 Az algoritmus eredménye a D és P mátrixok: D = 0 1 2 3 5 0 1 2 4 0 1 3 6 0 2 4 5 0 P = 0 1 2 3 4 0 0 2 3 4 0 0 0 3 4 0 0 5 0 4 0 0 5 3 0 26
Részsorozatok n, d 1 d 2, s pozitív egészek, x 1, x 2,..., x n sorozat (elemei Σ-ból). (d 1, d 2 )-részsorozat: x i1, x i2,..., x is, ahol i 1 1, d 1 i j+1 i j d 2, for j = 1, 2,..., s 1, i s n, Határozzuk meg a (d 1, d 2 )-részsorozatokat! 27
Például: a, a, b, c, a, d, e (2, 4)-részsorozatok: (a), (a, b), (a, c), (a, b, a), (a, a), (a, c, d), (a, b, d), (a, a, e), (a, b, a, e), (a, c, e), (a, b, e), (a, d), (b), (b, a), (b, d), (b, a, e), (b, e), (c), (c, d), (c, e), (a, e), (d), (e). 28
x 1, x 2,..., x n elemei páronként különböznek: (d 1, d 2 )-részsorozatok számának kiszámítása: G = (V, E), ahol V = { x 1, x 2,..., x n }, E = { (x i, x j ) d 1 j i d 2, i = 1, 2,..., n, j = 1, 2,..., n }. (2,4)-részsorozatok gráfja 29
A gráf szomszédsági mátrixa: A = ( a ij )i=1,n j=1,n a ij = { 1, if d1 j i d 2, 0, különben, ha i = 1, 2,..., n, j = 1, 2,..., n. A gráfban nincs irányított kör, ezért A k (ahol A k = A k 1 A, A 1 = A) i-edik sorában és j-edik oszlopában lévő elem a k- hosszúságú irányított utak számát jelenti a i és a j között. Ha A 0 az egységmátrix (1 a főátlón, 0 máshol), legyen R = (r ij ): R = A 0 + A + A 2 + + A k, ahol A k+1 = O (nulla mátrix). A (d 1, d 2 )-részsorozatok száma C(n; d 1, d 2 ) = n n i=1 j=1 r ij. 30
Warshall(A, n) 1. W := A 2. for k := 1 to n 3. do for i := 1 to n 4. do for j := 1 to n 5. do w ij := w ij + w ik w kj 6. return W R = A 0 + W. 31
A = 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0. Warshall-algoritmus alkalmazása után: W = 0 0 1 1 2 2 0 0 0 1 1 2 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0, R = C(6; 2, 4) = 19, az R elemeinek összege. 1 0 1 1 2 2 0 1 0 1 1 2 0 0 1 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 1, 32
Latin négyzet segítségével: a, b, c, d, e, f, g n = 7, d 1 = 2, d 2 = 4 esetében: A = {ac} {ad} {ae} {bd} {be} {bf} {ce} {cf} {cg} {df} {dg} {eg}, 33
{ac} {ad} {ace, ae} {adf, acf} {aeg, aceg, adg, acg} {bd} {be} {bdf, bf} {beg, bdg} {ce} {cf} {ceg, cg} {df} {dg} {eg}. Hozzászámítva az egyelemű részsorozatokat is: C(7; 2, 4) = 30. 34
Gazdaságos feszítőfák Súlyozott gráfban egy feszítőfa értéke az éleihez rendelt súlyok összege. Adott súlyozott gráfban keressük a legkisebb értékű feszítőfát, amelyet minimális feszítőfának nevezünk. Kruskal algoritmusa A gráf éleit súlyuk szerint növekvő sorrendbe rendezzük. Az első él a sorból bekerül a leendő gazdaságos favázba (az alábbi algoritmusban a leendő favázba bekerülő éleket megcsillagozzuk). Kezdetben a gráf minden csúcsa egy-egy halmazt képez. Egy él akkor kerül be a favázba, ha végpontjai különböző halmazból valók, és ekkor a két megfelelő halmazt egyesítjük. Az algoritmus akkor ér véget, amikor a gráf minden csúcsa egy halmazban van. 35
Az első oszlopban az élek vannak, a másodikban a megfelelő súly értéke, a harmadikban csillag, ha az él bekerült a favázba, a negyedik oszlopban pedig a csúcshalmazok. 36
{1}, {2}, {3}, {4}, {5}, {6}, {7}, {8} {5,7} 1 * {5,7}, {1}, {2}, {3}, {4}, {6}, [8} {7,8} 2 * {5,7,8}, {1}, {2}, {3}, {4}, {6} {3,8} 3 * {3,5,7,8}, {1}, {2}, {4}, {6} {1,3} 4 * {1,3,5,7,8}, {2}, {4}, {6} {3,4} 4 * {1,3,4,5,7,8}, {2}, {6} {4,8} 4 {2,3} 5 * {1,2,3,4,5,7,8}, {6} {1,5} 6 {2,5} 6 {4,5} 6 {1,6} 8 * {1,2,3,4,5,6,7,8} {3,5} 9 {1,2} 10 {5,6} 12 {5,8} 13 37
A csillaggal megjelölt élek a gazdaságos faváz élei. Maga a faváz a következő: 38
Az algoritmus leírásához tekintsük az élek E = {e 1, e 2,..., e m } halmazát úgy, hogy W(e i ) W(e i+1 ), minden i = 1, 2,..., m 1 értékre (azaz, az élek súlyuk szerint növekvő sorrendben vannak indexelve). Halmazok helyett egy h = (h 1, h 2,..., h n ) vektort használunk (n a csúcsok száma), amelynek elemei kezdetben egyenlőek az indexükkel, ami arra utal, hogy különböző halmazok elemei. Amikor két halmazt egyesítünk, a megfelelő h i értékeket egyenlővé tesszük (egyik halmaz elemeinek h i értékeit a másik halmaz h i értékeire álĺıtjuk.). 39
Kruskal(E) 1. for j=1,2,..., n do 2. h j := j 3. i := 1 4. while h elemei különbözőek do 5. if (e i végpontjai v k, v l ) és (h k h l ) then 6. kíır e i 7. for j:=1, 2,..., n do 8. if h j = h l then 9. h j := h k 10. i:=i+1 40
Árvíz után Egy megye helységei (városok, falvak) közötti utakat néhol elmosta az árvíz. A helységek x i, i = 1, 2,..., n, és a köztük épen lévő utakat az A = (a ij ) mátrix jelzi: a ij = 1, ha x i és x j között van épen maradt út, és a ij = 0, ha az út járhatatlan. Kérdés: el lehet-e jutni a megye bármelyik helységéből bármelyik másik helységébe? Megoldás: Gráffal, amelynek szomszédsági mátrixa A. Választunk egy tetszőleges helységet: pl. x 1. U = {x 1 }. U = U N(U) ameddig U nem változik. (N(U) az U szomszédai.) Ha U tartalmazza az összes helységet, akkor a válasz igen, különben nem. 41
Euler-vonal keresése Fleury algoritmusa Ellenőrizzük, hogy a gráf Euler-gráf-e (minden fokszám páros) vagy pontosan két páratlan fokú csúcsa van. Elindulunk tetszőleges csúcsból (vagy egy páratlan fokszámúból). Mindig olyan új élt választunk, amely nem híd (kitöröljük). (Hidat csak akkor, ha más nincs.) 42
Hamilton-út keresése visszalépéses módszerrel Elégséges feltételek: Rédei-tétel Dirac-tétel Ore-tétel 43