Három érdekes feladat: univerzális nyelő, abszolút győztes és teljes pont
1. Univerzális nyelő Csúcsmátrixos ábrázolás esetén a legtöbb gráfalgoritmus futási ideje O(n2) azonban van kivétel. Egy irányított gráf egy csúcsa univerzális nyelő, ha bemeneti foka (n-1) és kimeneti foka 0. Egy csúcsmátrix-al megadott irányított gráfban eldönthető O(n) idő alatt, hogy van-e benne univerzális nyelő.
Megoldás: Vegyük a gráf két csúcsát. 2 eset lehetséges: a) (u,v) є E Ebben az esetben az u csúcs nem lehet univerzális nyelő, kizárhatjuk. u v u v
Ebben az esetben a v csúcs nem lehet univerzális nyelő, kizárhatjuk. b) (u,v) є E Ebben az esetben a v csúcs nem lehet univerzális nyelő, kizárhatjuk. u v u v
Bármelyik eset áll fenn, mindenképpen 1 összehasonlítást végzünk és eggyel kevesebb csúcs marad az összehasonlítások végére. Az előző 2 pontban leírt összehasonlításokat maximum (n-1)-szer kell végrehajtani. (T=O(n-1)) A végén marad egy csúcs, ami lehet univerzális nyelő, meg kell vizsgálni, hogy ténylegesen az-e. Ez O(n-1)-es műveletigényű. Így kapjuk, hogy a feladatot O(2n-2) műveletigényű algoritmussal meg lehet oldani. O(2n-2)=O(n), def. szerint.
Egy egyszerű példa: A: 0 1 0 1 0 A[1,2]=1, ekkor: e=2, i=3, k=4 0 0 0 1 0 1 1 0 1 0 0 0 0 0 0 i=1, j=2, k=3, e=1 A[1,2]=1, ekkor: e=2, i=3, k=4 1 2 5 3 4 1 2 5 3 4
A[3,2]=1, ekkor: i=4, k=5, e=2 i=4, j=2, k=5, e=2 A[4,2]=0 : k=7 -> az első ciklus vége 1 2 5 3 4 1 2 5 3 4 1 2 5 3 4
ok = ( Σ A[ i, e ]=n-1) Λ (Σ A[ e, i ]=0) A második ciklusban megvizsgáljuk, hogy a lehetséges e csúcs univerzális nyelő-e. Megjegyzés: n n ok = ( Σ A[ i, e ]=n-1) Λ (Σ A[ e, i ]=0) i=1 i=1
2. Abszolút győztes Tournamentnek hívunk egy olyan irányított gráfot, melyben bármely két pontot pontosan egy él köt össze. Amennyiben teljes körmérkőzést játszik n versenyző, olyan sportágban, ahol nincs döntetlen (pl.: ping-pong), akkor az eredményeket egy n pontú tournamenttel ábrázolhatjuk, ahol i-ből j-be vezet él, ha i-edik versenyző legyőzte a j-edik versenyzőt. Adjon algoritmust, amely eldönti, hogy van-e abszolút győztes (aki mindenki mást legyőzött)!
Megoldás: A feladat megoldása ugyanaz, mint az előzőé, kevés eltéréssel. Eltérések: 1) forrást keresünk, nem nyelőt univerzális forrás: olyan uєV csúcs, amelyre n n (Σ A[ i, u ]=0) Λ (Σ A[ u, i ]=n-1) i=1 i=1 2) Két csúcs összehasonlításakor:
Ebben az esetben az u csúcs nem lehet univerzális forrás, kizárhatjuk. a) (u,v) є E Ebben az esetben az u csúcs nem lehet univerzális forrás, kizárhatjuk. b) (u,v) є E Ebben az esetben a v csúcs nem lehet univerzális forrás, kizárhatjuk. u v u v u v u v
Egy egyszerű példa: 1 2 C: 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1 i j köv l (init) 1 2 3 1 C[1,2]=1 => 1 3 4 1 C[1,3]=0 => 4 3 5 3 C[4,3]=1 => 4 5 6 4 C[4,5]=1 => 4 6 7 4 4 5 3
3. Teljes pont Adott egy n pontú irányítatlan gráf. Adjunk algoritmust, amely eldönti, hogy van-e a gráfnak olyan pontja, amely minden más ponttal össze van kötve! Nevezzük ezt a pontot röviden teljes pontnak. Erre nem adható O(n)-es algoritmus…
Megoldás: “favágó”-módon: Minden j є [1..n] : Σ C[i,j] –k közt keresünk i є [1..n] egy olyat, ami egyenlő (n-1)-el. Ez O(n2)-es algoritmus.
Lehet-e jobban? Lényegesen jobban: Nem… Akkor az előbb miért lehetett? Irányított gráfnál két csúcs összehasonlítá- sakor egy csúcsot mindig ki tudtunk zárni. Irányítatlan gráfnál két csúcs “viszonya”: Van köztük él: Nincs köztük él: u v u v
Ha nincs a két csúcs közt él, akkor egyik se lehet teljes pont. Ha a két csúcs közt van él, akkor mindkettő lehet teljes pont, egyiket se zárhatjuk ki…