A részgráf-izomorfia probléma adatbázisokban

Hasonló dokumentumok
Gráf- és részgráf-izomorfizmus problémák kémiai adatbázisokban. Diplomamunka

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2. estis képzés

Hatékony algoritmusok kémiai gráfok részgráf-izomorfia vizsgálatára. BSc szakdolgozat

Hasonlósági keresés molekulagráfokon: legnagyobb közös részgráf keresése

Diszkrét matematika 2.C szakirány

Algoritmusok bonyolultsága

Gráfelméleti feladatok. c f

Diszkrét matematika 1. estis képzés

Algoritmuselmélet. Bonyolultságelmélet. Katona Gyula Y.

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 13.

Diszkrét matematika 2. estis képzés

Függvények növekedési korlátainak jellemzése

Diszkrét matematika 2. estis képzés

2. Visszalépéses stratégia

22. GRÁFOK ÁBRÁZOLÁSA

Logika és számításelmélet. 11. előadás

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Bonyolultságelmélet gyakorlat 06 Gráfos visszavezetések II.

Algoritmuselmélet 18. előadás

Diszkrét matematika 1. estis képzés

2. Visszalépéses keresés

Gráfalgoritmusok ismétlés ősz

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2.C szakirány

Általános algoritmustervezési módszerek

Az optimális megoldást adó algoritmusok

Adatszerkezetek 2. Dr. Iványi Péter

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Amortizációs költségelemzés

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

Programozási módszertan. Mohó algoritmusok

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

KOVÁCS BÉLA, MATEMATIKA I.

A számítástudomány alapjai

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Algoritmusok bonyolultsága

Euler tétel következménye 1:ha G összefüggő síkgráf és legalább 3 pontja van, akkor: e 3

Algoritmuselmélet 1. előadás

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

SzA II. gyakorlat, szeptember 18.

Alap fatranszformátorok II

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 12.

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

Miskolci Egyetem Gépészmérnöki és Informatikai Kar Informatikai Intézet Alkalmazott Informatikai Intézeti Tanszék

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Diszkrét matematika 2.

Diszkrét matematika 2.

Gráfelméleti alapfogalmak

Bonyolultságelmélet. Monday 26 th September, 2016, 18:50

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

ELTE IK Esti képzés tavaszi félév. Tartalom

definiálunk. Legyen egy konfiguráció, ahol és. A következő három esetet különböztetjük meg. 1. Ha, akkor 2. Ha, akkor, ahol, ha, és egyébként.

Programozási segédlet

Érdemes egy n*n-es táblázatban (sorok-lányok, oszlopok-fiúk) ábrázolni a két színnel, mely éleket húztuk be (pirossal, kékkel)

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

Diszkrét matematika 2.C szakirány

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

Diszkrét matematika 2.C szakirány

Egyszerű programozási tételek

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

KOVÁCS BÉLA, MATEMATIKA I.

Számelméleti alapfogalmak

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

Branch-and-Bound. 1. Az egészértéketű programozás. a korlátozás és szétválasztás módszere Bevezető Definíció. 11.

Sali Attila Budapest Műszaki és Gazdaságtudományi Egyetem. I. B. 137/b március 16.

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

Bonyolultságelmélet. Thursday 1 st December, 2016, 22:21

32. A Knuth-Morris-Pratt algoritmus

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus

Algoritmusok és adatszerkezetek gyakorlat 07

Diszkrét matematika 2 (C) vizsgaanyag, 2012 tavasz

Struktúra nélküli adatszerkezetek

RSA algoritmus. P(M) = M e mod n. S(C) = C d mod n. A helyesség igazoláshoz szükséges számelméleti háttér. a φ(n) = 1 mod n, a (a 1,a 2,...

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Nagy Gábor compalg.inf.elte.hu/ nagy

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Javító és majdnem javító utak

Algoritmuselmélet 1. előadás

Ramsey-féle problémák

A félév során előkerülő témakörök

Diszkrét matematika 2.

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Adaptív dinamikus szegmentálás idősorok indexeléséhez

Nagyordó, Omega, Theta, Kisordó

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

Algoritmusok bonyolultsága

3. előadás. Programozás-elmélet. A változó fogalma Kiterjesztések A feladat kiterjesztése A program kiterjesztése Kiterjesztési tételek Példa

Átírás:

A részgráf-izomorfia probléma adatbázisokban BSc szakdolgozat Témavezetők: Dr. Tichler Krisztián ELTE IK Algoritmusok és Alkalmazásaik Tanszék adjunktus Készítette: Vigula Mónika Matematika BSc Alkalmazott matematikus szakirány Dr. Fekete István ELTE IK Algoritmusok és Alkalmazásaik Tanszék egyetemi docens Budapest, 2012

A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszírozásával valósul meg (a támogatás száma TÁMOP 4.2.1./B-09/1/KMR-2010-0003). II

Köszönetnyilvánítás Köszönetet szeretnék mondani témavezetőimnek, dr. Tichler Krisztián Adjunktus Úrnak és dr. Fekete István Docens Úrnak. Köszönöm dr. Tichler Krisztián Adjunktus Úrnak az értékes szakmai és stilisztikai tanácsait, építő javaslatait, melyek nélkülözhetetlenek voltak a téma részletes megértésében és szakdolgozatom elkészítésében. Köszönöm dr. Fekete István Docens Úrnak, hogy megkedveltette velem az algoritmusok érdekes világát, a témafelvetést és a lehetőséget, hogy szakdolgozatom kutatási projekt keretében készíthettem el. Köszönet illeti még Kovács Pétert (hemaxon Kft.) a projekt során adott értékes tanácsaiért. Végül, de nem utolsó sorban szeretnék köszönetet mondani saládomnak és Barátaimnak a tanulmányaim során nyújtott biztatásért és támogatásért. III

Tartalomjegyzék Bevezetés 1 1 Alapfogalmak 4 2 Az Ullmann-algoritmus 6 3 A VF2 algoritmus 12 4 QuickSI 16 4.1 QI-sorozat................................. 16 4.2 QuickSI-algoritmus............................ 17 4.3 Hatékony QI-sorozat kiválasztása.................... 21 4.4 Algoritmusok összehasonlítása...................... 23 5 Szűrés az adatbázison 27 5.1 Általános előszűrő eljárás......................... 27 5.2 Út alapú jellemző részgráfok....................... 31 5.3 Fa alapú indexelés............................ 33 5.4 Tree+Delta................................ 37 Irodalomjegyzék 46 IV

Bevezetés A tudomány, a technológia ezt világosan és erősen akarom mondani nem old meg minden problémát. De tudomány és technológia nélkül semmiféle problémát nem lehet megoldani." Teller Ede A gráfok, mint adatmodellek a természettudományos és a mérnöki kutatások számos területén alkalmazhatóak. Számos esetben pl.: gyógyszerkutatás, képfelismerés, számítógépes tanítás szükség van különböző objektumok hasonlóságának eldöntésére. Amennyiben gráfot használunk az egyes objektumok reprezentálására, a feladatot visszavezethetjük gráfok közti hasonlóság eldöntésére. Gráfizomorfia-vizsgálattal eldönthetjük, hogy két gráf azonos szerkezetű-e. A gráfizomorfizmus probléma biztosan NP-beli, azonban nem ismert, hogy P-beli vagy NP-teljes-e. Néhány gráftípusra léteznek polinomiális algoritmusok, például síkbarajzolható gráfokra [12], fokszámkorlátos gráfokra [18], intervallumgráfokra [17] és permutációgráfokra [7]. Legismertebb gráfizomorfiát eldöntő programcsomag a nyelven implementált ingyenes nauty [19]. Szintén gráfizomorfiát vizsgáló algoritmus a conauto [16], mely a nauty-nál néhány esetben gyorsabb. Hasonlóan vizsgálhatjuk, hogy két adott gráf, G 1 és G 2 esetén G 2 tartalmazza-e G 1 -et. A részgráf-izomorfia-probléma NP-teljes. Részgráf-izomorfiát eldöntő eljárás a J. R. Ullmann 1976-ben publikált algoritmus [21], L. P. ordella és mtsai. 2001- es algoritmusa, a VF2 [9], valamint a H. Shang és mtsai. által 2008-ban publikált algoritmus, a QuickSI [20]. Objektumok feldolgozása során szükség lehet két objektum hasonlóságának megállapítására. Ebben az esetben az objektumokat reprezentáló gráfok legnagyobb csúcsszámú közös részgráfját kell meghatároznunk. Két gráf legnagyobb közös részgráfjának megállapítása NP-teljes feladat [10]. Két gráf legnagyobb közös részgráfját meghatározó algoritmust találunk [6]-ban, [14]-ban és [8]-ban. Jelen dolgozat a részgráf-izomorfia problémával foglalkozik, a gráfizomorfia- és a legnagyobb közös részgráf-problémákkal nem (bár az első speciális eset). A részgráf-izomorfia problémát a kémiai informatika területéről merítettük, így példáink jelentős része molekulagráf. Egy egyszerű molekulát a következőképpen áb- 1

rázolhatunk gráfként. A gráf csúcsai legyenek az egyes atomok, és a gráf élei pedig legyenek az atomok közötti kötéseknek megfelelően. Molekulagráfok esetén nem foglalkozunk a molekulában szereplő hidrogénekkel és a hozzájuk kapcsolódó élekkel, hiszen ezeket kémiai tudásunk alapján meghatározhatjuk [5]. Megjegyezzük, hogy a szakdolgozatban szereplő példák esetén a kötések döntő többsége az egyszerűség kedvéért egyszeres kovalens kötés. Ez azonban nem jelent megszorítást a gráfokra vonatkozóan, hiszen az ismertetett eljárások más típusú kötések illetve a kötéseknek megfelelő élek esetén is alkalmazhatóak. A kémiai informatikában (pl. gyógyszerkutatás során) gyakran merül fel az igény arra, hogy egy adott molekulagráf és molekulagráf-adatbázis esetén adjuk meg azon molekulagráfokat az adatbázisból, melyek részgráfként tartalmazzák az adott molekulagráfot. Mivel a részgráf-izomorfia-probléma NP-teljes, és az adatbázis gyakran több százezer, esetleg millió molekulagráfból áll, ezért azon megoldás, hogy az adatbázis minden egyes gráfjával végezzük el a részgráf-izomorfia-vizsgálatot, a gyakorlatban használhatatlan. Ezért az adatbázison előszűrést végzünk, ezáltal kiszűrve azon gráfokat az adatbázisból, melyeknek biztosan nem részgráfja az adott gráf. sak az ezen eljárás után megmaradt adatbázisbeli gráfokkal végezzük el a részgráfizomorfia-vizsgálatot. A szakirodalomban több, különböző típusú eljárást találhatunk az előszűrésre. Az egyik leggyakoribb szűrési módszer a jellemző részgráfokkal történő előszűrés. Ebben az esetben a gráfadatbázis alapján meghatározott jellemző részgráfok segítségével végzünk szűrést az adatbázison. A jellemző részgráfok kiválasztását indexelésnek nevezzük. Több indexelési eljárást is ismerünk, melyek esetén a jellemző részgráfok különböző szerkezetűek. Út alapú indexelő módszer az R. Giugno és mtsai. publikált eljárása, a GraphGrep [11]. Shijie Zhang és mtsai. cikkében [23] a fa alapú részgráfokkal történő előszűrést vizsgálta. A P. Zhao és mtsai. által 2007-ben publikált algoritmus [24] a gyakori jellemző részfák mellett amennyiben szükséges nem fa alakú részgráfokat is kiválaszt az indexelés során. A szakdolgozat a következőképpen épül fel. Az 1. fejezetben a definíciókat ismertetjük és a részgráf-izomorfia probléma NP-teljességét bizonyítjuk. Ezután két, részgráf-izomorfiát eldöntő algoritmust vizsgálunk: a 2. fejezetben J. R. Ullmann 1976-ben publikált algoritmusát [21] és a 3. fejezetben L. P. ordella és mtsai. 2001-es algoritmusát, a VF2-t. Összehasonlítjuk ezen algoritmusok művelet- és memóriaigényét is. Megjegyezzük, hogy nem célunk meghatározni az összes részgráfizomorfizmust a két gráf között. Abban az esetben, ha van részgráf-izomorfizmus a két gráf között, megadunk egyet, ellenkező esetben hamis visszatérési értékkel jelezzük, hogy a G 2 gráf nem tartalmazza a G 1 gráfot. Szükség esetén az Ullmann- 2

algoritmus, illetve a VF2 kis módosításával azonban az összes találat megadható. Mivel a problémát a kémiai informatika területéről merítettük, így példáink jelentős része molekula, habár az ismertetett algoritmusok más típusú gráfok esetén is alkalmazhatóak. sak abban az esetben tekintünk el a kémiai gráf példától, ha könnyebben elmagyarázható az algoritmus egyszerű, címkézetlen gráf esetén. Az Ullmann-algoritmus és a VF2 elemzése után a 4. fejezetben áttekintjük, hogy milyen módon kódolhatjuk el a gráfokat a hatékony részgráfizomorfia-vizsgálathoz. Ezen áttekintést H. Shang és mtsai. 2008-ban publikált cikke [20] alapján végezzük. Ehhez ismertetjük egy gráf egy sorozatként történő reprezentálását, majd egy újabb részgráf-izomorfiát eldöntő algoritmust ismertetünk, melynek inputjaként kapott G 1 gráf a bemutatott sorozatban van megadva. Végül az általános szűrési eljárást, és az ezen módszer során felvetett problémának, a jellemző részgráfok kiválasztásának különböző módszereit tekintjük át az 5. fejezetben. Először egy út alapú indexelési módszert, a GraphGrep-et [11], majd a fa alapú jellemző részgráfok kiválasztását, a TreePi-t [23] mutatjuk be. Ezután P. Zhao és mtsai. 2007-ben publikált indexelési módszerét [24] vizsgáljuk. A különböző eljárásokat példákkal illusztráljuk. 3

1. fejezet Alapfogalmak 1.1. Definíció Adott két gráf, G 1 = (V 1, E 1 ) és G 2 = (V 2, E 2 ). A G 1 gráf részgráfizomorf a G 2 gráffal, ha létezik olyan f : V 1 V 2 injektív függvény, melyre a következő teljesül: u V 1 v V 1 ((u, v) E 1 (f(u), f(v)) E 2 ). Jelölés: G 1 G 2 Megjegyezzük, hogy címkézett (például kémiai) gráfok esetén további feltételek szükségesek. 1.2. Definíció ímkézett gráf alatt egy G = (V, E, Σ V, Σ E, l V, l E ) hatost értünk, ahol V és E a gráf csúcs-, illetve élhalmazát jelöli, Σ V illetve Σ E a csúcsok és az élek címkéinek halmaza, l V : V Σ V és l E : E Σ E pedig a gráf címkézőfüggvényei. Ekkor a fenti definíció a következőképpen módosul. 1.3. Definíció Adott két címkézett gráf, G 1 = (V 1, E 1, Σ V1, Σ E1, l V1, l E1 ) és G 2 = (V 2, E 2, Σ V2, Σ E2, l V2, l E2 ). A G 1 gráf részgráf-izomorf a G 2 gráffal, ha van olyan f : V 1 V 2 injektív függvény, melyre a következő tulajdonságok teljesülnek: 1. u, v V 1 ((u, v) E 1 ((f(u), f(v)) E 2 l E1 (u, v) = l E2 (f(u), f(v)))) 2. u V 1 (l V1 (u) = l V2 (f(u))) 1.1. Példa Tekintsük az 1.1. ábrán látható G 1 és G 2 gráfokat. Egy lehetséges f : V 1 V 2 : f(u 1 ) = v 2 f(u 2 ) = v 3 f(u 3 ) = v 4 f(u 4 ) = v 7 4

u 1 u 2 u 3 u 4 v 1 v 2 O v 8 N v 7 v 3 v 4 v 6 v 5 G 1 G 2 1.1. ábra. Példa részgráf-izmorfiára 1.4. Tétel Adott két gráf, G 1 = (V 1, E 1 ) és G 2 = (V 2, E 2 ). Annak eldöntése, hogy G 1 G 2 NP-teljes feladat. Mielőtt a tételt bebizonyítanánk, szükségünk van néhány további definícióra. 1.5. Definíció Klikknek nevezünk egy olyan részgráfot, amelynek bármely két különböző pontja között vezet él. 1.6. Definíció A klikk csúcsainak számát a klikk méretének nevezzük. 1.7. Definíció Klikk-probléma: adott egy G gráf és k N szám. Döntsük el, hogy G tartalmaz-e k méretű klikket. Az 1.4. tétel bizonyításához felhasználjuk az alábbi közismert tételt. 1.8. Tétel A klikk-probléma NP-teljes. Bizonyítás: (1.4. tétel) Először bebizonyítjuk, hogy a részgráf-izomorfia-probléma NP-beli: a tanú az f : V 1 V 2 függvény. Polinom időben ellenőrizhető, hogy f kielégíti-e az 1.3. definícióban szereplő feltételeket. Végül a klikk-problémát, mely NP-teljes, polinomiálisan visszavezetjük a részgráf-izomorfia-problémára. Jelöljük (G, k)-val klikk-probléma egy inputját. Legyen G 1 a k pontú teljes gráf, G 2 := G. Ekkor G 1 pontosan akkor részgráf-izomorf G 2 -vel, ha G tartalmaz k méretű klikket. 5

2. fejezet Az Ullmann-algoritmus A következőkben részgráf-izomorfia eldöntésére szolgáló algoritmusokat vizsgálunk. Először J. R. Ullmann 1976-os algoritmusát ismertetjük, mely a mai napig az egyik legtöbbször alkalmazott módszer. Ullmann 1976-os cikkében [21] egy visszalépéses keresésen alapuló algoritmust adott, mely eldönti, hogy G 1 G 2 teljesüle. Az eljárás során egy ún. keresési fát építünk fel, melyben minden csúcs G 1 egy részgráfjának G 2 egy részgráfjára való leképezésnek felel meg. élunk, hogy ezen leképezést bővítve, végül egy f : V (G 1 ) V (G 2 ) injektív függvényt kapjunk, mely a csúcs- és az élcímkéket is megtartja. Ehhez a következőképpen járunk el. Minden u i V 1 csúcshoz rendeljük hozzá a lehetséges képek halmazát: H i := {v j v j V (G 2 ) deg(u i ) deg(v j ) l V1 (u i ) = l V2 (v j )}, ahol deg(u i ) jelöli az u i csúcs fokszámát. 2.1. Példa Tekintsük a 2.1. ábrán látható példát. Az egyszerűség kedvéért tekintsünk el jelen esetben az élek és a csúcsok címkézésétől. u 2 u 3 v 2 v 4 v 6 u 1 u 4 v 1 v 3 v 5 G 1 G 2 2.1. ábra. Példa az Ullmann-algoritmus inputjára 6

A H i halmazokat meghatározva kapjuk: u 1 H 1 = {v 2, v 3, v 4, v 5 } u 2 H 2 = {v 3, v 5 } u 3 H 3 = {v 3, v 5 } u 4 H 4 = {v 2, v 3, v 4, v 5 } Rögzítsünk G 1 csúcsainak egy tetszőleges sorrendjét: u 1, u 2,..., u n. Ekkor a keresési fát a következő gondolatmenettel építjük fel. A fa gyökere legyen az üreshalmaz. Ez lesz a 0. szint. A fa minden egyes csúcsa egy f : V 1 V 2 leképezés, ahol V 1 V 1 és V 2 V 2. Nevezetesen, egy, az i. szinten lévő belső csúcsnak a következő felel meg: f(u 1 ) = v j1 H 1 f(u 2 ) = v j2 H 2. f(u i ) = v ji H i Ezen leképezést kiterjesztjük u i+1 -re úgy, hogy f(u i+1 ) lehetséges értékei a H i+1 halmazból valók legyenek. Így meghatároztuk azon f : V 1 V 2 leképezéseket, melyekre teljesül: f(u i ) = v ji H i i = 1,..., n 1, ahol n 1 := V (G 1 ). 2.2. Példa A 2.1. példa esetén a 2.2. ábrán látható keresési fát kapjuk, ha a csúcsokat az u 1, u 2, u 3, u 4 sorrendben dolgozzuk fel. élunk ezután, hogy ezen leképezések között keressünk egy olyan f-et, mely teljesíti a részgráf-izomorfizmus 1.3. definíciójában szereplő feltételeket, vagy hamis visszatérési értékkel jelezzük, amennyiben nincs ilyen f. Ezen f keresésére visszalépéses keresést használunk a kialakult fán. A teljes fa óriási méretű lehet, ezért nem építjük fel az egész fát explicit módon, csak azon részeit, melyeket be kell járnunk. élunk, hogy a keresés során minél nagyobb részfákat egyben kihagyhassunk, és azon csúcsokat, melyek nem felelnek meg egy részgráf-izomorfizmusnak, minél hamarabb kiszűrjük, ezért ún. Finomítási kritériumokat" vezetünk be. Tekintsük a keresési fa egy belső csúcsát: f(u 1 ) = v j1 H 1 f(u 2 ) = v j2 H 2 7

node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node node u 1 v 2 v 3 v 4 v 5 u 2 v 3 v 5 u 3 node node node node node node node node node node node node node node node u 4 2.2. ábra. A keresési fa a 2.1. ábrán látható input esetén. f(u i ) = v ji H i Az u i+1 csúcshoz hozzárendelhetjük a v H i+1 csúcsot, 1. ha f továbbra is injektív marad: m [1,..., i](v v jm ) 2. ha léteznek élek a megfelelő képek között, és az élcímkék is megegyeznek: m [1,..., i]((u m, u i+1 ) E 1 ((f(u m ), f(u i+1 )) E 2 l E1 (u m, u i+1 ) = l E2 (v jm, v))) 3. ha u i+1 minden szomszédjának lehet olyan képe, amely szomszédja v-nek Amennyiben ezen feltételek valamelyike nem teljesül, akkor töröljük v-t u i lehetséges képei közül. 2.3. Példa Az 1. kritérium alapján a 2.1. példa esetén törölhetjük a pirossal jelölt csúcsokat a keresési fából, mivel ekkor f(u 1 ) = f(u 2 ) = v 5, ami ellentmond az injektivitásnak. A finomítási eljárás során folyamatosan figyeljük, hogy valamelyik H i üres halmaze. Ezen esetben az algoritmus visszalép az előző szintre. Amennyiben az algoritmus a 0. szintről lépne vissza, az eljárást hamis visszatérési értékkel leállítjuk. Az algoritmus implementálásához szükséges két tömb: F = (F 1,..., F n1 ) és H = (H 1,..., H n2 ), ahol n 1 := V (G 1 ), n 2 := V (G 2 ), illetve egy M = (m ij ) n1 n 2 mátrix. H segítségével tároljuk, hogy G 2 mely csúcsait használtuk egy belső lépés 8

során, azaz H i = 1, ha G 2 i. csúcsát megfeleltettük valamely u j V 1 csúcsnak. A megfeleltetéseket az F vektorban tároljuk: F j = i, ha f(u j ) = v i. A keresés lehetséges lépéseit az M mátrix segítségével írjuk le. A mátrix a keresési fa egy szintjén a lehetséges elágazásokat tárolja. Az M mátrix segítségével a keresési fa méretét is csökkenthetjük, ahol inicializáláskor { 1 ha deg(ui ) deg(v j ) l V1 (u i ) = l V2 (v j ) m ij := 0 különben Jelöljük d-vel, hogy a keresési fa épp mely szintjén járunk. Részgráf-izomorfizmust abban az esetben találunk, amennyiben minden V 1 -beli csúcsnak megfeleltettünk egy V 2 -beli csúcsot az 1.3. definíciónak megfelelően, azaz d > n 1. Az algoritmus 1 3. sora ezen tulajdonságot ellenőrzi. A 4 5. sor felsorolja azon fel nem használt csúcsokat, melyek kielégítik a Finomítási kritériumokat. Finomítási kritériumok: 1. l V1 (u d ) = l V2 (v k ) 2. i [1,..., n 2 ]((u i, u d ) E(G 1 ) ( j [1,..., n 2 ])(v j, v k ) E(G 2 ) m ij = 1 l E1 (u i, u d ) = l E2 (v j, v k )) Abban az esetben, ha a Finomítási kritérium hamis az (u d, v k ) párra, m d,k -t 0-ra állítjuk, hiszen f(u d ) = v k biztosan nem lehetséges. Az algoritmus fontos lépése az M mátrix ritkítása, melyet minden állapotmentést követően elvégzünk. Ekkor megvizsgáljuk, hogy ha m ij igaz, akkor a G 1 gráf i. csúcsának a szomszédainak lehetséges képei között van-e olyan csúcs, mely a G 2 gráf j. csúcsának szomszédja. Amennyiben ez a feltétel nem teljesül, m ij -t hamisra állítjuk. Ha sikerült a mátrix valamely elemét hamisra állítani, a mátrixot megpróbáljuk újra ritkítani. Az algoritmus a 14. sorban visszalép az előző szintre, amennyiben a jelenlegi szinten nem talált részgráf-izomorfizmust. Az algoritmus futása során fontos kérdés, hogy hogyan válasszuk meg a keresési sorrendet úgy, hogy minél hamarabb kiszűrjük azon csúcsokat a keresési fából, melyek biztosan nem felelnek meg egy részgráf-izomorfizmusnak G 1 és G 2 között. Ezen kérdést a későbbiek során részletesen megvizsgáljuk. Elöljáróban tekintsünk egy példát arra, hogy valóban érdemes a sorrendmegválasztás. 2.4. Példa Legyen az Ullmann-algoritmus inputja a 2.3. ábrán látható gráfok. A H i halmazokat meghatározva kapjuk: 9

Algoritmus 1. UllmannAlgoritmus(G 1, G 2, H, F, d) Input : G 1, G 2 gráfok F : n 1 hosszú vektor, kezdetben minden értéke 0 H: n 2 hosszú vektor, kezdetben minden értéke 0 d: keresési mélység, kezdetben d := 0 M: mátrix, mely korábban inicializálásra került? Output: Logikai: G 1 G 2 1: if d > n 1 then 2: return igaz 3: end if 4: for each 1 j n 2 do 5: if Finomítási kritérium(d, j)=hamis then 6: Az állapot mentése és a mátrix ritkítása 7: if UllmannAlgoritmus(G 1, G 2, H, F, d + 1) then 8: return igaz 9: else 10: Előző állapot visszaállítása 11: end if 12: end if 13: return hamis 14: end for each u 1 H 1 = {v 1, v 9 } u 2 H 2 = {v 2, v 3, v 4, v 5, v 6, v 7, v 8 } u 3 H 3 = {v 2, v 3, v 4, v 5, v 6, v 7, v 8 } u 4 H 4 = {v 2, v 3, v 4, v 5, v 6, v 7, v 8 } u 5 H 5 = {v 2, v 3, v 4, v 5, v 6, v 7, v 8 } u 6 H 6 = {v 2, v 3, v 4, v 5, v 6, v 7, v 8 } u 7 H 7 = {v 2, v 3, v 4, v 5, v 6, v 7, v 8 } u 8 H 8 = {v 2, v 3, v 4, v 5, v 6, v 7, v 8 } u 9 H 9 = {v 1, v 9 } Tegyük fel, hogy a keresési fa 1. szintjét u 1, a 2. szintjét u 3 szerint építjük fel. Az így kapott keresési fa felső két szintjét láthatjuk a 2.4. ábrán. Vegyük észre, hogy (u 1, u 2 ) E 1 és (u 2, u 3 ) E 1, így szükséges, hogy (f(u 1 ), f(u 2 )) E 2 és (f(u 2 ), f(u 3 )) E 2 teljesüljön. Ezen észrevétel alapján törölhetünk a keresési fa 2. szintjén 11, pirossal jelölt csúcsot. 10

v 1 v 2 N u 3 u 4 v 3 v 4 u 1 u 2 N u 5 v 9 N v 8 v 5 u 7 u 6 v 7 v 6 G 1 G 2 2.3. ábra. Példa az Ullmann-algoritmus inputjára u 1 v 1 v 9 u 3 v 2 v 3 v 4 v 5 v 6 v 7 v 8 v 2 v 3 v 4 v 5 v 6 v 7 v 8 2.4. ábra. A keresési fa felső két szintje a 2.3. ábrán szereplő inputgráfok esetén Az Ullmann-algoritmus memóriaigénye O(N 3 ), ahol N := n 1 + n 2, mivel minden lépésben eltároljuk az M mátrixot, és a keresési fa konstrukciója alapján n 1 különböző lépés lehet. 11

3. fejezet A VF2 algoritmus Ezen fejezetben L. P. ordella, P. Foggia,. Sansone és M. Vento 2001-ben publikált algoritmusát [9], a VF2-t elemezzük. Az eredeti cikkben a részgráf-izomorfiaproblémát a szerzők irányított gráfokra vizsgálták. Ezen algoritmust módosítottuk úgy, hogy irányítatlan gráfokra oldja meg a részgráf-izomorfia-problémát, mivel fő célunk a kémiai gráfok részgráf-izomorfia-vizsgálata, és ezen gráfok irányítatlanok. Ezen módszer is, csakúgy mint a korábban ismertetett Ullmann-algoritmus, keresési fát épít fel. Ezen fán visszalépéses keresés segítségével keresünk részgráfizomorfizmust (1.3. definíció, 4. oldal). Az algoritmus fő gondolatmenete a következő: minden lépésben egy parciális izomorfizmust tekint G 1 és G 2 egy feszített részgráfja között, s ezen parciális izomorfizmust próbálja kibővíteni úgy, hogy végül részgráf-izomorfizmust kapjunk. Amennyiben nem lehetséges a kibővítés, visszalép az előző szintre. Az algoritmus során egy állapotnak egy parciális izomorfizmus felel meg G 1 és G 2 egy feszített részgráfja között, mely kielégíti a részgráf-izomorfizmus definíciójában szereplő feltételeket. Jelöljük az egyes állapotokat s-sel, M(s)-sel pedig az s állapothoz tartozó azon (u i, v j ) párokat, melyre u i V 1 v j V 2 f(u i ) = v j. A kezdőállapot legyen s 0. Ekkor M(s 0 ) =. élunk ezen M(s)-t úgy kibővíteni, hogy végül részgráf-izomorfizmust kapjunk G 1 és G 2 között, vagy hamis visszatérési értékkel jelezni, amennyiben G 1 G 2. Minden lépésben meghatározzuk azon jelölt (u, v) párokat, melyre u V 1 v V 2 és M(s ) := M(s) {(u, v)} esetén továbbra is teljesülnek az 1.3. definícióban szereplő feltételek. Jelöljük P (s)-sel az s állapothoz tartozó jelölt párokat tartalmazó halmazt. P(s) minden egyes (u, v) elemére megvizsgáljuk, hogy M(s)-et (u, v)-vel bővítve továbbra is teljesülnek-e a definícióbeli tulajdonságok. Jelöljük F F (s, u, v)-vel (feasibility function) azon logikai függvényt, mely ezt a vizsgálatot elvégzi. Amennyiben F F (s, u, v) értéke igaz, M(s ) := M(s) {(u, v)}-vel folytatjuk a vizsgálatot, ellenkező esetben P (s) hal- 12

mazból töröljük az (u, v) párt. Ha P (s) =, visszalép az előző szintre. Ha az eljárás s 0 -ból is visszalép, hamis visszatérési értékkel leáll, mivel nincs részgráf-izomorfizmus G 1 és G 2 között. Algoritmus 2. M atch(s) Input : egy s állapot; a kezdőállapot, s 0 esetén M(s 0 ) =? Output: Logikai: G 1 G 2 1: if M(s) G 1 összes csúcsát lefedi then 2: return igaz 3: else 4: P(s) halmaz kiszámolása 5: for each (u, v) P (s) do 6: if FF(s,u,v)=igaz then 7: M(s ) := M(s) {(u, v)} 8: Állapot mentése 9: if Match(s ) then 10: return igaz 11: else 12: Előző állapot visszaállítása 13: end if 14: end if 15: end for each 16: return hamis 17: end if A következőkben a P (s) és az F F (s, u, v) kiszámítását részletezzük. Annak kiküszöbölésére, hogy egy parciális izomorfizmust többször vizsgáljunk, feltesszük, hogy a V 1 teljesen rendezett halmaz. Jelöljük G 1 (s)-sel, illetve G 2 (s)-sel azon csúcsokat, melyeket M(s) lefed G 1 -ben, illetve G 2 -ben. Ezen két halmaz egyértelműen meghatározott. Legyen u i G 1 (s) egy tetszőleges csúcs. Jelölje N(u i ) az u i szomszédainak halmazát, azaz N(u i ) := {u u V 1 (u i, u) E 1 }. Jelölje N(G 1 (s)) a G 1 (s)-beli csúcsok szomszédainak halmazát, azaz N(G 1 (s)) := N(u i ). N(G 2 (s)) hasonlóan definiálható. u i G 1 (s) Az ábrán a következő színezést alkalmaztuk: kék színre szineztük a G 1 (s), illetve a G 2 (s) halmazt. Az N(G 1 (s))\g 1 (s) illetve N(G 2 (s))\g 2 (s) halmazt zöld szín jelöli. A jelölt párokat tartalmazó halmaz, P (s) kiszámításakor kétféle esetet különböztetünk meg G 1 (s) és N(G 1 (s)) kapcsolata alapján. 13

1. eset: N(G 1 (s))\g 1 (s) A keresési tér minimalizálása érdekében ekkor az N(G 1 (s))\g 1 (s) sorszám szerint minimális csúcsának melyet jelöljünk u-val keressük az izomorf képét, mely csak az N(G 2 (s))\g 2 (s) halmazból kerülhet ki, mivel u-nak van G 1 (s)- beli szomszédja, így képének kell, hogy legyen N(G 2 (s))\g 2 (s)-beli szomszédja az élstruktúra megtartása miatt. Így P (s) := {min(n(g 1 (s))\g 1 (s))} (N(G 2 (s))\g 2 (s)). V 1 V 2 G 1 (s) u G 2 (s) 3.1. ábra. 1. eset 2. eset: N(G 1 (s))\g 1 (s) = Amennyiben s s 0, a gráf nem összefüggő. Az előző esethez hasonló gondolatmenettel adódik, hogy P (s) := {min(v 1 \G 1 (s))} (V 2 \G 2 (s)). V 1 V 2 G 1 (s) u G 2 (s) 3.2. ábra. 2. eset Az F F (s, u, v) logikai függvény alkalmazásával a keresési fát csökkenthetjük. Ha értéke igaz, akkor garantált, hogy s := s {(u, v)} is (parciális) izomorfizmus G 1 és G 2 között, amennyiben s az. F F (s, u, v) kiszámításánál megvizsgáljuk, hogy u és v kompatibilis-e. Szükséges, hogy a csúcs- és az élcímkék egyezőek legyenek, illetve a 3.3. ábrán jelölt halmazok számosságára vonatkozó 3. feltételnek teljesülnie kell. Formálisan, a következő feltételeknek kell teljesülniük: 1. l V1 (u) = l V2 (v) 14

2. (u i, v j ) M(s) ((u, u i ) E 1 ((v, v j ) E 2 l E1 (u, u i ) = l E2 (v, v j ))) 3. N(G 1 (s) {u})\(g 1 (s) {u}) N(G 2 (s) {v})\(g 2 (s) {v}) V 2 V 1 G 1 (s) u? v G 2 (s) 3.3. ábra. F F (s, u, v) 3. feltétel A VF2 algoritmus implementálása során az alábbi tömböket használjuk: F = (F 1,..., F n1 ), H = (H 1,..., H n2 ), S = (S 1,..., S n1 ) és T = (T 1,..., T n2 ), ahol n 1 := V 1 és n 2 := V 2. F és H szerepe ugyanaz, mint az Ullmann-algoritmus esetén bemutatott tömböknek. F tárolja az aktuális parciális izomorfizmust: F i = v j, ha G 2 j. csúcsát feleltettük meg G 1 i. csúcsának, ebben az esetben H j = 1. Az S = (S 1,..., S n1 ) és T = (T 1,..., T n2 ) tömbökben tároljuk az G 1 (s) és N(G 1 (s)), illetve G 2 (s) és N(G 2 (s))-beli csúcsokat. S i 0, ha u i G 1 (s) u i N(G 1 (s)). Ebben az esetben S i értéke azon keresési mélység, melynek során u i bekerült a G 1 (s) N(G 1 (s)) halmazba. T elemeinek értéke hasonlóan definiálható G 2 (s) és N(G 2 (s)) alapján. Ezen vektorok mellett minden keresési mélység esetén nyilvántartjuk a keresési mélységet, N(G 1 (s))\g 1 (s) és N(G 2 (s))\g s (s) értékét, valamint azon (u, v) párt, mellyel kiegészítettük az s parciális izomorfizmust. Ezen adatszerkezetek alkalmazása mellett annak ellenőrzése, hogy u i N(G 1 (s))\g 1 (s) konstans műveletigényű, mivel F i = 0 és S i > 0 ellenőrzése konstans időben megtehető. Így P (s) kiszámítása legfeljebb N := n 1 + n 2 -vel arányos, míg F F (s, u, v) kiszámítása N(u)-val és N(v)-vel arányos. A fenti tömbök fontos tulajdonsága, hogy amennyiben az i. tömbelem nem nulla az s állapot során, akkor az összes olyan állapot során, melyet s kibővítésével értünk el, továbbra sem lesz nulla. Így nem szükséges minden állapothoz külön tárolni ezen 4 tömböt. Abban az esetben, ha az algoritmus visszalép az előző szintre, mert nem tudja a parciális izomorfizmust tovább bővíteni, az állapothoz eltárolt konstans értékek alapján visszaállítja az előző állapotot. Mivel a visszalépéses keresés során legfeljebb N állapot lehet, és minden állapothoz konstans méretű memóriát használunk, valamint a tömbök mérete is N-nel arányos, így a VF2 algoritmus memóriaigénye O(N). 15

4. fejezet QuickSI Ebben a fejezetben egy újabb részgráf-izomorfiát eldöntő algoritmust vizsgálunk H. Shang, Y. Zhang, X. Lin és J. Xu Yu cikke [20] alapján. Először egy gráf egy lehetséges sorozatként történő reprezentációját, a QI-sorozatot részletezzük, majd egy újabb részgráf-izomorfiát eldöntő algoritmust, a QuickSI-módszert (quick subgraph isomorphism) vizsgálunk, melynek során a G 1 input gráf a QI-sorozattal van adva. Ezután heurisztika segítségével megmutatjuk, hogyan állítsuk elő egy gráf QIsorozatát úgy, hogy a keresési fa méretét csökkenthessük. A fejezet végén bemutatunk egy heurisztika megoldást az Ullmann-algoritmusnál említett kérdésre, hogy mily módon határozzuk meg a csúcsok feldolgozási sorrendjét úgy, hogy a keresési fa mérete várhatóan minél jobban csökkenjen, a QI-sorozat segítségével a fejezet végén válaszoljuk meg (azaz miképpen válasszunk a lehetséges QI-sorozatok közül). 4.1. QI-sorozat Ezen alfejezetben egy gráf egy lehetséges sorozattá történő alakítását mutatjuk be, melyet a későbbiek során, egy újabb részgráf-izomorfiát meghatározó algoritmus bemutatása esetén felhasználunk. 4.1. Definíció QI-sorozat: Adott egy n csúcsú G gráf. Ezen gráf egy lehetséges QIsorozatán az alábbi kifejezést értjük: QI G = T 1 R 11... R 1i1 T 2 R 21... R 2i2... T n R n1... R nin, mely G egy feszítőfáját határozza meg. T i számos információt tárol: 1. T i.v egy u j V (G) csúcsot 16

2. [T i.p, T i.l] egy párt, ahol T i.p a T i.v csúcs szülőjét a feszítőfában, T i.l pedig a T i.v csúcs címkéjét jelöli Fontos megemlíteni, hogy a T 1.v, T 2.v,..., T n.v határozza meg a csúcsok feldolgozási sorrendjét ( n i=1 T i.v = V (G)). Mivel a QI-sorozat feszítőfát határoz meg G-ben, így az esetleges fokszámfeltételt vagy a feszítőfában nem szereplő éleket is tárolnunk kell. Ezen extra információkat R ij segítségével tároljuk. A fokszámfeltételt [deg : d] formában tároljuk, ahol d a T i.v csúcs fokszáma a G gráfban. Annak kiküszöbölésére, hogy felesleges információt ne jegyezzünk fel, d 2 esetén nem szerepel a fokszámfeltétel. Extra élt olyan él, mely nem szerepel a feszítőfában [edge : k] formában tüntetünk fel, amennyiben (T i.v, T k.v) E(G) és i > k. R ij indexében j az extra feltétel sorszámát jelöli. Megjegyezzük, hogy nem feltétlen tartozik minden T i.v csúcshoz extra információ. Egy gráfnak több QI-sorozata is lehet, de egy QI-sorozat egyértelműen meghatározza a gráfot. 4.1. Példa Legyen G 1 a 4.2. ábrán szereplő gráf. G 1 két lehetséges QI-sorozatát mutatja be a 4.1. ábra. Vegyük észre, hogy az 1. QI-sorozat a csúcscímkék előfordulási száma alapján növekvően rendezett, mivel az N csúcscímkéjű csúcsok száma kisebb, mint a címkéjű csúcsok száma; míg a 2. QI-sorozat nem ilyen. Mivel két különböző QI-sorozat esetén a keresési fa mérete különböző, ezért a későbbiek során megvizsgáljuk, hogy hogyan határozzunk meg egy adott gráf hatékony QI-sorozatát. 4.2. Tétel Legyen adott két gráf, G 1 és G 2. Tegyük fel, hogy QI G1 és QI G2 megegyezik. Ekkor G 1 és G 2 is megegyezik. Bizonyítás: QI G1 egyértelműen meghatározza G 1 -t, hasonlóan QI G2 egyértelműen meghatározza G 2 -t. Mivel a két QI-sorozat megegyezik, így G 1 és G 2 is. 4.2. QuickSI-algoritmus Ebben az alfejezetben a QuickSI (quick subgraph isomorphism) algoritmust ismertetjük. Legyen G 1 és G 2 a két input gráf, eldöntendő, hogy G 1 G 2. A QuickSI algoritmus segítségével megvizsgáljuk, hogy G 2 -nek van-e olyan G 2 részgráfja, melyre 17

T ype [T i.p, T i.l] T i.v T 1 [0, N] u 1 T 2 [1, ] u 2 R 21 [deg : 3] T 3 [2, ] u 3 T 4 [3, ] u 4 T 5 [4, ] u 5 T 6 [5, ] u 6 T 7 [6, ] u 7 R 71 [edge : 2] T ype [T i.p, T i.l] T i.v T 1 [0, ] u 4 T 2 [1, ] u 5 T 3 [1, ] u 3 T 4 [2, ] u 6 T 5 [4, ] u 7 T 6 [5, ] u 2 R 61 [deg : 3] R 62 [edge : 3] T 7 [6, N] u 1 4.1. ábra. G két lehetséges QI-sorozata QI G1 és QI G 2 megegyezik. Ekkor a 4.2. tétel alapján G 1 G 2 teljesül. Az algoritmus a következő inputot várja: 1. QI G1 -t 2. G 2 gráfot 3. F = (F 1,..., F n1 ) és H = (H 1,..., H n2 ) tömböt, ahol F és H minden értéke 0 4. keresési fa aktuális szintjét, értéke kezdetben 0 Hasonlóképpen, mint az Ulmann-algoritmus és VF2 esetén, az F tömb segítségével tároljuk az aktuális parciális izomorfizmust: F i = v j, ha a T i.v csúcsot megfeleltettük a v j V 2 csúcsnak. A H = (H 1, H 2,..., H n2 ) bináris tömb segítségével tároljuk, hogy G 2 mely csúcsait feleltettük meg valamely u i V 1 csúcsnak. Tegyük fel, hogy F 1, F 2,..., F i egy parciális izomorfizmus G 1 és G 2 között. Ekkor a QIsorozatban szereplő esetleges R ij [deg : d] fokszámfeltétel esetén deg G2 (F i ) d, míg R ij = [edge : k] esetén (F i, F k ) E 2 teljesül. Az algoritmus 1-3. sora a keresési mélység vizsgálatával ellenőrzi, hogy részgráfizomorfizmust találtunk-e G 1 és G 2 között. Ha d > n 1, akkor G 2 -nek találtunk olyan G 2 részgráfját, melynek QI-sorozata megegyezik G 1 QI-sorozatával. Ekkor a 4.2. tétel következtében G 1 G 2, így az algoritmus igaz visszatérési értékkel terminál. Ellenkező esetben a T d.v csúcsnak olyan képét keresi, melyre teljesülnek az esetleges fokszám- és visszakötő él feltételek, valamint a csúcs- és élcímkék is megegyeznek. Amennyiben nem talál megfelelő képet T d.v-nek, visszalép az előző szintre. Abban az esetben, ha az összes esetet végigtekintve nem talált részgráf-izomorfizmust, hamis visszatérési értékkel terminál. 18

4.2. Példa Tekintsük a következő példát. Legyen G 1 a 4.2. ábrán szereplő gráf, G 2 az adatbázisbeli G 2 gráf. A QuickSI algoritmus észreveszi, hogy v 1 -t megfeleltetheti T 1.vnek, így F 1 := v 1 és H 1 := 1 módosítással tárolja a parciális izomorfizmust. Ekkor V := {v 2 }. l(u 2 ) = T 2.l, de a fokszámfeltétel, [deg : 3] ellenőrzése során észreveszi, hogy deg G2 (v 2 ) = 2 3, így H 1 -et 0-ra módosítja és visszalép az előző szintre. T 1.v-t más G 2 -beli csúcsnak, v 9 -nek felelteti meg. Végül az algoritmus talál egy részgráf-izomorfiát G 1 és G 2 között: F = [v 9, v 8, v 7, v 6, v 5, v 4, v 3 ]-t vagy F = [v 9, v 8, v 3, v 4, v 5, v 6, v 7 ]-t. A 3. algoritmus műveletigényének elemzéséhez vezessük be az alábbi fogalmakat. 4.3. Definíció Adott a 3. algoritmus inputja, QI G1 és G 2. Jelöljük B j -vel a QI j G 1 és G 2 közötti parciális izomorfizmusok számát, ahol QI j G 1 jelöli a QI G1 első j csúcsát tartalmazó kezdőszeletét: QI j G = T 1R 11... R 1i1 T 2 R 21... R 2i2... T j R j1... R jij. Ekkor a 3. algoritmus műveletigényének, T (QI G1, G 2 )-nek a nagyságrendje a következőképpen számítható. Mivel minden V 2 -beli csúcsra előre kiszámíthatjuk a fokszámot, így a QI j G 1 és G 2 közti parciális izomorfizmus bővítése során a G 1 QIsorozatában szereplő esetleges fokszámfeltétel teljesülését O(1) idő alatt ellenőrizhetjük G 2 -ben. Hasonlóan, ha G 2 -t csúcsmátrix segítségével tároljuk, a visszakötő élre vonatkozó feltételnek az ellenőrzése O(1) időben elvégezhető. A parciális izomorfizmus bővítéséhez szükségünk van azon csúcsok meghatározására, melyek F Tj.p-nek szomszédja G 2 -ben, és még nem feleltettük meg valamely G 1 -beli csúcsnak. Ezen csúcsokat tartalmazó halmazt O(deg G2 (F Tj.p)) idő alatt határozhatjuk meg. Kezdetben T 1.v lehetséges képeinek halmazát úgy kaphatjuk meg, ha u G 2 -beli csúcsra ellenőrizzük, hogy T 1.v és u csúcscímkéje megegyezik-e. Ezen művelet Θ(n 2 ) időt igényel. Ezen gondolatmenet alapján T (QI G1, G 2 ) kiszámítására a (4.1) egyenlőtlenséget kapjuk, melyet felülről becsülünk (4.2). Megjegyezzük, hogy T (QI G1, G 2 ) pontos értéket nem tudjuk meghatározni, mivel a 3. algoritmus leáll abban az esetben, ha talált egy részgráf-izomorfizmust G 1 és G 2 között. T (QI G1, G 2 ) = O ( n 2 + B 1 r 1 + n 1 1 B k k=1 l=1 n 1 deg(k, l) r k+1 ) (4.1) ( ) O n 2 + B 1 r 1 + B k deg max (G 2 ) r k+1 k=2 (4.2) Ezen egyenlőtlenségek esetén r l jelöli annak a vizsgálatnak a költségét, hogy a parciális izomorfizmus bővítése során T l.v és képének csúcscímkéje azonosak-e, illetve 19

Algoritmus 3. QuickSI(QI G1, G 2, F, H, d) Input : QI G1 : G 1 gráf QI-sorozata G 2 = (V 2, E 2 ) gráf F : n 1 hosszú tömb, kezdetben minden értéke 0 H: n 2 hosszú tömb, kezdetben minden értéke 0 d : keresési mélység, értéke kezdetben 1? Output: Logikai: G 1 G 2 1: if d > n 1 then 2: return igaz 3: end if 4: T := T d 5: V := 6: if d = 1 then 7: V := {v v V 2 l(v) = T.l H v = 0} 8: else 9: V := {v v V 2 (v, F T.p ) E 2 l(v) = T.l H v = 0} 10: end if 11: for each v V do 12: for each R dj QI G1 do 13: if R dj nem teljesül then 14: goto 11. sor 15: end if 16: end for each 17: F d := v 18: H v := 1 19: if QuickSI(QI G1, G 2, F, H, d + 1) then 20: return igaz 21: end if 22: H v := 0 23: end for each 24: return hamis 20

u 1 u 2 N u 3 u 4 u 5 u 7 G 1 u 6 4.2. ábra. G 1 teljesülnek-e a T l.v csúcshoz tartozó extra feltételek, azaz r l := 1+ {R il R il QI G1 }. A 3. algoritmus memóriaigénye Θ( QI G1 + G 2 ), ahol G 2 jelöli a G 2 gráf tárolásához szükséges memóriát. 4.3. Hatékony QI-sorozat kiválasztása A hatékony QI-sorozat kiválasztását [20] alapján határozzuk meg. Mint már korábban említettük, egy gráfnak több QI-sorozata lehet, s ezen QI-sorozatok esetén a részgráf-izomorfia-vizsgálat költsége különböző. Tekintsük erre a következő példát. 4.3. Példa Legyen G 1 a 4.2. ábrán látható gráf, melynek két QI-sorozata szerepel a 4.1. ábrán, G 2 pedig legyen a 4.3. ábrán látható gráf. Ekkor az első QI-sorozat alapján a részgráf-izomorfia-vizsgálat költsége T (QI G1, G 2 ) 37, míg a 2. QI-sorozat alapján T (QI G1, G 2 ) 161. A T (QI G1, G 2 )-re vonatkozó (4.2) egyenlőtlenség alapján B j minimimalizálásával a részgráf-izomorfia-vizsgálat költsége is csökken, azonban G 1 optimális QIsorozatának meghatározása túl költséges ahhoz, hogy B j -t minimalizálhassuk. Ehelyett B j -t heurisztika segítségével próbáljuk meg csökkenteni, melyhez szükségünk van néhány definícióra. 4.4. Definíció Adott egy x csúcscímke. Definiáljuk x átlagos belső tartóját, φ(x)-et a következőképpen: φ(x) := {u G D(u V (G ) l VG (u) = x)} {G G D u V (G )(l VG (u) = x)}. Például a φ() az az érték, melyet úgy kapunk, ha -atomok számát D-ben elosztjuk azon gráfok számával, melyek tartalmaznak -t. Hasonlóan definiálhatjuk φ(y)-t, ahol y egy tetszőleges élcímke. 21

N G 2 4.3. ábra. G 2 4.5. Definíció Adott egy y élcímke. Definiáljuk y átlagos belső tartóját, φ(y)-t a következőképpen: φ(y) := {e G D(e E(G ) l EG (v) = y)} {G G D e E(G )(l EG (e) = y)}. 4.6. Definíció Adott a G 1 gráf és egy u V 1 csúcs. Definiáljuk u átlagos belső tartóját, φ(u)-t a következőképpen: φ(u) := φ(l V1 (u)). 4.7. Definíció Adott a G 1 gráf és egy e E 1 él. Definiáljuk e átlagos belső tartóját, φ(e)-t a következőképpen: φ(e) := φ(l EG1 (e)). G 1 hatékony QI-sorozatának meghatározásához számítsuk ki minden G 1 -beli csúcsra és élre az átlagos belső tartót. Készítsük el ezen értékek alapján G w súlyozott gráfot G 1 -ből úgy, hogy minden csúcshoz és élhez rendeljük hozzá az átlagos belső tartóját. 4.4. Példa Tegyük fel, hogy a 4.2. ábrán látható G 1 gráf esetén a 4.4. ábrán szereplő értékeket kaptuk. Ezen értékek alapján kapott G w gráf a 4.5. ábrán szerepel. A könnyebb áttekinthetőség érdekében a csúcsok és az élek átlagos belső tartóját különböző szín jelöli. x φ(x) N 1.5 6.1 y φ(y) N 1.4 5.6 4.4. ábra. súcs- és élcímkék belső tartója Ezután a G w egy minimális feszítőfája alapján készítjük el a G 1 gráf QI-sorozatát. Egy minimális feszítőfa meghatározásához a Prim-algoritmust [13] használjuk, melyet kiegészítünk azon esetekre vonatkozó élválasztással, melyek esetén a Primalgoritmus véletlenszerűen választana egy élt a minimális súlyú élek közül. Jelölje 22

T az aktuális feszítőfát G 1 -ben, V T és E T pedig a feszítőfához tartozó csúcs- és élhalmazt. Legyen P azon jelölt éleket tartalmazó halmaz, melyek közül kiválasztjuk a következő lépésben a feszítőfabeli élt. Az első lépésben kiválasztjuk azon G w -beli élt, melynek az átlagos belső tartója a legkisebb. Abban az esetben, ha több ilyen él is van, akkor azt az élt, mely csúcsainak fokszámösszege minimális, egyéb esetben véletlenszerűen választunk. Az első feszítőfabeli él, (u, v) kiválasztása után meghatározzuk, hogy mely csúcs legyen T 1.v és T 2.v. Ha φ(u) φ(v), akkor T 1.v legyen az a csúcs u és v közül, melynek az átlagos belső tartója minimális. Ellenkező esetben T i.v legyen u és v közül az csúcs, melynek fokszáma nagyobb. Abban az esetben, ha a fokszámok is megegyeznek, véletlenszerűen válasszunk. Az élek és a csúcsok közti sorrend megválasztását az indokolja, hogy korábban határozzuk meg a ritkábban előforduló - pl.: N, O - csúcsok képét, s csak ezután keressük a gyakori csúcsok - kémiai gráfok esetén pl.: - képét. Az Élkiválasztás(G w, P ) algoritmus azzal az esettel foglalkozik, mikor több olyan minimális súlyú él van, melyek közül választjuk ki a következő feszítőfabeli élt. Ekkor válasszuk azt élt, mely az új csúccsal a legnagyobb részgráfot feszíti G 1 -ben. Amennyiben több ilyen csúcs van, akkor azt, amelynek a fokszáma a legkisebb, egyébként válasszuk ki a csúcsot véletlenszerűen. 4.5. Példa G 1 legyen a 4.2. ábrán látható gráf, melyből az átlagos belső tartók kiszámolása után a 4.5. ábrán szereplő gráfot kapjuk. Kezdetben az (u 1, u 2 ) él esetén minimális az átlagos belső tartó, így a T feszítőfához hozzáadjuk az (u 1, u 2 ) élt. Ezután P = {(u 2, u 3 ), (u 2, u 7 )}. Mivel u 3 és u 7 fokszáma megegyezik, továbbá a feszített részgráfok is azonos méretűek, így véletlenszerűen választunk u 3 és u 7 közül. Legyen u 3 a kiválasztott csúcs. Tegyük fel, hogy ezen gondolatmenetet folytatva már az (u 3, u 4 ), (u 4, u 5 ), (u 5, u 6 ) és (u 6, u 7 ) éleket is hozzáadtuk a feszítőfához. Ekkor az (u 2, u 7 ) él extra élként szerepel G 1 QI-sorozatában. 4.4. Algoritmusok összehasonlítása Az Ullmann- és a QuickSI-algoritmust a [20] cikk alapján hasonlítjuk össze. Az Ullmann-algoritmus és a QuickSI-algoritmus futásidejét az AIDS Antiviral adatbázison tesztelve hasonlítjuk össze. Utóbbi esetén külön megvizsgáljuk, hogy mennyire befolyásolja a G 1 gráf egy véletlen és egy hatékony QI-sorozata az eredményt. Az általános adatbázis, melyet algoritmusok hatékonyságának megállapításához hasz- 23

Algoritmus 4. Minimálisfeszítőfa(G w ) Input : G w : G 1 -ből az átlagos belső tartó alapján elkészített súlyozott gráf Output: T : G w egy minimális feszítőfája 1: V T := 2: E T := QI G1 : G 1 egy QI-sorozata 3: P := {(u, v) (u, v) E(G w ) (u, v ) E(G w )(φ(u, v) φ(u, v ))} 4: if P > 1 then 5: P := {(u, v) (u, v) P (u, v ) P (deg(u) + deg(v) deg(u ) + deg(v ))} 6: P := P 7: end if 8: Válasszunk P -ből véletlenszerűen egy (u, v) élt 9: T 1.v := u, T 2.v := v 10: V T := {u, v} 11: E T := {(u, v)} 12: QI G1 -t egészítsd ki (u, v)-vel 13: E(G w ) := E(G w )\(u, v) 14: while V T V (G w ) do 15: P := {(u, v) (u, v) E(G w ) u V T v / V T } 16: (u, v) :=Élkiválasztás(G w, P ) 17: V T := V T {v} 18: E T := E T {(u, v)} 19: QI G1 -t egészítsük ki (u, v)-vel 20: Q := {(u, v) (u, v) E(G w ) u V T (u, v) / E T } 21: while Q do 22: Jelölje (u, v) az így kapott sorrendben az 1. élt 23: Egészítsük ki QI G1 -et (u, v)-re vonatkozó élfeltétellel és a fokszámfeltétellel 24: Q := Q\(u, v) 25: end while 26: end while 27: T := (V T, E T ) 28: return T, QI G1 24

5.6 1.5 1.4 6.1 N 6.1 5.6 6.1 5.6 6.1 G w 5.6 5.6 6.1 5.6 6.1 4.5. ábra. G 1 -ből elkészített G w gráf Algoritmus 5. Élkiválasztás(G w, P ) Input : P : élek egy halmaza G w : G 1 -ből az átlagos belső tartó alapján elkészített súlyozott gráf V T : feszítőfa csúcshalmaza Output: e: P -beli él 1: P 1 := {(u, v) (u, v) P (u, v ) P ( φ(u, v) φ(u, v ))} 2: P := P 1 3: if P > 1 then 4: P := {(u, v) (u, v) P (u, v ) P ( Ind G1 (V T {u, v}) Ind G1 (V T {u, v }))}, ahol Ind G1 (V T {u, v}) jelöli a V T {u, v} csúcsok által feszített részgráf éleinek a számát G 1 -ben 5: P := P 6: end if 7: if P > 1 then 8: P = {(u, v) (u, v) P v / V T (u, v ) P (v / V T (deg G1 (v) deg G1 (v )))} 9: P := P 10: end if 11: Válasszunk P -ből véletlenszerűen egy (u, v) élt 12: return (u, v) 25

4.6. ábra. A különböző algoritmusok átlagos futásideje [20] nálunk, 10.000 gráfot tartalmaz. Az adatbázis 62 különböző csúcscímkéjű gráfot tartalmaz, azonban a csúcsok címkéinek jelentős része, N és O. A gráfoknak átlagosan 25.4 csúcsuk és 27.3 élük van. A módszereket különböző méretű gráfokon tesztelve vizsgáljuk a futási idő. Legyen Qi 1000 darab, i élű gráfot tartalmazó kisebb adatbázis. Jelölje QuickSI(R) a QuickSI-algoritmus futásidejét véletlenszerűen választott QI-sorozat esetén, QuickSI pedig a hatékony QI-sorozat esetén. Ekkor a különböző módszereket összehasonlítva a 4.6. ábrán szereplő eredményt kapjuk [20]. A futási időket összehasonlítva látjuk, hogy például Q24 esetén az Ullmann-algoritmus 5535- ször lassabb, mint a hatékony QI-sorozatot használó QuickSI-algoritmus. A 4.6. ábra alapján megállapítható, hogy a részgráf-izomorfia-vizsgálat költsége körülbelül feleakkora a QuickSI-módszer esetén, ha a véletlenszerű QI-sorozat helyett a hatékony QI-sorozattal dolgozunk. 26

5. fejezet Szűrés az adatbázison A továbbiakban megvizsgáljuk, hogy milyen módon határozhatjuk meg hatékonyan azon adatbázisbeli gráfokat, melyek részgráfként tartalmaznak egy adott gráfot. Az adatbázison előszűrést végzünk, mely során kiszűrjük azon gráfokat, melyeknek biztosan nem részgráfja az adott gráf. A szükséges definíciók ismertetése után egy általános előszűrő eljárást vizsgálunk H. Shang, Y. Zhang, X. Lin és J. Xu Yu cikke [20] cikke nyomán. Ehhez kisebb méretű gráfokat, ún. jellemző részgráfokat használunk. Ezen eljárás során részgráf-izomorfiát kell vizsgálni, ami mint már korábban vizsgáltuk költséges, és további kérdés, hogy mely jellemző részgráfokat alkalmazzunk az eljárás során. A jellemző részgráfok kiválasztásának különböző módszereit az egyes alfejezetekben tekintjük át. Megvizsgáljuk az R. Giugno és Dennis Shasha által publikált út alapú jellemző részgráfokat kiválasztó eljárást [11], az S. Zhang és M. Hu és J. Yang által javasolt fa alakú jellemző részgráfok kiválasztását [23], valamint a P. Zhao, J. Xu Yu és P. Yu cikkében ismertetett eljárást [24]. 5.1. Általános előszűrő eljárás 5.1. Definíció Részgráf-izomorfia-probléma adatbázisban: adott egy G q query gráf és egy D = {G 1,..., G n } gráfokat tartalmazó adatbázis. Határozzuk meg azon G i D gráfokat, melyekre G q G i. 5.1. Példa Legyen G q az 5.1. ábrán szereplő gráf, a D adatbázis pedig álljon az 5.2. ábrán látható gráfokból. Ekkor G q G 2 és G q G 1, G 3. Az adatbázis előszűrése során fontos szerepet játszanak az ún. jellemző részgráfok, melyek valamely adatbázisbeli gráfnak a részgráfjai. 27

u 1 u 2 N u 3 u 4 u 5 u 7 u 6 G q 5.1. ábra. Query gráf N N N G 1 N G 2 O G 3 5.2. ábra. Gráfadatbázis Fontos kérdés, hogy egy adott adatbázis esetén hogyan válasszuk meg jól a jellemző részgráfokat. Ezen heurisztikákat a következő alfejezetekben tárgyaljuk. Minden egyes f i jellemző részgráf esetén határozzuk meg a hozzá tartozó D fi halmaz, melyet a következőképp definiálunk: D fi := {G j G j D f i G j }, azaz D fi azon adatbázisbeli gráfokat tartalmazza, melyek részgráfként tartalmazzák f i -t. 5.2. Példa Az 5.1 példa esetén legyenek a jellemző részgráfok a 5.3. ábrán láthatóak. A fenti példa esetén a következő halmazokat kapjuk: D f1 = {G 1, G 2, G 3 } D f2 = {G 2, G 3 } D f3 = {G 1, G 3 } 28

N f 1 f 2 f 3 5.3. ábra. A jellemző részgráfok Habár a fenti halmazok kiszámítása költséges részgráf-izomorfiát kell vizsgálnunk, de adatbázisban tárolva nem kell minden egyes részgráf-izomorfia vizsgálat esetén újra meghatározni ezen halmazokat. Fontosnak tartjuk hangsúlyozni, hogy ezen halmazok kiszámítása előfeldolgozási időben történik, nem keresési időben. Számítsuk ki D q := D Gq -t is. Ekkor elegendő azon gráfok esetén elvégezni a részgráf-izomorfia-tesztet, melyek tartalmazzák azon kisméretű, gyakori gráfokat részgráfként, melyeket G q is. A jelölt halmazt a későbbiekben q -val jelöljünk. Megjegyezzük, hogy molekulagráfok esetén további egyszerű szűrési feltételek alapján adódnak (pl.:, N, O,... atomok száma, kötések száma típusonként). 5.3. Példa A fenti példa esetén D q = {f 1, f 3 } és q = D f1 D f2 = {G 1, G 2, G 3 } {G 2, G 3 } = {G 1, G 2 }. A fent elmagyarázott eljárás pszeudokódját írja le a 6.. algoritmus, melynek során azon G gráfokat tartalmazó halmazt, melyre G D és G q G, R-rel jelöltük. A későbbiekben a korábban felvetett problémának, a jellemző részgráfok kiválasztásának néhány módszerét példákkal szemléltetve mutatjuk be. A jellemző részgráfok kiválasztását indexelésnek nevezzük. A jellemző részgráfokkal történő előszűrést az motiválja, hogy a query magas feldolgozási költségét egy egyszeri indexkészítési fázisba toljuk el. Adott G q query gráf és D = {G 1,..., G n } adatbázis esetén a részgráf-izomorfizmus probléma összköltsége a jellemző részgráfokkal, F = {f 1,..., f m }-mel történő szűrés esetén = f + q v, ahol f a szűrési költség a q = D fi egyenlőségen alapulva, és v jelöli a részgráf-izomorfiavizsgálat átlagos költségét G q és G j D f i F f i G q esetén. Legyen D egy rögzített adatbázis. élunk q minimalizálása. Látszólag q akkor lesz minimális, ha az összes, adatbázisban előforduló részgráfot kiválasztjuk. Ekkor azonban F túlságosan nagy lehet, ezáltal F memóriában való tárolását ne- 29

Algoritmus 6. Szűrés(Q, I, D) Input : G q : query gráf I : jellemző részgráfokat tartalmazó halmaz D : gráfadatbázis Output: R: azon G gráfokat tartalmazó halmaz, melyre G D és G q G 1: D q := {f i f i I f i G q } 2: q := f i D q D fi 3: R := 4: for each G q do 5: if G q G then 6: R := R {G} 7: end if 8: end for each 9: return R hezíti, és a szűrési költséget, f -et is megnöveli. Másrészről, F csökkentése f csökkenéséhez, de q növekedéséhez vezet. Mielőtt ismertetnénk elvárásainkat egy jó minőségű indexeléssel szemben, bevezetjük egy gráf nyesési erejének fogalmát adott D adatbázis esetén. 5.2. Definíció Legyen f i F. f i nyesési erején az számot értjük. E ny (f i ) = D {G j G j D f i G j } D Megjegyzés. A definíció alapján 0 E ny (f i ) 1. Mivel f i -t legalább egy G j D gráf tartalmazza részgráfként, így E ny (f i ) = 1 nem lehetséges. Abban az esetben, ha E ny (f i ) = 0, az f i -vel történő szűrés nem csökkenti a q halmazt, mivel f i minden adatbázisbeli gráfban megtalálható. Abban az esetben, ha E ny (f i ) 1, f i -vel történő szűrés jelentősen csökkenti a q halmazt, amennyiben f i G q teljesül. Elvárásaink egy jó minőségű indexeléssel szemben: 1. Minden jellemző részgráf közepes nyesési erejű legyen. A túl nagy nyesési erejű részgráfok valószínűleg nem lesznek benne a query gráfban. Olyan jellemző részgráfok kellenek, amelyeknek elég nagy a nyesési erejük, és nagy valószínűséggel megtalálhatóak egy tipikus query gráfban. 2. Lehetőség szerint kevés legyen belőlük, hogy a memóriában tömören tárolhatóak legyenek. 30

3. Az egyszeri számítási költség sem lehet akármekkora. Fontosnak tartjuk megjegyezni, hogy jelenleg nincs univerzálisan legjobb módszer a jellemző részgráfok kiválasztására. Mindig az adott gráfok típusa és az adatbázis határozza meg, hogy mely módszer(ek) a hatékonyabb(ak) az adott esetben. A továbbiakban ezen módszerek közül mutatunk be néhányat. 5.4. Példa A következő módszerek során legyen a gráfadatbázisunk az 5.4. ábrán látható. N N N G 1 G 2 N N N O O O N G 3 G 4 G 5 5.4. ábra. Gráfadatbázis 5.2. Út alapú jellemző részgráfok Ezen módszer esetén utak a jellemző részgráfok. Rögzítsünk egy kis, maximum 10 értékű l p konstanst, s határozzuk meg az összes adatbázisbeli csúcsra a csúcsnál kezdődő, legfeljebb l p hosszúságú utakat. Jelölje F = {f 1,..., f m } az így kapott utakat tartalmazó halmazt. Az így kapott adatok alapján az 5.2 ábrán látható adatbázist építjük fel. Az f i sorhoz tartozó G j érték legyen az a szám, ahányszor f i előfordul G j -ben. A jellemző részgráfok szerkezetükből adódóan könnyen kutathatóak, kevés számúak, az adatbázisbeli értékek gyorsan kiszámolhatóak, azonban előfordulhat, hogy kevésbé jó nyesési erejűek. Tekintsük erre a következő példát. 31

Jellemző részgráf G 1 G 2 G 3 G 4 G 5 N 1 2 1 1 2 5 7 3 5 1 O 0 0 1 1 1 = 0 0 0 0 1 N 2 3 1 2 0 5 8 3 5 0 N O 0 0 1 1 0 O 0 0 1 2 1 O = 0 0 0 0 1 = 0 0 0 0 1 N N 0 0 0 0 1 = N 0 0 0 0 2 N 2 5 2 2 0 5 8 0 5 0 O 0 0 2 2 0 O = N 0 0 0 0 2 = N 0 0 0 0 2 5.5. ábra. Tartalmazási táblázat 5.5. Példa Tekintsük az 5.7. ábrát. Legyen D := {G 1, G 2, G 3 } és l p := 4. Ekkor q = D, de csak G q G 3 teljesül. Jellemző részgráf G 1... G n f 1 f 2. f m 5.6. ábra. Tartalmazási táblázat 32