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

Méret: px
Mutatás kezdődik a ... oldaltól:

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

Átírás

1 Eötvös Loránd Tudományegyetem Informatikai Kar Algoritmusok és Alkalmazásaik Tanszék Hatékony algoritmusok kémiai gráfok részgráf-izomorfia vizsgálatára BSc szakdolgozat Témavezetők: Dr. Tichler Krisztián ELTE IK Algoritmusok és Alkalmazásaik Tanszék adjunktus Készítette: Vigula Mónika programtervező informatikus BSc Kovács Péter ChemAxon Kft. programtervező matematikus Budapest, 2012

2 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 /B-09/1/KMR ). MarvinSketch, felhasználása: kémiai struktúrák rajzolása, Verzió: 5.9.1, 2012, ChemAxon ( JChem Base, felhasználása: kémiai struktúrák keresése, adatbázis-kezelés, Verzió: 5.8.3, 2012, ChemAxon ( chemaxon.com) II

3 Köszönetnyilvánítás Köszönöm dr. Fekete István Docens Úrnak, hogy megkedveltette velem az algoritmusok izgalmas érdekes világát, a szakdolgozat témafelvetését és a lehetőséget, hogy szakdolgozatom kutatási projekt keretében készíthettem el. Köszönetet szeretnék mondani témavezetőimnek, dr. Tichler Krisztián Adjunktus Úrnak és Kovács Péternek. Köszönöm dr. Tichler Krisztián Adjunktus Úrnak az értékes szakmai és stilisztikai tanácsait, melyek a szakirodalom megértése és szakdolgozatom elkészítése során nélkülözhetetlenek voltak. Köszönöm Kovács Péternek, hogy megismertetett a kémiai informatika alapjaival, és a temérdek információt, melyet az implementáció és a dolgozat készítése során nyújtott. Köszönöm továbbá, hogy a felmerült kérdésekkel mindig fordulhattam hozzá. Hálával tartózom továbbá a ChemAxon Kft. minden kedves dolgozájának, hogy a szakmai gyakorlatom alatt kellemes légkört teremtettek, és munkámat építő jellegű kritikákkal illették. Végül, de nem utolsó sorban szeretnék köszönetet mondani Családomnak és Barátaimnak a tanulmányaim során nyújtott biztatásért és támogatásért. III

4 Tartalomjegyzék Bevezetés 1 1 Felhasználói dokumentáció Elméleti háttér A SMILES formátum Felhasználási lehetőségek Futási idő mérése Részstruktúra-vizsgálat Komponensek felhasználása más programokban Fejlesztői dokumentáció Előszűrés Algoritmusok a részgráf-izomorfia problémára Ullmann-algoritmus VF2 algoritmus A fejlesztési folyamat Implementálás Futási idők mérése Előszűrés Részgráf-izomorfiát eldöntő algoritmusok Grafikus felület Tesztelés Összefoglalás 44 Irodalomjegyzék 47 IV

5 Bevezetés "Szeretjük vagy nem, együtt kell élnünk a tudománnyal. Célszerűbb, ha megpróbáljuk a legjobbat kicsiholni belőle. Ha megbarátkozunk vele, és elénk tárul a szépsége és hatékonysága, rá fogunk jönni, hogy spirituális és gyakorlati szempontból egyaránt jó üzletet kötöttünk." Carl Sagan Szakdolgozatom témaválásztásának története 2010 októberében kezdődött. Felkerestem Dr. Fekete István tanár urat, hogy elvállalná-e az ELTE TTK Matematika BSc Alkalmazott matematikus szakirányon írandó szakdolgozatom témavezetését. Tanár Úr vetette fel a részgráf-izomorfia problémát, és ennek keretében csatlakoztam az ELTE Informatika Karán folyó projekthez, mely kémiai informatikai problémákkal foglalkozik. Ezen projektmunka keretében készült el Dr. Tichler Krisztián és Dr. Fekete István témavezetésével, Kovács Péter (ChemAxon Kft.) közreműködésével szakdolgozatom A részgráf-izomorfia probléma adatbázisokban [15] címmel. Ezen szakdolgozatban először a részgráf-izomorfia problémát ismertettem, majd különböző algoritmusokat vizsgáltam meg, melyek megoldják ezen feladatot. Végül különböző szűrési módszereket tekintettem át. Mivel a részgráf-izomofia probléma NP-teljes feladat, és az adatbázisok gyakran több százezer vagy millió molekulából állnak, ezért a páronkénti részgráf-izomorfia vizsgálat egyáltalán nem hatékony. Ezért az adatbázison első lépésként előszűrést végzünk, s csak az így megmaradt gráfokra végezzük el a költséges részgráf-izomorfia vizsgálatot. Ezen szakdolgozat írásakor vetődött fel az ötlet, hogy ezek közül néhány algoritmust implementáljunk, majd heurisztikák segítségével csökkentsük a keresésre fordított időt. Választásom az Ullmann-algoritmusra [16] és a VF2 algoritmusra [9] esett. Mivel a vizsgált probléma egyik leggyakoribb alkalmazási területe a kémiai informatika [8, 11], ezért ezen két algoritmust speciális gráfok, ún. molekulagráfok részgráfizomorfiájának eldöntésére implementáltuk. Az implementálás során felhasználtuk a ChemAxon Kft. ( moduljait. Az elkészített alkalmazás lehetőséget nyújt az implementált algoritmusok futási idejének mérésére adott input esetén, illetve a részstruktúra-keresés eredményét 1

6 megtekinthetjük szöveges és grafikus formában is. A szakdolgozat felépítése a következő. Az 1. fejezetben, a Felhasználói dokumentációban ismertetjük a probléma megértéséhez szükséges definíciókat, bizonyítjuk, hogy a vizsgált probléma NP-teljes feladat, továbbá a program használatát mutatjuk be. Az algoritmusok működési elvét és az implementáció során hozott döntéseket a 2. fejezetben, a Fejlesztői dokumentációban tárgyaljuk. Ezen fejezet tartalmazza továbbá a tesztelési folyamat leírását is. Végül az eredményeket és a lehetséges továbbfejlesztési irányokat foglaljuk össze a 3. fejezetben. 2

7 1. fejezet Felhasználói dokumentáció 1.1. Elméleti háttér 1.1. Definíció Legyen G 1 = (V 1, E 1 ) és G 2 = (V 2, E 2 ) két adott gráf. A G 1 gráf részgráf-izomorf 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 Fontosnak tartjuk megjegyezni, hogy a szakirodalomban találunk egy másik definíciót is a részgráf-izomorfiára, mely nem ekvivalens a fentivel. Abban az esetben G 2 feszített részgráfként [18] kell, hogy tartalmazza G 1 -et. Címkézett (például a kémiai informatikában vizsgált molekulagráfok) esetén a részgráf-izomorfia definíciójában további feltételek szükségesek Definíció Cí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 az 1.1. definíció a következőképpen módosul Definíció Legyen 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 ). G 1 részgráf-izomorf G 2 -vel, ha létezik olyan f : V 1 V 2 injektív függvény, melyre a következők teljesülnek: 1. u V 1 (l V1 (u) = l V2 (f(u))) 2. u V 1 v V 1 ((u, v) E 1 (f(u), f(v)) E 2 ) 3. u V 1 v V 1 ((u, v) E 1 l E1 (u, v) = l E2 ((f(u), f(v)))) 3

8 A szakdolgozatban a részgráf-izomorfia definíciója alatt az 1.2. definíciót értjük. Az algoritmusok ismertetése során amennyiben a szigorúbb definíció esetén több feltétel is teljesül megjegyzésként feltüntetjük az extra feltételeket is Példa 1.1. ábra. Példa részgráf-izomorfia probléma inputjára Tekintsük az 1.1. ábrán látható G 1 és G 2 címkézett gráfokat. Egy lehetséges f : V 1 V 2 : f(1) = 13 f(5) = 6 f(9) = 10 f(2) = 3 f(6) = 7 f(10) = 1 f(3) = 4 f(7) = 8 f(11) = 2 f(4) = 5 f(8) = 9 f(12) = Tétel Legyen 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 ). Annak eldöntése, hogy G 1 G 2, NP-teljes feladat. A tétel bizonyítása előtt bevezetünk néhány további definíciót és közlünk egy tételt Definíció Egy G gráfban Hamilton-körnek nevezünk egy H kört, ha G minden csúcsát pontosan egyszer tartalmazza. 4

9 1.6. Definíció (Hamilton-kör feladat) Adott egy G gráf. Döntsük el, hogy G tartalmaz-e Hamilton-kört. Az 1.4. tétel bizonyításához felhasználjuk az alábbi közismert tételt Tétel A Hamilton-kör feladat NP-teljes feladat. Bizonyítás: (1.4. tétel) Először megmutatjuk, 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. Ezután a Hamilton-kör feladatot melyről az 1.7. tétel szerint tudjuk, hogy NP-teljes feladat polinomiálisan visszavezetjük a részgráf-izomorfia-problémára. Legyen G egy input a Hamilton-kör feladatra, C n pedig az n pontú kör, ahol n jelöli a G gráf csúcsszámát. Ekkor C n G pontosan akkor, ha G tartalmaz Hamilton-kört. Szakdolgozatunk célja a kémiai gráfok részgráf-izomorfiájának vizsgálata. Egy molekula egyértelműen meghatároz egy címkézett gráfot. Az atomokat feleltessük meg a csúcsoknak, a közöttük lévő (kovalens) kötéseket pedig az éleknek a címkékkel együtt. Megjegyezzük, hogy a későbbiek során nem tüntetjük fel a hidrogénatomokat és a rá illeszkedő kötéseket, hiszen ezeket kémiai ismereteink alapján meghatározhatjuk [7]. A kémiai informatikában G 1 -t query-nek, G 2 -t pedig target-nek nevezzük, gráf helyett molekula(gráf)ról, csúcs helyett atomról, él helyett kötésről, részgráf helyett pedig részstruktúráról beszélünk. Mivel célunk kémiai gráfok részgráf-izomorfiájának eldöntése, ezért a továbbiakban mi is ezen elnevezéseket használjuk. A kémiai informatikában az egyszerű molekulákat általában SMILES formátumban kódoljuk, melyről a következő alfejezetben egy rövid ismertetőt adunk A SMILES formátum A SMILES (Simplified Molecular-Input Line-Entry System) formátum egy gyakran alkalmazott leírónyelv a molekulák tömör kódolására, mely ASCII karaktereket tartalmaz [3, 17]. A jelölés előnyei: egyszerűség egyetlen sorban leírható a molekula (sok esetben egyszerű inputként kezelni, pl.: command line argumentum egy programnál vagy egy dialógus ablak text input mezőjébe bevihető, nem kell fájlt csatolni) 5

10 hordozhatóság viszonylag könnyű szerkesztés és interpretálás mind vegyész mind számítógépes programok számára. A molekulában szereplő atomokat a vegyjelükkel jelöljük (például: C, N, O, Cl). Az egyszeres kémiai kötéseket nem tüntetjük fel, a kétszeres kémiai kötéseket a =, háromszoros kötéseket pedig a # jellel reprezentáljuk. Az egymáshoz csatlakozó atomokat legegyszerűbb esetben a vegyjeleik egymás után írásával reprezentálhatjuk. A molekulában szereplő köröket a következőképpen jegyezhetjük fel. A kör valamely atomját jelöljük meg egy számmal. Ezen sorszám következő előfordulása esetén tudjuk, hogy a jelölt két atomok között a molekulában kötés szerepel. A molekulában szereplő elágazásokat a SMILES formátumban kerek zárójelek között jegyezzük fel. Az elágazások egymásba is ágyazhatóak. Abban az esetben, ha a reprezentálni kívánt molekula több komponensből áll, az egyes komponensek leírását ponttal választjuk el. A molekula egy tömör SMILES reprezentációja a molekula bejárásán alapul. Tekintsük a molekula egy tetszőleges atomját, és indítsunk innen egy mélységi bejárást. Ezen bejárás során az egyes atomokat és a közöttük lévő kötéseket feljegyezzük. Ezen eljárás alapján világos, hogy egy molekula több, ekvivalens SMILES reprezentációval is rendelkezhet. Sok egyéb információ reprezentálására is alkalmas a SMILES [3, 17], de ezeket itt nem tárgyaljuk Példa Tekintsük az 1.2. ábrán látható molekulát. Ezen molekula két különböző reprezentációja SMILES formátumban: CC(=C)C(N)OS.C1CNC(C1)C1CCCO1 és C1CNC(C1)C2OCCC2.SOC(N)C(=C)C Példa Tekintsük az 1.3. látható molekulát. Ezen molekulát reprezentálhatjuk például a C1OCOCOCOCOCOCOCOCOCOCOCOCOCOCO1 és a O12.O34.O56. O78.O9%23.O%22%21. O%20%14.O%15%16.O%17%18.O%19%13.O%12%11.O%10%24. O%25%26.O%27%28.O%29%30. C%25%30.C3%26.C4%15.C%16%10.C9%24.C%23%20. C1%14.C2%12.C%22%11.C7%21.C8%19.C%13%27.C5%28.C6%17.C%18%29 leírással is. Jól látható, hogy a molekula mélységi bejárása alapján készült SMILES formátum sokkal tömörebb, mint az a reprezentáció, melynek készítése során egy véletlen 6

11 atomsorrendet tekintettünk ábra. A reprezentált molekula 1.3. ábra. A reprezentált molekula 1.3. Felhasználási lehetőségek Az ismertetett részgráf-izomorfia probléma eldöntésére J. R. Ullmann 1976-ban [16] és az L. P. Cordella és mtsai 2001-ben publikált algoritmusát [9], a VF2-t implementáltuk, majd ezen algoritmusok futási idejét hasonlítottuk össze különböző heurisztikákkal. Az implementálás során használtuk a ChemAxon Kft. Marvin és JChem könyvtárainak es verzióját, melyekhez akadémiai licencet biztosítottak számunkra. A következő alfejezetekben az elkészített program felhasználásának lehetőségeit ismertetjük. A program használatához szükséges szoftverek: Java 1.6, ezzel kompatibilis operációs rendszer és számítógép 7

12 ChemAxon Kft. Marvin és JChem programcsomagjából az alábbi.jar fájlok: jchem.jar MarvinBeans-alignment.jar MarvinBeans-beans.jar MarvinBeans-concurrent.jar MarvinBeans-diverse-modules.jar MarvinBeans-formats-smiles.jar MarvinBeans-formats.cml.jar MarvinBeans-formats.jar MarvinBeans-gui.jar MarvinBeans-license.jar MarvinBeans-modelling.jar MarvinBeans-plugin.jar MarvinBeans-services.jar MarvinBeans-sketch.jar MarvinBeans-view.jar MarvinBeans.jar Az alkalmazás futtatásához a fent ismertetett.jar és a chemie.jar (a dolgozathoz született kódokat tartalmazza) fájlok szükségesek. Az elkészített program konzolból futtatható, illetve lehetőség van az implementált algoritmusok más programokban történő felhasználására, melyekhez a későbbiekben néhány egyszerű példát adunk. Mielőtt ezen felhasználási opciókat ismertetnénk, felhívjuk a kedves felhasználó figyelmét a molekuláknál jelen lévő aromás kötésekkel kapcsolatos anomaliákra. Tekintsük az 1.4. ábrán látható query és target molekulákat. Az 1.3. definíció szerint target molekula nem tartalmazza részstruktúraként a query molekulát, azonban kémiai értelemben igen. Ezen párok megtalálásának érdekében az implementált részstruktúra-kereső algoritmusok a molekulákat a ChemAxon Kft. aromatizáló metódusát felhasználva aromatizálják. Ennek azonban az a következménye, hogy az 1.5. ábrán látható target molekula nem tartalmazza részstruktúraként a query molekulát. Az aromás kötésekkel kapcsolatban bővebb leírás található [1]-ben és [7]-ben. 8

13 1.4. ábra. Példa arra, hogy a target molekula részstruktúraként tartalmazza a query molekulát az aromás gyűrűszerkezetek kémiai értelmezése miatt (az 1.3. definíció alapján ez nem teljesül) 1.5. ábra. Példa arra, hogy a target molekula nem tartalmazza részstruktúraként a query molekulát az aromás gyűrűszerkezetek kémiai értelmezése miatt (azonban az 1.3. definíció alapján ez teljesül) Az elkészített alkalmazás lehetőséget nyújt a két implementált algoritmus futási idejének mérésére, valamint adott query és target molekulák esetén a részstruktúravizsgálat eredményének megtekintésére szöveges és grafikus módon. Az egyes opciókat kapcsolók segítségével állíthatjuk. Amennyiben az argumentumlista üres vagy -h-t tartalmaz, rövid ismertetőt kapunk a programról és annak használatáról néhány példával illusztrálva, mely az 1.6 ábrán is megtekinthető. Megjegyezzük, hogy a molekulákat SMILES formátumban (Simplified Molecular- Input Line-Entry System) [3, 17] adhatjuk meg. Az input molekulákká történő alakítását a ChemAxon Kft. megfelelő modulját felhasználva végezzük. 9

14 1.6. ábra. Rövid ismertető a program használatáról Futási idő mérése Adott query és target molekulákat tartalmazó fájlok esetén lehetőség van az egyes algoritmusok futási idejének mérésére. Mivel a gyakorlatban jellemzően néhány molekulát keresünk több tíz- vagy százezres adatbázisban, ezért nem olvassuk be az összes target molekulát egyszerre. Az algoritmusok futási idejének mérése során a target molekulákat ezresével dolgoztuk fel, ez azonban a felhasználásra semmilyen megszorítást nem ad, hiszen a számítógép memóriájának függvényében ez a paraméter tetszőlegesen változtatható. Méréseink során azt tapasztaltuk, hogy a molekulapárokra egyenként vett futási idők kicsik, emiatt az eredmények közel sem lehetnek pontosak (a legkisebb mérhető időegység 1 ezredmásodperc). Annak érdekében, hogy a mérési hiba minél kisebb legyen, többször futtattuk az algoritmust egymás után, és az első és az utolsó futtatás között eltelt idő alapján számoltunk tovább. Jellemzően az egymást követő futtatások száma 10 vagy 15 volt. Az egyes algoritmusok esetén több heurisztikát is implementáltunk, melyek várhatóan csökkentik az adott algoritmus futási idejét. Az implementált heurisztikákkal és a kapott eredményekkel részletesen foglalkozunk a Fejlesztői dokumentáció 2.4 alfejezetében. Elöljáróban annyit megjegyzünk, hogy az egyes algoritmusok esetén egy 10

15 számérték megadásával aktiválhatjuk az egyes heurisztikákat. A megfeleltetés az értékek és a különböző heurisztika-opciók között egyértelmű. Ezen rövid bevezetés után nézzük, hogyan adhatjuk meg argumentumban a futási idő méréséhez szükséges paramétereket. Az egyes paraméterekhez egy-egy kapcsoló tartozik. A query molekulákat tartalmazó fájl neve a -q kapcsoló, a target molekulákat tartalmazó fájl neve pedig a -t kapcsoló alkalmazásával adható át. Az egyszerre beolvasott target molekulák számát a -n, az egymás után futtatott algoritmusok számát a -l, a mérni kivánt verziókhoz tartozó értékeket pedig a -v kapcsoló alkalmazásával állíthatjuk be. Szükséges továbbá, hogy a -r kapcsoló segítségével megadjuk, hogy mely algoritmust (Ullmann-algoritmus vagy VF2) futási idejét szeretnénk mérni. Az eredményt ezredmásodpercben tüntetjük fel Példa A query molekulákat tartalmazó fájl neve legyen queries.smiles, a target molekulák pedig a targets.smiles fájlban megtalálhatóak. Egyszerre 1000 target molekulát olvassunk be, az algoritmusokat ötször futtassuk le egymás után, és csak a 1, 3, 10 verziószámokhoz tartozó heurisztikákkal mérjünk futási időt. A futtatni kívánt algoritmus legyen a VF2. Ekkor a program futtatásához szükséges argumentum: -r "VF2" -q "queries.smiles" -t "targets.smiles" -v 1,3,10 -l 5 -n 1000 Amennyiben nem VF2-vel, hanem Ullmann-algoritmussal szeretnénk futási időt mérni, a fenti input esetén "VF2" helyett "Ullmann"-t tüntessünk fel. Egy lehetséges kimenet látható az 1.7. ábrán ábra. A program egy lehetséges kimenete Részstruktúra-vizsgálat Az elkészített alkalmazás lehetőséget biztosít részstruktúra-vizsgálatra adott query és target molekulák esetén. A kapott eredményt szöveges vagy grafikus úton 11

16 tekinthetjük meg. Amennyiben csak egy query-target molekulapárunk van, a molekulát közvetlenül megadhatjuk az argumentumban SMILES formátumban [3, 17]. Hasonlóan a futási idő méréséhez, a query és a target molekulákat tartalmazó inputot a -q illetve -t kapcsoló segítségével adhatjuk meg. A program az összes query-target molekulapárra elvégzi a részstruktúra-keresést. Abban az esetben, ha az eredményt szöveges formátumban szeretnénk megtekinteni, a program egy lehetséges részgráf-izomorfizmust (1.3. definíció) ír ki a képernyőre, amennyiben talált ilyet, ellenkező esetben pedig tájékoztat, hogy a target molekula nem tartalmazza részstruktúraként a query molekulát. Egy lehetséges kimenet tekinthető meg az 1.8 ábrán ábra. A program egy lehetséges kimenete Az adott inputon történő részstruktúra-keresés eredményét megtekinthetjük grafikus formában is. Ennek érdekében -w-t tüntessünk fel az argumentumban. Ekkor a keresést követően egy új ablak jelenik meg, melyen megjelenik az összes querytarget pár. Amennyiben a target molekula tartalmazza részstruktúraként a query molekulát, a target molekulát elforgatjuk a query molekulának megfelelően, és a target molekula megfelelő részét és a query molekulát pirosra színezzük. Abban az esetben, ha csak egy query-target molekulapár van, a konzolon szöveges formában is megtekinthető a keresés eredménye. 12

17 1.5. Példa A query molekula legyen CC(C)C(C)OS, a target molekulák pedig a targets.smiles fájlban megtalálhatóak. A részstruktúra-keresés eredményét tekintsük meg grafikusan. Ekkor a program futtatásához szükséges argumentum: -q "CC(C)C(C)OS" -t "targets.smiles" -w Egy lehetséges kimenet látható az 1.9. ábrán. Egy hasonló részstruktúra-keresés eredménye tekinthető meg az 1.10 ábrán. Ebben az esetben a query és target molekulákat követlenül az argumentumban adtuk meg SMILES formátumban ábra. A program egy lehetséges kimenete Komponensek felhasználása más programokban Ezen alfejezetben néhány egyszerű példát mutatunk az implementált algoritmusok és a futási idő mérésének forráskódban történő felhasználására. Az implementált algoritmusok használatának elve a következő. A konstruktorban megadjuk a query és a target molekulákat, majd futtatjuk az algoritmust, végül a kapott eredményt lekérdezzük. A részgráf-izomorfiát vizsgáló algoritmusok közös őssel (a SubstructureSearch osztály) rendelkeznek. 13

18 1.10. ábra. A program egy lehetséges kimenete Előszűrés Molecule query = MolImporter.importMol("CC(C)C(C)OS", "smiles"); Molecule target = MolImporter.importMol("C1CCC(C1)C1CCSO1", "smiles"); Screen screen = new Screen(query, target); screen.run(); if (screen.getresult()) { System.out.println("The target structure may contain the query " + "structure."); } else { System.out.println("The target structure could not contain the " + "query structure."); } Ullmann-algoritmus Molecule query = MolImporter.importMol("CC(C)C(C)OS", "smiles"); Molecule target = MolImporter.importMol("C1CCC(C1)C1CCSO1", "smiles"); SubstructureSearch sss = new UllmannsAlgorithm(query, target); sss.run(); 14

19 if (sss.issubstructure()) { System.out.println("The target structure contains the query structure."); System.out.println("Atom mapping (query -> target):"); int[] mapping = sss.getsubstructureisomorphism(); for (int i = 0; i < mapping.length; i++) { System.out.println("\t" + (i + 1) + " -> " + (mapping[i] + 1)); } } else { System.out.println("The target structure does not contain the query " + "structure."); } VF2 algoritmus Molecule query = MolImporter.importMol("CC(C)C(C)OS", "smiles"); Molecule target = MolImporter.importMol("C1CCC(C1)C1CCSO1", "smiles"); SubstructureSearch sss = new VF2(query, target); sss.run(); if (sss.issubstructure()) { System.out.println("The target structure contains the query structure."); System.out.println("Atom mapping (query -> target):"); int[] mapping = sss.getsubstructureisomorphism(); for (int i = 0; i < mapping.length; i++) { System.out.println("\t" + (i + 1) + " -> " + (mapping[i] + 1)); } } else { System.out.println("The target structure does not contain the query " + "structure."); } Futási idő mérése Ullmann-algoritmussal String targetfilename = "targets.smiles"; int[] versions = {1, 3, 10}; RunTimeSubstructureSearch runtime = new RunTimeOfUllmannsAlgorithm(queryFilename, targetfilename, 5, 1000, versions); runtime.run(); 15

20 long[] avgrunningtime = runtime.getavgrunningtime(); int[] matchedpairs = runtime.getmatchedpairs(); System.out.println("no. avg running time number of matched pairs"); for (int i = 0; i < versions.length; i++) { System.out.println(versions[i] + ": " + avgrunningtime[i] + " ms " + matchedpairs[i]); } Futási idő mérése VF2 algoritmussal String targetfilename = "targets.smiles"; int[] versions = {1, 3, 10}; RunTimeSubstructureSearch runtime = new RunTimeOfVF2(queryFilename, targetfilename, 5, 1000, versions); runtime.run(); long[] avgrunningtime = runtime.getavgrunningtime(); int[] matchedpairs = runtime.getmatchedpairs(); System.out.println("no. avg running time number of matched pairs"); for (int i = 0; i < versions.length; i++) { System.out.println(versions[i] + ": " + avgrunningtime[i] + " ms " + matchedpairs[i]); } 16

21 2. fejezet Fejlesztői dokumentáció Az 1. fejezetben beláttuk, hogy a részgráf-izomorfia probléma NP-teljes feladat (1.4. tétel). Emiatt a költséges részgráf-izomorfiát eldöntő algoritmusok futtatását általában előszűrés előzi meg. Ezen eljárás feladata, hogy gyorsan ellenőrizhető feltételek segítségével minél több olyan molekulagráf-párt kiszűrjön, melyek nem lehetnek részgráf-izomorfak. Az előszűrés után kizárólag a megmaradt molekulagráf-párokra végzünk részgráfizomorfia vizsgálatot. Gyakran alkalmazott algoritmus J. R. Ullmann 1976-ban [16] algoritmus és az L. P. Cordella és mtsai által 2001-ben publikált algoritmus [9], a VF2 algoritmus, melyek implementálása és összehasonlító elemzése jelen szakdolgozat fő célkitűzése. Annak érdekében, hogy az egyes módszereket valós tesztadatokon tudjuk összehasonlítani, az amerikai Nemzeti Rákkutató Intézet (National Cancer Institute NCI) publikus molekulagyűjteményéből [5] mely molekulát tartalmaz véletlenszerűen kiválasztott molekulát használtuk. Az adatbázisban részstruktúraként keresendő molekulának pedig kiválasztottunk 64 gyakori molekulát, melyek összesen szer találhatóak meg a kiválasztott molekulában részstruktúraként. Ezen molekulagráfokat tartalmazza SMILES formátumban a gyakoriak.smiles fájl. A SMILES formátummal bővebben foglalkoztunk az 1.2. alfejezetben (5. oldal). Ha G 1 részgráf-izomorf G 2 -vel, akkor sok esetben több különböző részgráfizomorfizmus is megadható közöttük (pl. szimmetrikus struktúrák). Bizonyos alkalmazásokban érdekes lehet az összes ilyen leképezés felderítése, de jelen dolgozatban csak egy részgráf-izomorfizmus függvény meghatározásával foglalkozunk. Megjegyezzük azonban, hogy az ismertetett algoritmusok kis módosításával az összes találat megadható. A fejezet felépítése a következő. Kezdetben az előszűrési módszereket mutatjuk 17

22 be, majd az Ullmann-algoritmust és a VF2 algoritmust ismertetjük. Ezek után az implementálás során hozott heurisztikus döntéseket és a tesztelési fázisokat tekintjük át Előszűrés Az előszűrés során célunk kiszűrni olyan molekulagráf-párokat, melyek biztosan nem lehetnek részgráf-izomorfak. Annak rögzítésére, hogy egy adott molekulapárt mely feltétel miatt szűrtük ki, az egyes feltételekhez sorszámot rendeltünk. Ha az előszűrés elvégzése után az adott pár részgráf-izomorf lehet, ezen sorszám értéke 1. Triviális előszűrési feltételek az atomszámokra és a kötésszámokra vonatkozó egyenlőtlenségek. Ezen esetekben a sorszámok rendre 1 és 2. A 3-as sorszámú feltétel esetén megvizsgáljuk, hogy a target a különböző rendszámú atomokból legalább annyit tartalmaz, mint amennyi a query-ben megtalálható. A 4-es sorszám ehhez hasonlóan a különböző kötéstípusok számára vonatkozó egyenlőtlenség teljesülését ellenőrzi. Az 5-ös sorszám esetén a két molekulagráfhoz egy-egy mátrixot határozunk meg. A mátrix sorai a kötéseknek, oszlopai pedig a gyakori atomoknak (B, C, N, O, F, P, S, Cl, Se, Br, I) felelnek meg, melyeket az NCI nyilvános molekulagyűjteményén készített statisztika alapján választottunk ki. A mátrix minden eleme kezdetben 0. A molekula kötéseit egyesével vizsgáljuk meg. Abban az esetben, ha a kötés végén szereplő atomok gyakoriak, akkor a kötésnek és az atomoknak megfelelő elemek értékét eggyel megnöveljük. Nyilvánvaló, hogy a részgráf-izomorfia teljesüléséhez a query-hez tartózó mátrix minden eleme legfeljebb akkora lehet, mint a target-hez tartozó mátrix megfelelő eleme. Megjegyzés. Egy másik megközelítés szerint az utóbbi szűrési feltétel esetén bővítsük ki a mátrixokat egy-egy oszloppal, melyhez a nem gyakori atomokat rendeljük. Ekkor a kötés két végén szereplő atomoknak és a kötés típusának megfelelő elemeket növeljük eggyel. Ezen ötlet azonban kevésbé hatékony, mint a fenti. A korábban ismertetett tesztfájlokon mindkét előszűrési módszert elvégeztük. Az eredeti módszer párt, míg a módosított algoritmus csupán párt szűrt ki, amennyiben korábban már elvégeztük az 1-es, 2-es, 3-as és 4-es sorszámokhoz tartozó szűréseket. Így a későbbiek során az eredeti módszert alkalmaztuk. Tekintsünk egy példát arra az esetre, melyet az eredetileg ismertetett szűrési módszer alapján kiszűr, azonban a módosított nem. 18

23 2.1. Példa Legyenek a query és a target a 2.1. ábrán látható molekulák. Ekkor az eredeti elgondolás alapján a következő mátrixot kapjuk. A könnyebb áttekinthetőség érdekében a query-hez és a target-hez tartozó mátrixokat nem külön tüntetjük fel, hanem az egyes elemeket kettősponttal választottuk el, valamint feltüntettük a sorok és az oszlopok címkéit. B C N O F P S Cl Se Br I egyéb 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 egyszeres 0 : 0 18 : 24 0 : 0 2 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 kétszeres 0 : 0 2 : 4 0 : 0 2 : 4 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 háromszoros 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 aromás 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 A kibővített mátrix pedig: B C N O F P S Cl Se Br I egyéb egyéb 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 egyszeres 0 : 0 18 : 24 0 : 0 2 : 4 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 4 kétszeres 0 : 0 2 : 4 0 : 0 2 : 4 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 háromszoros 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 aromás 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 0 A mátrixokban piros színnel jelöltük azon elemeket, melyeknél eltérés tapasztalható. Ezen különbség alapján jól látható, hogy az eredeti előszűrési módszer szerint a molekulapár biztosan nem részgráf-izomorf, azonban a módosított nem szűri ki ezen párt. Tesztadatunkon elvégeztük az előszűrést. Első lépésben az egyes előszűrési feltételeket egymástól függetlenül tekintettük. A kiszűrt párok számát tartalmazza a 2.1. táblázat. A 2.2. és a 2.3. táblázatban azon kiszűrt párok száma szerepel, melyek során az egyes előszűrési feltételeket a feltüntetett sorrendben hajtjuk végre táblázat. Ezen megfigyelés alapján a későbbiekben a szűrési sorrend: 1, 2, 3, 4 és 5. 19

24 táblázat táblázat ábra. Példa az előszűrés inputjára 2.2. Algoritmusok a részgráf-izomorfia problémára Ullmann-algoritmus Az algoritmus Jelen alfejezetben J. R. Ullmann [16] 1976-ban publikált, gyakran alkalmazott algoritmusát elemezzük. A szerző a cikkben az algoritmust feszített részgráfként történő keresésre ismertette, melyet módosítottunk úgy, hogy az 1.3. definíció szerinti részgráf-izomorfizmus keresésére használhassuk. Az algoritmus egy visszalépéses keresésen alapú módszer, melynek futása során egy ún. keresési fát építünk fel. Ezen fa minden csúcsa egy f : V 1 V 2 parciális izomorfizmusnak felel meg. Célunk, hogy ezen leképezést bővítve egy, az 1.3. definíciónak eleget tevő f : V 1 V 2 függvényt kapjunk, vagy hamis értékkel jelezzük, 20

25 amennyiben ilyen függvény biztosan nem létezik. 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 2 l V1 (u i ) = l V2 (v j ) deg(u i ) deg(v j )}, ahol deg(u i ) jelöli az u i csúcs fokszámát ábra. Példa az Ullmann-algoritmus inputjára 2.2. Példa Tekintsük a 2.2. ábrán látható példát. A H i halmazokat meghatározva kapjuk: u 1 H 1 = {v 2, v 4, v 6 } u 2 H 2 = {v 2, v 4 } u 3 H 3 = {v 3, v 5 } u 4 H 4 = {v 2, v 4, v 6 } 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 üres halmaz. Ez lesz a 0. szint. A fa minden egyes csúcsa egy f : V 1 V 2 injektív leképezés, ahol V 1 V 1 és V 2 V 2 és V 1 = V 2. Formálisan, egy, az i. szinten lévő belső csúcsnak a következő függvény felel meg: f(u 1 ) = v j1 H 1 f(u 2 ) = v j2 H 2. 21

26 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 4 v 6 u 2 v 2 v 4 v 2 v 4 v 2 v 4 u 3 node node node node node node node node node node node v 3 v 5 v 3 v 5 v 3 v 5 v 3 v 5 v 3 v 5 v 3 v 5 u 4 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v 6 v 2 v 4 v ábra. A keresési fa a 2.2. ábrán látható input esetén f(u i ) = v ji H i Ezen leképezést próbáljuk meg kiterjeszteni u i+1 -re úgy, hogy f(u i+1 ) lehetséges értékei a H i+1 halmazból valók legyenek, és f továbbra is injektív legyen. Így meghatároztuk azon f : V 1 V 2 injektív leképezést, melyre f(u i ) = v ji H i i = 1,..., n 1, ahol n 1 := V Példa A 2.2. példa esetén a 2.3. á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. Az így kapott leképezések között keressünk egy olyan f-et, mely teljesíti a részgráf-izomorfia 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. Mivel a teljes fa óriási méretű lehet, csak azon részeit építjük fel, amelyeket be kell járnunk. Annak érdekében, hogy a keresés során kihagyható részfákat minél hamarabb kiszűrhessük és ezáltal az algoritmus minél gyorsabb legyen, ú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 22

27 . 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 Abban az esetben, ha ezen feltételek egyike nem teljesül, akkor töröljük v-t u i lehetséges képei közül Példa Az injektivitási kritérium alapján a 2.2. példa esetén a pirossal jelölt csúcsokat a 2.3. ábrán látható keresési fából törölhetjük. A finomítási eljárás során folyamatosan figyeljük, hogy valamelyik H i üres halmaz-e. Ekkor az algoritmus visszalép az előző szintre. Amennyiben az algoritmus a 0. szintről lépne vissza, az eljárás hamis visszatérési értékkel leáll. Alkalmazott adatstruktúrák Az Ullmann-algoritmus implementálához szükségünk van két tömbre: mapping {1,..., n 2 } n 1 -re és isused L n 2 -re, ahol n 2 := V 2 és L = {igaz, hamis}. Szükséges továbbá egy M = (m ij ) n1 n 2 mátrix is, ahol m ij L. Az isused tömb segítségével tároljuk, hogy G 2 mely csúcsait használtuk egy belső lépés során, azaz isused j =igaz, ha G 2 gráf j. csúcsát megfeleltettük valamely u i V 1 csúcsnak. A megfeleltetéseket a mapping vektorban tároljuk: mapping i =j, ha f(u i ) = v j. 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 { igaz ha deg(ui ) deg(v j ) l V1 (u i ) = l V2 (v j ) m ij := hamis különben Jelöljük d-vel, hogy a keresési fa épp mely szintjén járunk. Részgráfizomorfizmust abban az esetben találunk, amennyiben minden G 1 -beli csúcsnak 23

28 megfeleltettünk egy G 2 -beli csúcsot az 1.3. definíciónak megfelelően, azaz d > n 1. Az 1. algoritmus formájában összefoglalt kód 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. Abban az esetben, ha a Finomítási kritérium (Feasibility function) igaz az (u d, v k ) párra, a két tömböt és a mátrixot ennek az állapotnak megfelelően módosítjuk. Az algoritmus fontos lépése a 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. Abban az esetben, ha 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 összefoglalt pszeudokód a 10. sorban visszalép az előző szintre, amennyiben az adott csúcs alatt biztosan nincs részgráf-izomorfizmus függvény. algorithm 1 UllmannAlgorithm(G 1, G 2, mapping, isused, d) Input : G 1, G 2 graphs mapping : a vector with length n 1, initialized with -1 values isused: a vector with length n 2, initialized with false values d: depth, initialized to 0 M : matrix, initialized previously? Output: Boolean: G 1 G 2 1: if d > n 1 then 2: return true 3: end if 4: for each 1 j n 2 do 5: if F easibilityf unction(d, j) = true then 6: StoreDataStructureAndRef inem atrix(d, j) 7: if UllmannAlgorithm(G 1, G 2, mapping, isused, d + 1) then 8: return true 9: else 10: RestoreDataStructure() 11: end if 12: end if 13: return false 14: end for each Az Ullmann-algoritmus memóriaigénye O(n 3 ), ahol n := n 1 +n 2, mivel a tömbök 24

29 u 1 v 2 v 4 v 6 u 3 v 3 v 5 v 3 v 5 v 3 v ábra. A keresési fa felső két szintje mérete O(n) és minden lépésben eltároljuk az M mátrixot, a keresési fa konstrukciója alapján n 1 különböző lépés lehet. Az algoritmus futása során fontos kérdés, hogy hogyan válasszuk meg az atomok feldolgozási sorrendjét ú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 az atomok megvizsgálásának sorrendjével foglalkozni Példa Tegyük fel, hogy a 2.2. ábrán látható input esetén a keresési fa 1. szintjét u 1, 2. szintjét pedig u 3 szerint építjük fel. Az így kapott keresési fa felső szintje látható a 2.4. ábrán. Figyeljük meg, 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ölhetjük a keresési fa 2. szintjén a pirossal jelölt csúcsokat. A 2.3. ábrával összevetve láthatjuk, hogy 4 helyett csak 3 megengedett csúcs van a keresési fa 2. szintjén VF2 algoritmus Az algoritmus Ebben az alfejezetben L. P. Cordella, P. Foggia, C. Sansone és M. Vento ben publikált algoritmusát [9], a VF2-t elemezzük. A szerzők az algoritmust címkézetlen, irányított gráfokra ismertették. Ezen algoritmust módosítottuk úgy, hogy irányítatlan, címkézett gráfokra oldjuk meg a részgráf-izomorfia problémát, mivel a molekulagráfok ilyen tulajdonságokkal rendelkeznek. Az algoritmus alkalmazhatóságának fontos feltétele, hogy a G 1 gráf csúcshalmaza teljesen rendezett legyen. Az algoritmus egy visszalépéses keresés, melynek során az egyes állapotok egy-egy (parciális) részgráf-izomorfizmusnak felelnek meg. Mivel 25

30 a keresési fa nagy méretű lehet, ezért nem építjük fel előre. A keresés során a fa csak azon részeit határozzuk meg, melyre szükségünk van. Az algoritmus minden lépésben tekint egy s állapotot, és ezen állapot által meghatározott parciális izomorfizmust megpróbálja kibővíteni úgy, hogy végül részgráf-izomorfizmust kapjunk V 1 és V 2 között, vagy hamis visszatérési értékkel termináljon, amennyiben G 2 nem tartalmazza G 1 -t. Amennyiben az aktuális állapotot nem tudja bővíteni, visszalép az előző szintre, és onnan folytatja tovább a fenti gondolatmenetet. Abban az esetben, ha a kezdőállapotból lépne vissza, hamis értékkel terminál, mivel G 1 G 2 nem teljesül. A parciális izomorfizmus kibővítéséhez az algoritmus először meghatározza azon jelölt (u, v) párokat, melyekkel ezen s állapotot bővíthetné. Jelölje Candidates(s) az ezen párokat tartalmazó halmazt. Ekkor még nem biztos, hogy az s állapotot bármely Candidates(s)-beli párral bővítve továbbra is (parciális) izomorfizmust kapunk G 1 és G 2 között. Ennek a feltételnek az ellenőrzését a F easibilityf unction(s, u, v) függvény végzi. F easibilityf unction(s, u, v) értéke pontosan akkor igaz, ha az s állapotot az (u, v) párral bővítve továbbra is (parciális) izomorfizmust kapunk. algorithm 2 V F 2Algorithm(s) Input : an intermediate state s, the initial state s 0 has M(s 0 ) :=? Output: Boolean: G 1 G 2 1: if M(s) covers all the nodes in G 1 then 2: return true 3: else 4: ComputeCandidates(s) 5: for each (u, v) Candidates(s) do 6: if F easibilityf unction(s, u, v) = true then 7: M(s ) := M(s) {(u, v)} 8: StoreDataStructure(u, v) 9: if V F 2Algorithm(s ) then 10: return true 11: else 12: RestoreDataStructures() 13: end if 14: end if 15: end for each 16: return f alse 17: end if 26

31 A Candidates(s) halmaz és a F easibilityf unction(s, u, v) kiszámítását a következőek során részletezzük. Előtte még szükségünk van néhány jelölés bevezetésére. Legyen M(s) := {(u, v) u V 1 v V 2 f(u) = v}, ahol f részgráf-izomorfizmus (1.3. definíció) G 1 egy feszített részgráfja és G 2 között. A kezdőállapotot jelölje s 0. Ekkor nyilván M(s 0 ) =. Jelölje G 1 (s), illetve G 2 (s) azon V 1 illetve V 2 -beli csúcsokat, melyeket M(s) tartalmaz, azaz precízen: G 1 (s) := {u V 1 v V 2 f(u) = v} és G 2 (s) := {v V 2 u V 1 f(u) = v}. Legyen u G 1 (s) tetszőleges csúcs. N(u) := {u i V 1 (u, u i ) E 1 }, azaz N(u) az u csúcs V 1 -beli szomszédait tartalmazza. Jelöljük N(G 1 (s))-sel a G 1 (s)-beli csúcsok szomszédainak halmazát, azaz N(G 1 (s)) := N(u). Az N(G 2 (s)) halmazt hasonlóan definiálhatjuk. u G 1 (s) A könnyebb áttekinthetőség érdekében a következő ábrákon az alábbi színezést alkalmazzuk. A G 1 (s) és G 2 (s) halmazokat kék színnel, az N(G 1 (s))\g 1 (s) és az N(G 2 (s))\g 2 (s) halmazokat pedig zöld színnel jelöltük. A Candidates(s) halmaz meghatározásánál kétféle esetet különböztetünk meg. 1. eset: N(G 1 (s))\g 1 (s) A keresési tér minimalizálása érdekében ebben az esetben N(G 1 (s))\g 1 (s) legkisebb sorszámú csúcsának keressük a képét, mely az élstruktúra megtartása miatt csak N(G 2 )\G 2 (s) halmazbeli csúcs lehet. Ezért ezen esetben Candidates(s) := {min(n(g 1 (s))\g 1 (s))} (N(G 2 (s))\g s (s)). 2. eset: N(G 1 (s))\g 1 (s) = Ha s s 0, akkor a G 1 gráf biztosan nem összefüggő. Ebben az esetben V 1 \G 1 (s) legkisebb sorszámú csúcsának keressük a képét. Ezen csúcs szomszédainak képét még nem ismerjük, emiatt a csúcs képe bármely V 2 \N(G 2 (s))- beli csúcs lehet. A gondolatmenet alapján kapjuk, hogy ekkor a jelölt párokat tartalmazó halmaz Candidates(s) := {min(v 1 \G 1 (s))} (V 2 \G 2 (s)). Megjegyzés. Abban az esetben, ha a részgráf-izomorfia alatt a szigorúbb, feszített részgráfként történő tartalmazást értjük, a Candidates(s) halmaz meghatározása a 2. esetben a következőképpen változik az élstruktúra megtartása miatt: Candidates(s) := {min(v 1 \G 1 (s))} (V 2 \(N(G 2 (s)) G 2 (s))). A F easibilityf unction(s, u, v) logikai függvény alkalmazásával a keresési fát csökkenthetjük. Értéke akkor igaz, ha az M(s ) := M(s) {(u, v)} (parciális) izomorfizmust tovább bővítve végül egy részgráf-izomorfizmust kaphatunk G 1 és G 2 között. F easibilityf unction(s, u, v) kiszámításánál megvizsgáljuk, hogy u és v 27

32 V 2 V 1 G 1 (s) u G 2 (s) 2.5. ábra. A Candidates(s) halmaz kiszámításának 1. esete V 1 V 2 G 1 (s) u G 2 (s) 2.6. ábra. A Candidates(s) halmaz kiszámításának 2. esete kompatibilis-e: szükséges, hogy a csúcs- és az élcímkék egyezőek legyenek, illetve G 2 (s )-nek legalább annyi fel nem használt szomszédja kell, hogy legyen, mint G 1 (s )-nek (2.7. ábra). Formálisan a következő feltételeknek kell teljesülniük: 1. l V1 (u) = l V2 (v) 2. (u i, f(u i )) M(s) ((u, u i ) E 1 ((v, f(u i )) E 2 l E1 (u, u i ) = l E2 (v, f(u i )))) 3. N(G 1 (s) {u})\(g 1 (s) {u}) N(G 2 (s) {v})\(g 2 (s) {v}) Megjegyzés. Ha feszített részgráfként keressük G 1 -et G 2 -ben, a F easibilityf unction függvény kiszámításakor a 4. V 1 \(N(G 1 (s) {u}) G 1 (s) {u}) V 2 \(N(G 2 (s) {v}) G 2 (s) {v}) egyenlőtlenségnek is teljesülnie kell, melyet a 2.8. ábrán szemléltetünk. Ezen egyenlőtlenség nem teljesül abban az esetben, ha részgráf-izomorfia alatt az 1.3. definíciót értjük. Nézzünk erre egy egyszerű példát. 28

33 V 2 V 1 G 1 (s) u? v G 2 (s) 2.7. ábra. F easibilityf unction(s, u, v) 3. feltétel 2.6. Példa Tekintsük a 2.9. ábrán látható gráfokat. Ekkor s = s 0, azaz a kezdőállapotban vagyunk, és a F easibilityf unction(s 0, u 1, v 1 ) értékét szeretnénk meghatározni. Ekkor a 2.8. ábrán jelölt két halmaz számosságára vonatkozó egyenlőtlenség nem teljesül, de G 1 G 2 fennáll. Egy lehetséges részgráf-izomorfizmus V 1 és V 2 között: f(u 1 ) = v 1, f(u 2 ) = v 2 és f(u 3 ) = v 3. V 1 V 2 G 1 (s) u? v G 2 (s) 2.8. ábra. További feltétel a F easibilityf unction(s, u, v) kiszámításakor feszített részgráf-izomorfia esetén Alkalmazott adatstruktúrák Legyen n 1 := V 1, n 2 := V 2 és n := n 1 + n 2. Feltesszük továbbá, hogy a csúcsok sorszáma rendre 1,..., n 1 és 1,..., n 2. Az aktuális (parciális) részgráf-izomorfizmust a mapping[1,..., n 1 ] és az isused[1,..., n 2 ] tömbök segítségével tároljuk: 29

34 V 1? V 2 u 3 u 2 v 2 v 3 G 1 (s) u 1 v 1 G 2 (s) 2.9. ábra. Nem teljesül a F easibilityf unction(s, u, v) 4. feltétele nem feszített részgráf-izomorfia esetén mapping[i]=j és isused[j]=true f(u i ) = v j (u i V 1, v j V 2 ). Kezdetben i [1,..., n 1 ] mapping[i]=-1 és j [1,..., n 2 ] isused[j]=false. A szomszédsági halmazok tárolásához további két tömböt, a querysneighbours[1,..., n 1 ]-t és a targetsneighbours[1,..., n 2 ]-t használjuk. querysneighbours[i] értéke azon keresési mélység, melynek során az u i V 1 csúcs bekerült a G 1 (s) N(G 1 (s)) halmazba. A targetsneighbours tömb elemei hasonlóan definiálhatóak. Ezen tömbök fontos tulajdonsága, hogy ha az i. tömbelem nem nulla az s állapotban, akkor az összes állapot során, melyet s kibővítésével értünk el, továbbra sem lesz nulla. Ezért nem szükséges minden állapothoz külön tárolni ezen négy tömböt. Amennyiben visszalépésre kerül sor, az eltárolt információk hogy melyek ezek, azt a későbbiek során ismertetjük alapján vissza tudjuk állítani az előző állapotot tároló tömböket. Nyilvántartjuk minden állapot során azon (u, v) párt, mellyel a (parciális) részgráf-izomorfizmust kiegészítettük, továbbá az N(G 1 (s))\g 1 (s) és az N(G 2 (s))\g 2 (s) halmazok számosságát. Ezen két érték tárolásával elkerülhető, hogy a query illetve a target összes atomját minden állapot során meg kelljen vizsgálni, hogy megállapíthassunk ezen számosságokat, ehelyett elegendő ezt az ellenőrzést az u illetve v atomok szomszédaira elvégezni, s a korábbi értéket szükség esetén módosítani. A különböző keresési mélységekhez tartozó információkat a history[1,..., n 1 ] tömbben tároljuk. Mivel a tömbök mérete n-nel arányos, továbbá minden állapot során konstans méretű memóriát használunk, és legfeljebb n 1 állapot van, melyet tárolnunk kell, így az algoritmus memóriaigénye O(n). Az algoritmus implementálása során alkalmazott heurisztikákat a későbbiek so- 30

35 rán ismertetjük. Látni fogjuk, hogy ezen heurisztikák alkalmazása esetén az algoritmus memóriaigénye továbbra is O(n) A fejlesztési folyamat A szakdolgozat célja az Ullmann-algoritmus és a VF2 algoritmus implementálása és összehasonlító elemzése volt a ChemAxon Kft. publikus könyvtárát felhasználva. A fejlesztés megkezdése előtt a megfelelő környezetet alakítottuk ki: telepítettük a ChemAxon Kft. ( megfelelő moduljait, a NetBeans fejlesztőkörnyezetet ( a Subversion (SVN) verziókövető rendszert, a Cornerstone SVN kliens programot ( az astah community UML-szerkesztő szoftvert ( és beszereztük a programok használatához szükséges licenceket is. Ezenfelül kiválasztottuk azon molekulákat, melyeket később, a tesztelés és futási idő mérése során használtunk. A fejlesztés elején meghatároztuk a készítendő program vázát, melyet az egyes heurisztikák implementálása előtt szükség esetén tovább bővítettünk. Tervezéssel és implementálással kapcsolatosan ötleteket merítettünk [12]-ból és [14]-ból. A fejlesztés mérföldkövek mentén történt. Mérföldkövet jelentett egy előszűrési módszer, egy heurisztika implementálása a részgráf-izomorfiát eldöntő algoritmusok valamelyikében vagy egy komponens (pl. futási idő mérése, az eredmény szöveges/ grafikus módon történő megjelenítése), melyet minden esetben tesztelés követett. A fejlesztés és a futási idők mérése MacBook Air laptopon (2.13 GHz Intel Core 2 Duo processzor, 2 GB memória), OS X operációs rendszeren történt. A továbbiakban az egyes algoritmusok implementálása során hozott döntésekkel foglalkozunk Implementálás A molekulagráfok ún. SMILES formátumban (1.2. alfejezet, 5. oldal) álltak rendelkezésünkre. A ChemAxon Kft. publikus könyvtárában található MolImporter osztály ImportMol(String s, String opts) metódusát alkalmazva alakítottuk át az inputot a molekulákká. A reprezentáció a ChemAxon Kft. Molecule osztályával történt. Bemenetként adott két fájl. Az egyik fájl a query, a másik pedig a target molekulagráfokat tartalmazza. Feladatunk hatékonyan meghatározni azon query-target párokat, melyek részgráf-izomorfak. Ehhez először beolvassuk a query molekulákat, melyeket egy listában tárolunk. A targetek közül minden lépésben csak egy részt 31

36 általában 1000 molekulagráfot olvasunk be, elvégezzük az előszűrést, valamint ha szükséges, a részgráf-izomorfia vizsgálatokat is. A felhasználói esetek diagramja látható a ábrán ábra. Felhasználói esetek diagramja Futási idők mérése Az egyes algoritmusok futási idejének mérésére létrehoztuk az absztrakt RunningTime osztályt. Ezen osztályból származtattuk az absztrakt RunTimeOfSubstructureSearch osztályt, mely run() metódusa a fent ismertetett elv alapján elvégzi a részgráf-izomorfia vizsgálatot. Mivel több részgráf-izomorfiát eldöntő algoritmus is ismert, ezért nem adjuk meg, hogy pontosan mely algoritmust használja, hanem az absztrakt run(list<molecule> querylist, List<Molecule> targetlist) metódust hívja meg. Öröklődés esetén ezen metódus implementálása kötelező. A RunTimeOfSubstructureSearch osztályból származtattuk a két implementált, részgráf-izomorfiát eldöntő algoritmus futási idejét mérő osztályokat, a 32

37 RunTimeOfUllmannAlgorithm és a RunTimeOfVF2 osztályt. konstruktorai öt paramétert várnak: Ezen két osztály queryfilename: a query molekulákat tartalmazó fájl nevét targetfilename: a target molekulákat tartalmazó fájl nevét numberofloops: az előszűrés után megmaradt párokra hányszor fusson le az algoritmus. Mivel az algoritmus futásideje kis molekulagráfok esetén nehezen mérhető, ezért (a mérési pontatlanság miatt) szükség lehet az algoritmus több, egymás utáni futtatására. numberoftargetsinaloop: egy részlet mérete, azaz mennyi target molekulát olvasson be egyszerre a részgráf-izomorfia vizsgálathoz versions: a verziók számát tartalmazó tömböt A heurisztikákhoz szükséges a query molekula atomjait rendezni, amelyre két különböző módszert is implementáltunk. Ezen módszerek mérésére szolgálnak a RunTimeOfSorting, RunTimeOfCountingSort és RunTimeOfQuickSort osztályok. A futási időt mérő osztályok közötti kapcsolat látható a ábrán, valamint a részletes osztálydiagram a ábrán tekinthető meg ábra. A futási időt mérő osztályok közötti kapcsolat Előszűrés Az előszűrést a Screen osztály végzi. A konstruktor paraméterként a query és target molekulát, valamint három logikai értéket vár. Ezen logikai értékekkel a 2.1. alfejezetben ismertetett előszűrési feltételeket kapcsolhatjuk be vagy ki. Triviális előszűrési feltétel a query és a target atom- és kötésszámára vonatkozó egyenlőtlenség 33

38 2.12. ábra. A futási időt mérő osztályok közötti kapcsolat 34

39 ellenőrzése, így ezen vizsgálatokat minden esetben elvégzi az előszűrést végző run() metódus. Az eredményt a getresult() metódussal kérdezhetjük le. Abban az esetben, ha korábban nem futtattuk a run() metódust, kivételt kapunk Részgráf-izomorfiát eldöntő algoritmusok Mint már korábban is említettük, részstruktúra-keresésre az Ullmannalgoritmust és a VF2 algoritmust implementáltuk. Ezen osztályok közös őssel, a SubstructureSearch absztrakt osztállyal rendelkeznek. Ezen és a kapcsolódó osztályok közötti kapcsolat látható a ábrán, a részletes osztálydiagram pedig a ábrán tekinthető meg. Az implementált, részgráf-izomorfiát eldöntő algoritmusok konstruktora a két molekulagráfot (a query és a target molekulát) valamint egy verziószámot vár paraméterül. A verziószám segítségével mondhatjuk meg, hogy pontosan mely heurisztikák legyenek bekapcsolva. Az algoritmus heurisztikák nélküli futtatása esetén a verziószám értéke 0. Amennyiben az egyes heurisztikákat alkalmazni szeretnénk az algoritmus futása során, adjuk össze az alkalmazni kívánt heurisztikáknál feltüntetett értékeket. Mindkét algoritmus esetén több heurisztikát is implementáltunk, és összehasonlítottuk ezen verziók átlagos futási idejét. Először azon heurisztikákat tekintjük át, melyeket mindkét algoritmushoz elkészítettünk ábra. A részgráf-izomorfiát eldöntő osztályok és az előszűrést végző osztály közötti kapcsolat 35

40 Atomok rendezése Az implementált algoritmusok véletlen atomsorrenddel egyáltalán nem stabilak, nagyságrendi különbséget mértünk különböző véletlen sorrendekkel. Emiatt alapesetben az eredeti atomsorrendet használjuk, melyet a SMILES inputból (1.2. alfejezet, 5. oldal) kapunk. Az algoritmusok futási idejében jelentős gyorsítást érhetünk el, ha a query molekula atomjait gyakoriság alapján rendezzük, ugyanis ajánlott először a ritka atomok képét keresni. Az egyes atomtípusok gyakoriságának megállapításához az amerikai Nemzeti Rákkutató Intézet (NCI) publikus molekulagyűjteményén [5] készítettünk statisztikát. Kétféle rendezési módszert hasonlítottunk össze: a Java beépített rendező algoritmusát melyhez a szükséges Comparator-okat implementáltuk és az általunk implementált edényrendezést. Az egyes algoritmusok futási idejének méréséhez a RunTime osztályból származtattuk az absztrakt RunTimeOfSorting osztályt, melynek két leszármazott osztálya a RunTimeOfCountingSort és a RunTimeOfQuickSort. A futási időt mérő osztályok közötti kapcsolat tekinthető meg a ábrán, valamint a részletes osztálydiagram a ábrán látható. Mindkét esetben az atomokat többféleképpen csoportosítjuk rendszámuk és kötésszámuk alapján. Az egyik megközelítés szerint osszuk az atomokat 3 csoportba gyakoriságuk alapján. Ekkor külön csoportba kerülnek a szénatomok, egy másikat a nitrogén-, oxigén-, fluór-, kén-, klór- és brómatomok alkotják, a 3. csoportba pedig az összes többi atom kerül. Egy más felvetés alapján az atomokat 4 csoportba osztjuk. Ekkor a korábbihoz képest az eltérés, hogy az oxigén- és a nitrogénatomokat helyezzük külön csoportba. Az atomok 7 kategóriába történő elosztása már figyelembe veszi a szénatomok kötéseinek számát is. Jellemzően kevesebb olyan szénatom található egy molekulában, melynek kötésszáma 3 vagy 4, mint 1 vagy 2. Így a korábbi széncsoportot 4 részre osztjuk a kötésszámoknak megfelelően. A keresés során előnyben részesítjük a nagyobb kötésszámú szénatomokat, és csak ezután keressük a kevesebb kötésszámú szénatomok képét. Nagyon finom rendezési módszer az atomok 18 csoportba történő osztása, mely az oxigén-, nitrogén és kénatomok esetén is figyelembe veszi a kötésszámot. Megmértük az NCI molekulagyűjteményen a különböző módszerek futási idejét. Az így kapott eredményeket tartalmazza a 2.4. táblázat. Jól látható, hogy az edényrendezés kb. 4-7-szer gyorsabb a beépített rendező algoritmusnál, így a későbbiek során az általunk implemetált edényrendezést alkalmazzuk a molekula atomjainak rendezéséhez. 36

41 2.14. ábra. A részgráf-izomorfiát eldöntő osztályok és a hozzá kapcsolódó osztályok közötti kapcsolat 37

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

A részgráf-izomorfia probléma adatbázisokban 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

Részletesebben

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

Hasonlósági keresés molekulagráfokon: legnagyobb közös részgráf keresése Hasonlósági keresés molekulagráfokon: legnagyobb közös részgráf keresése Kovács Péter ChemAxon Kft., ELTE IK kpeter@inf.elte.hu Budapest, 2018.11.06. Bevezetés Feladat: két molekulagráf legnagyobb közös

Részletesebben

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

Gráf- és részgráf-izomorfizmus problémák kémiai adatbázisokban. Diplomamunka Eötvös Loránd Tudományegyetem Természettudományi Kar Gráf- és részgráf-izomorfizmus problémák kémiai adatbázisokban Diplomamunka Témavezető: Dr. Tichler Krisztián ELTE IK Algoritmusok és Alkalmazásaik

Részletesebben

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.

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. Algoritmuselmélet NP-teljes problémák Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 13. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet

Részletesebben

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

Algoritmuselmélet. Bonyolultságelmélet. Katona Gyula Y. Algoritmuselmélet Bonyolultságelmé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. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2015. ősz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2015.

Részletesebben

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

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2016. tavasz 1. Diszkrét matematika 2. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK 30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK A gráfos alkalmazások között is találkozunk olyan problémákkal, amelyeket megoldását a részekre bontott gráfon határozzuk meg, majd ezeket alkalmas módon teljes megoldássá

Részletesebben

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

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

Általános algoritmustervezési módszerek

Általános algoritmustervezési módszerek Általános algoritmustervezési módszerek Ebben a részben arra mutatunk példát, hogy miként használhatóak olyan általános algoritmustervezési módszerek mint a dinamikus programozás és a korlátozás és szétválasztás

Részletesebben

22. GRÁFOK ÁBRÁZOLÁSA

22. GRÁFOK ÁBRÁZOLÁSA 22. GRÁFOK ÁBRÁZOLÁSA A megoldandó feladatok, problémák modellezése során sokszor gráfokat alkalmazunk. A gráf fogalmát a matematikából ismertnek vehetjük. A modellezés során a gráfok több változata is

Részletesebben

Gráfalgoritmusok ismétlés ősz

Gráfalgoritmusok ismétlés ősz Gráfalgoritmusok ismétlés 2017. ősz Gráfok ábrázolása Egy G = (V, E) gráf ábrázolására alapvetően két módszert szoktak használni: szomszédsági listákat, illetve szomszédsági mátrixot. A G = (V, E) gráf

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2015. tavasz 1. Diszkrét matematika 2.C szakirány 1. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu Komputeralgebra Tanszék 2015. tavasz Gráfelmélet Diszkrét

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2017. tavasz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.

Részletesebben

2. Visszalépéses stratégia

2. Visszalépéses stratégia 2. Visszalépéses stratégia A visszalépéses keres rendszer olyan KR, amely globális munkaterülete: út a startcsúcsból az aktuális csúcsba (ezen kívül a még ki nem próbált élek nyilvántartása) keresés szabályai:

Részletesebben

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

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF Összefoglaló Gráfok / EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF Adott a G = (V, E) gráf ahol a V a csomópontok, E az élek halmaza E = {(x, y) x, y V, x y (nincs hurokél) és (x, y) = (y, x)) Jelölések:

Részletesebben

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

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 7. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

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

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma Készítette: Laczik Sándor János Gráfelmélet I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma Definíció: a G=(V,E) párt egyszerű gráfnak nevezzük, (V elemeit a gráf csúcsainak/pontjainak,e elemeit

Részletesebben

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport 10-es Keressünk egy egész számokat tartalmazó négyzetes mátrixban olyan oszlopot, ahol a főátló alatti elemek mind nullák! Megolda si terv: Specifika cio : A = (mat: Z n m,ind: N, l: L) Ef =(mat = mat`)

Részletesebben

Ramsey-féle problémák

Ramsey-féle problémák FEJEZET 8 Ramsey-féle problémák "Az intelligens eljárást az jellemzi, hogy még a látszólag megközelíthetetlen célhoz is utat nyit, megfelelő segédproblémát talál ki és először azt oldja meg." Pólya György:

Részletesebben

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

Logika és számításelmélet. 11. előadás Logika és számításelmélet 11. előadás NP-teljesség Emlékeztetőül: NP-teljes nyelv Egy L probléma NP-teljes (a polinom idejű visszavezetésre nézve), ha L NP L NP-nehéz, azaz minden L NP esetén L p L. Azaz

Részletesebben

Diszkrét matematika 2.

Diszkrét matematika 2. Diszkrét matematika 2. Mérai László előadása alapján Készítette: Nagy Krisztián 1. előadás Gráfok halmaza, gráf, ahol a csúcsok halmaza, az élek illesztkedés reláció: illesztkedik az élre, ha ( -él illesztkedik

Részletesebben

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

Bonyolultságelmélet gyakorlat 06 Gráfos visszavezetések II. onyolultságelmélet gyakorlat 06 Gráfos visszavezetések II. 1. Feladat Mutassuk meg, hogy a n/-hosszú kör probléma NP-nehéz! n/-hosszú kör Input: (V, ) irányítatlan gráf Output: van-e G-ben a csúcsok felén

Részletesebben

2. Visszalépéses keresés

2. Visszalépéses keresés 2. Visszalépéses keresés Visszalépéses keresés A visszalépéses keresés egy olyan KR, amely globális munkaterülete: egy út a startcsúcsból az aktuális csúcsba (az útról leágazó még ki nem próbált élekkel

Részletesebben

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

Diszkrét matematika 1. estis képzés Diszkrét matematika 1. estis képzés 2019. tavasz 1. Diszkrét matematika 1. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Mérai László diái alapján

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 4 IV. FÜGGVÉNYEk 1. LEkÉPEZÉSEk, függvények Definíció Legyen és két halmaz. Egy függvény -ből -ba egy olyan szabály, amely minden elemhez pontosan egy elemet rendel hozzá. Az

Részletesebben

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

Amortizációs költségelemzés Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük

Részletesebben

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

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y. Algoritmuselmélet Mélységi keresés és alkalmazásai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 9. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet

Részletesebben

A PiFast program használata. Nagy Lajos

A PiFast program használata. Nagy Lajos A PiFast program használata Nagy Lajos Tartalomjegyzék 1. Bevezetés 3 2. Bináris kimenet létrehozása. 3 2.1. Beépített konstans esete.............................. 3 2.2. Felhasználói konstans esete............................

Részletesebben

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.

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. Algoritmuselmélet NP-teljes problémák Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 12. előadás Katona Gyula Y. (BME SZIT) Algoritmuselmélet

Részletesebben

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

Miskolci Egyetem Gépészmérnöki és Informatikai Kar Informatikai Intézet Alkalmazott Informatikai Intézeti Tanszék Miskolci Egyetem Gépészmérnöki és Informatikai Kar Informatikai Intézet Alkalmazott Informatikai Intézeti Tanszék 2016/17 2. félév 5. Előadás Dr. Kulcsár Gyula egyetemi docens Tartalom 1. Párhuzamosan

Részletesebben

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

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 11. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

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

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 10. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2017. ősz 1. Diszkrét matematika 2.C szakirány 2. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.

Részletesebben

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

Bonyolultságelmélet. Thursday 1 st December, 2016, 22:21 Bonyolultságelmélet Thursday 1 st December, 2016, 22:21 Tárbonyolultság A futásidő mellett a felhasznált tárterület a másik fontos erőforrás. Ismét igaz, hogy egy Ram-program esetében ha csak a használt

Részletesebben

Bevezetés az informatikába

Bevezetés az informatikába Bevezetés az informatikába 6. előadás Dr. Istenes Zoltán Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék Matematikus BSc - I. félév / 2008 / Budapest Dr.

Részletesebben

INFORMATIKA javítókulcs 2016

INFORMATIKA javítókulcs 2016 INFORMATIKA javítókulcs 2016 ELMÉLETI TÉTEL: Járd körbe a tömb fogalmát (Pascal vagy C/C++): definíció, egy-, két-, több-dimenziós tömbök, kezdőértékadás definíciókor, tömb típusú paraméterek átadása alprogramoknak.

Részletesebben

Gráfelméleti feladatok. c f

Gráfelméleti feladatok. c f 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,

Részletesebben

Diszkrét matematika 2.

Diszkrét matematika 2. Diszkrét matematika 2. 2018. szeptember 21. 1. Diszkrét matematika 2. 2. előadás Fancsali Szabolcs Levente nudniq@cs.elte.hu www.cs.elte.hu/ nudniq Komputeralgebra Tanszék 2018. szeptember 21. Gráfelmélet

Részletesebben

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

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y. Algoritmuselmélet Gráfok megadása, szélességi bejárás, összefüggőség, párosítás Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 2. előadás

Részletesebben

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

Javító és majdnem javító utak Javító és majdnem javító utak deficites Hall-tétel alapján elméletileg meghatározhatjuk, hogy egy G = (, ; E) páros gráfban mekkora a legnagyobb párosítás mérete. Ehhez azonban első ránézésre az összes

Részletesebben

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.

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. Számításelmélet Kiszámítási problémának nevezünk egy olyan, a matematika nyelvén megfogalmazott kérdést, amire számítógéppel szeretnénk megadni a választ. (A matematika nyelvén precízen megfogalmazott

Részletesebben

Algoritmusok bonyolultsága

Algoritmusok bonyolultsága Algoritmusok bonyolultsága 5. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 27 Gazdaságos faváz Kruskal-algoritmus Joseph Kruskal (1928 2010) Legyen V = {v 1, v 2,..., v n }, E = {e 1, e 2,...,

Részletesebben

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb. SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.hu Mesterséges intelligencia oktatás a DE Informatikai

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2017. tavasz 1. Diszkrét matematika 2.C szakirány 4. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2017.

Részletesebben

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

Diszkrét matematika 1. estis képzés Diszkrét matematika 1. estis képzés 2019. tavasz 1. Diszkrét matematika 1. estis képzés 11. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Mérai László diái alapján

Részletesebben

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:

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: Gráfok, definíciók Irányítatlan gráf: G = (V,E), ahol E rendezetlen (a,b),a,b V párok halmaza. Irányított gráf: G = (V,E) E rendezett (a,b) párok halmaza; E V V. Címkézett (súlyozott) gráf: G = (V,E,C)

Részletesebben

Hadamard-mátrixok Előadó: Hajnal Péter február 23.

Hadamard-mátrixok Előadó: Hajnal Péter február 23. Szimmetrikus kombinatorikus struktúrák MSc hallgatók számára Hadamard-mátrixok Előadó: Hajnal Péter 2012. február 23. 1. Hadamard-mátrixok Ezen az előadáson látásra a blokkrendszerektől független kombinatorikus

Részletesebben

Alap fatranszformátorok II

Alap fatranszformátorok II Alap fatranszformátorok II Vágvölgyi Sándor Fülöp Zoltán és Vágvölgyi Sándor [2, 3] közös eredményeit ismertetjük. Fogalmak, jelölések A Σ feletti alaptermek TA = (T Σ, Σ) Σ algebráját tekintjük. Minden

Részletesebben

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

Bonyolultságelmélet. Monday 26 th September, 2016, 18:50 Bonyolultságelmélet Monday 26 th September, 2016, 18:50 A kiszámítás modelljei 2 De milyen architektúrán polinom? A kiszámításnak számos (matematikai) modellje létezik: Általános rekurzív függvények λ-kalkulus

Részletesebben

Érdekes informatika feladatok

Érdekes informatika feladatok A keres,kkel és adatbázissal ellátott lengyel honlap számos díjat kapott: Spirit of Delphi '98, Delphi Community Award, Poland on the Internet, Golden Bagel Award stb. Az itt megtalálható komponenseket

Részletesebben

Gráfelméleti alapfogalmak

Gráfelméleti alapfogalmak 1 Gráfelméleti alapfogalmak Gráf (angol graph= rajz): pontokból és vonalakból álló alakzat. pontok a gráf csúcsai, a vonalak a gráf élei. GRÁ Irányítatlan gráf Vegyes gráf Irányított gráf G H Izolált pont

Részletesebben

S0-02 Típusmodellek (Programozás elmélet)

S0-02 Típusmodellek (Programozás elmélet) S0-02 Típusmodellek (Programozás elmélet) Tartalom 1. Absztrakt adattípus 2. Adattípus specifikációja 3. Adattípus osztály 4. Paraméterátadás 5. Reprezentációs függvény 6. Öröklődés és polimorfizmus 7.

Részletesebben

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

Függvények növekedési korlátainak jellemzése 17 Függvények növekedési korlátainak jellemzése A jellemzés jól bevált eszközei az Ω, O, Θ, o és ω jelölések. Mivel az igények általában nemnegatívak, ezért az alábbi meghatározásokban mindenütt feltesszük,

Részletesebben

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban OpenCL alapú eszközök verifikációja és validációja a gyakorlatban Fekete Tamás 2015. December 3. Szoftver verifikáció és validáció tantárgy Áttekintés Miért és mennyire fontos a megfelelő validáció és

Részletesebben

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László) Szimuláció RICHARD M. KARP és AVI WIGDERSON A Fast Parallel Algorithm for the Maximal Independent Set Problem című cikke alapján (Készítette: Domoszlai László) 1. Bevezetés A következőkben megadott algoritmus

Részletesebben

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008 Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008 Az Előadások Témái Bevezető: mi a mesterséges intelligencia... Tudás reprezentáció Gráfkeresési stratégiák Szemantikus hálók

Részletesebben

Leképezések. Leképezések tulajdonságai. Számosságok.

Leképezések. Leképezések tulajdonságai. Számosságok. Leképezések Leképezések tulajdonságai. Számosságok. 1. Leképezések tulajdonságai A továbbiakban legyen A és B két tetszőleges halmaz. Idézzünk fel néhány definíciót. 1. Definíció (Emlékeztető). Relációknak

Részletesebben

III. Gráfok. 1. Irányítatlan gráfok:

III. Gráfok. 1. Irányítatlan gráfok: III. Gráfok 1. Irányítatlan gráfok: Jelölés: G=(X,U), X a csomópontok halmaza, U az élek halmaza X={1,2,3,4,5,6}, U={[1,2], [1,4], [1,6], [2,3], [2,5], [3,4], [3,5], [4,5],[5,6]} Értelmezések: 1. Fokszám:

Részletesebben

HAMILTON ÚT: minden csúcson PONTOSAN egyszer áthaladó út

HAMILTON ÚT: minden csúcson PONTOSAN egyszer áthaladó út SÍKBA RAJZOLHATÓ GRÁFOK ld. előadás diasorozat SZÍNEZÉS: ld. előadás diasorozat PÉLDA: Reguláris 5 gráf színezése 4 színnel Juhász, PPKE ITK, 007: http://users.itk.ppke.hu/~b_novak/dmat/juhasz_5_foku_graf.bmp

Részletesebben

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Felvételi vizsga mintatételsor Informatika írásbeli vizsga BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) Felvételi vizsga mintatételsor Informatika írásbeli vizsga 1. (5p) Egy x biten tárolt egész adattípus (x szigorúan pozitív

Részletesebben

Feladatok, amelyek gráfokkal oldhatók meg 1) A königsbergi hidak problémája (Euler-féle probléma) a

Feladatok, amelyek gráfokkal oldhatók meg 1) A königsbergi hidak problémája (Euler-féle probléma) a Feladatok, amelyek gráfokkal oldhatók meg ) A königsbergi hidak problémája (Euler-féle probléma) a b d c A megfelelő gráf: d a b c ) Egy szórakoztató feladat (Hamilton-féle probléma) Helyezzük el az,,,...,

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 1 I. HALmAZOk 1. JELÖLÉSEk A halmaz fogalmát tulajdonságait gyakran használjuk a matematikában. A halmazt nem definiáljuk, ezt alapfogalomnak tekintjük. Ez nem szokatlan, hiszen

Részletesebben

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

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése Dr. Kallós Gábor 2014 2015 1 Az Ordó jelölés Azt mondjuk, hogy az f(n) függvény eleme az Ordó(g(n)) halmaznak, ha van olyan c konstans (c

Részletesebben

Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése

Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése Készítette: Bognár Gergő Témavezető: Veszprémi Anna Eötvös Loránd Tudományegyetem Informatikai Kar Algoritmusok és Alkalmazásaik Tanszék Budapest,

Részletesebben

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..

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.. A Név: l 2014.04.09 Neptun kód: Gyakorlat vezető: HG BP MN l 1. Adott egy (12 nem nulla értékû elemmel rendelkezõ) 6x7 méretû ritka mátrix hiányos 4+2 soros reprezentációja. SOR: 1 1 2 2 2 3 3 4 4 5 6

Részletesebben

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha ALAPFOGALMAK 1 Á l l a p o t t é r Legyen I egy véges halmaz és legyenek A i, i I tetszőleges véges vagy megszámlálható, nem üres halmazok Ekkor az A= A i halmazt állapottérnek, az A i halmazokat pedig

Részletesebben

GráfRajz fejlesztői dokumentáció

GráfRajz fejlesztői dokumentáció GráfRajz Követelmények: A GráfRajz gráfokat jelenít meg grafikus eszközökkel. A gráfot többféleképpen lehet a programba betölteni. A program a gráfokat egyedi fájl szerkezetben tárolja. A fájlokból betölthetőek

Részletesebben

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok. Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 4. előadás Procedurális programozás: iteratív és rekurzív alprogramok Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

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

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA 26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA Az előző két fejezetben tárgyalt feladat általánosításaként a gráfban található összes csúcspárra szeretnénk meghatározni a legkisebb költségű utat. A probléma

Részletesebben

Véletlen sorozatok ellenőrzésének módszerei. dolgozat

Véletlen sorozatok ellenőrzésének módszerei. dolgozat Eötvös Loránd Tudományegyetem Informatikai Kar Komputeralgebra Tanszék Véletlen sorozatok ellenőrzésének módszerei dolgozat Témavezető: Dr. Iványi Antal Miklós egyetemi tanár Készítette: Potempski Dániel

Részletesebben

Felvételi tematika INFORMATIKA

Felvételi tematika INFORMATIKA Felvételi tematika INFORMATIKA 2016 FEJEZETEK 1. Természetes számok feldolgozása számjegyenként. 2. Számsorozatok feldolgozása elemenként. Egydimenziós tömbök. 3. Mátrixok feldolgozása elemenként/soronként/oszloponként.

Részletesebben

HAMILTON KÖR: minden csúcson PONTOSAN egyszer áthaladó kör. Forrás: (

HAMILTON KÖR: minden csúcson PONTOSAN egyszer áthaladó kör. Forrás: ( HAMILTON KÖR: minden csúcson PONTOSAN egyszer áthaladó kör Teljes gráf: Páros gráf, teljes páros gráf és Hamilton kör/út Hamilton kör: Minden csúcson áthaladó kör Hamilton kör Forrás: (http://www.math.klte.hur/~tujanyi/komb_j/k_win_doc/g0603.doc

Részletesebben

AWK programozás, minták, vezérlési szerkezetek

AWK programozás, minták, vezérlési szerkezetek 10 AWK programozás, minták, vezérlési szerkezetek AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa

Részletesebben

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás? Bevezetés Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések Forráskód Hibajegyzék p2p.wrox.com xiii xiii xiv xiv xvi xvii xviii

Részletesebben

Az optimális megoldást adó algoritmusok

Az optimális megoldást adó algoritmusok Az optimális megoldást adó algoritmusok shop ütemezés esetén Ebben a fejezetben olyan modellekkel foglalkozunk, amelyekben a munkák több műveletből állnak. Speciálisan shop ütemezési problémákat vizsgálunk.

Részletesebben

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK Informatikai alapismeretek középszint 0621 ÉRETTSÉGI VIZSGA 2007. május 25. INFORMATIKAI ALAPISMERETEK KÖZÉPSZINTŰ ÍRÁSBELI ÉRETTSÉGI VIZSGA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ OKTATÁSI ÉS KULTURÁLIS MINISZTÉRIUM

Részletesebben

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző

Részletesebben

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

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus GRÁFELMÉLET 7. előadás Javító utak, javító utak keresése, Edmonds-algoritmus Definíció: egy P utat javító útnak nevezünk egy M párosításra nézve, ha az út páratlan hosszú, kezdő- és végpontjai nem párosítottak,

Részletesebben

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

Adaptív dinamikus szegmentálás idősorok indexeléséhez Adaptív dinamikus szegmentálás idősorok indexeléséhez IPM-08irAREAE kurzus cikkfeldolgozás Balassi Márton 1 Englert Péter 1 Tömösy Péter 1 1 Eötvös Loránd Tudományegyetem Informatikai Kar 2013. november

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2017. tavasz 1. Diszkrét matematika 2.C szakirány 11. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

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

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból ÜTEMTERV Programozás-elmélet c. tárgyhoz (GEMAK233B, GEMAK233-B) BSc gazdaságinformatikus, programtervező informatikus alapszakok számára Óraszám: heti 2+0, (aláírás+kollokvium, 3 kredit) 2019/20-es tanév

Részletesebben

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek Programozás alapjai gyakorlat 4. gyakorlat Konstansok, tömbök, stringek Házi ellenőrzés (f0069) Valósítsd meg a linuxos seq parancs egy egyszerűbb változatát, ami beolvas két egész számot, majd a kettő

Részletesebben

38. A gráfalgoritmusok alkalmazása

38. A gráfalgoritmusok alkalmazása 38. A gráfalgoritmusok alkalmazása Állapotok és átmenetek A gráf adattípus nagyon sokféle feladat megoldásánál alkalmazható. Rejtvények, játékok, közlekedési és szállítási problémák, stratégiai feladatok

Részletesebben

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor Gráfok 1. Tárolási módok, bejárások előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Gráfok 1. Tárolási módok Szélességi

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA MATEmATIkA I 6 VI KOmPLEX SZÁmOk 1 A komplex SZÁmOk HALmAZA A komplex számok olyan halmazt alkotnak amelyekben elvégezhető az összeadás és a szorzás azaz két komplex szám összege és szorzata

Részletesebben

Programok értelmezése

Programok értelmezése Programok értelmezése Kód visszafejtés. Izsó Tamás 2016. szeptember 22. Izsó Tamás Programok értelmezése/ 1 Section 1 Programok értelmezése Izsó Tamás Programok értelmezése/ 2 programok szemantika értelmezése

Részletesebben

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

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 A változó fogalma Definíció Legyen A = A 1 A 2... A n állapottér. A pr Ai projekciós függvényeket változóknak nevezzük: : A A i pr Ai (a) = a i ( a = (a 1, a 2,..., a n ) A). A változók jelölése: v i =

Részletesebben

Osztott algoritmusok

Osztott algoritmusok Osztott algoritmusok A benzinkutas példa szimulációja Müller Csaba 2010. december 4. 1. Bevezetés Első lépésben talán kezdjük a probléma ismertetésével. Adott két n hosszúságú bináris sorozat (s 1, s 2

Részletesebben

É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)

É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) Kombi/2 Egy bizonyos bulin n lány és n fiú vesz részt. Minden fiú pontosan a darab lányt és minden lány pontosan b darab fiút kedvel. Milyen (a,b) számpárok esetén létezik biztosan olyan fiúlány pár, akik

Részletesebben

Megoldások 7. gyakorlat Síkgráfok, dualitás, gyenge izomorfia, Whitney-tételei

Megoldások 7. gyakorlat Síkgráfok, dualitás, gyenge izomorfia, Whitney-tételei Számítástudomány alapjai Megoldások 7. gyakorlat Síkgráfok, dualitás, gyenge izomorfia, Whitney-tételei 90. A konvex poliéder egyes lapjait határoló élek száma legyen k! Egy konvex poliéder egy tetszőleges

Részletesebben

Adatszerkezetek 2. Dr. Iványi Péter

Adatszerkezetek 2. Dr. Iványi Péter Adatszerkezetek 2. Dr. Iványi Péter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér (root) Nincsennek hurkok!!! 2 Bináris fák Azokat

Részletesebben

32. A Knuth-Morris-Pratt algoritmus

32. A Knuth-Morris-Pratt algoritmus 32. A Knuth-Morris-Pratt algoritmus A nyers erőt használó egyszerű mintaillesztés műveletigénye legrosszabb esetben m*n-es volt. A Knuth-Morris-Pratt algoritmus (KMP-vel rövidítjük) egyike azon mintaillesztő

Részletesebben

Programozás alapjai. 5. előadás

Programozás alapjai. 5. előadás 5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk

Részletesebben

Algoritmuselmélet 12. előadás

Algoritmuselmélet 12. előadás Algoritmuselmélet 12. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Április 9. ALGORITMUSELMÉLET 12. ELŐADÁS 1 Turing-gépek

Részletesebben

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1 Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1 Készítette: Gipsz Jakab Neptun-azonosító: ABC123 E-mail: gipszjakab@seholse.hu Kurzuskód: IT-13AAT1EG 1 A fenti

Részletesebben

1. Jelölje meg az összes igaz állítást a következők közül!

1. Jelölje meg az összes igaz állítást a következők közül! 1. Jelölje meg az összes igaz állítást a következők közül! a) A while ciklusban a feltétel teljesülése esetén végrehajtódik a ciklusmag. b) A do while ciklusban a ciklusmag után egy kilépési feltétel van.

Részletesebben

Programozási nyelvek II. JAVA

Programozási nyelvek II. JAVA Programozási nyelvek II. JAVA 8. gyakorlat 2017. november 6-10. Általános tudnivalók A feladatmegoldás során fontos betartani az elnevezésekre és típusokra vonatkozó megszorításokat, illetve a szövegek

Részletesebben

Csima Judit október 24.

Csima Judit október 24. Adatbáziskezelés Funkcionális függőségek Csima Judit BME, VIK, Számítástudományi és Információelméleti Tanszék 2018. október 24. Csima Judit Adatbáziskezelés Funkcionális függőségek 1 / 1 Relációs sémák

Részletesebben

NP-teljesség röviden

NP-teljesség röviden NP-teljesség röviden Bucsay Balázs earthquake[at]rycon[dot]hu http://rycon.hu 1 Turing gépek 1/3 Mi a turing gép? 1. Definíció. [Turing gép] Egy Turing-gép formálisan egy M = (K, Σ, δ, s) rendezett négyessel

Részletesebben