Bonyolultsági vizsgálatok egy szépirodalmi m kapcsán

Hasonló dokumentumok
Deníciók és tételek a beugró vizsgára

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.

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

Államvizsga kérdések a matematikus szakon, 2001.

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.

Számításelmélet. Will június 13. A kiszámíthatóság fogalma és a Church-Turing tézis

Számításelmélet. Második előadás

Algoritmuselmélet 12. előadás

NP-teljesség röviden

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

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

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

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

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

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

Turing-gép május 31. Turing-gép 1. 1

Az informatika elméleti alapjai 2 elővizsga december 19.

Algoritmusok bonyolultsága

Algoritmusok bonyolultsága

Lineáris algebra és a rang fogalma (el adásvázlat, szeptember 29.) Maróti Miklós

ALGORITMUSOK ÉS BONYOLULTSÁGELMÉLET Matematika MSc hallgatók számára

1. Bevezetés. A számítógéptudomány ezt a problémát a feladat elvégzéséhez szükséges erőforrások (idő, tár, program,... ) mennyiségével méri.

Diszkrét matematika II. gyakorlat

Lineáris algebra 2. Filip Ferdinánd december 7. siva.banki.hu/jegyzetek

7. gyakorlat. Lineáris algebrai egyenletrendszerek megoldhatósága

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

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

DiMat II Végtelen halmazok

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

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

Diszkrét matematika 1. középszint

Relációk. 1. Descartes-szorzat. 2. Relációk

3. el adás: Determinánsok

A digitális számítás elmélete

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

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

HALMAZELMÉLET feladatsor 1.

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.

Diszkrét matematika I.

LINEÁRIS ALGEBRA (A, B, C) tematika (BSc) I. éves nappali programtervező informatikus hallgatóknak évi tanév I. félév

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

Ítéletkalkulus. 1. Bevezet. 2. Ítéletkalkulus

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

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Turing-gépek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT augusztus 16.

ALGORITMUSOK ÉS BONYOLULTSÁGELMÉLET Matematika MSc hallgatók számára. 11. Előadás

A Számítástudomány alapjai

Turing-gépek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz VIII. Friedl Katalin BME SZIT március 18.

MATEMATIKA Emelt szint évfolyam

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

Permutációk véges halmazon (el adásvázlat, február 12.)

Polinomok (el adásvázlat, április 15.) Maróti Miklós

Predikátumkalkulus. 1. Bevezet. 2. Predikátumkalkulus, formalizálás. Predikátumkalkulus alapfogalmai, formalizálás, tagadás, logikailag igaz formulák.

Totális Unimodularitás és LP dualitás. Tapolcai János

Algoritmuselmélet 18. előadás

Modern irányzatok a bonyolultságelméletben: éles korlátok és dichotómia tételek

15. LINEÁRIS EGYENLETRENDSZEREK

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

Numerikus módszerek 1.

Shor kvantum-algoritmusa diszkrét logaritmusra

A matematika nyelvér l bevezetés

Tesztkérdések az ALGORITMUSELMÉLET tárgyból, 2001/ félév

Bonyolultságelmélet feladatok

Vektorterek. Wettl Ferenc február 17. Wettl Ferenc Vektorterek február / 27

Algoritmuselmélet 1. előadás

Ütemezési modellek. Az ütemezési problémák osztályozása

Diszkrét matematika 2.

Logika és számításelmélet

7. gyakorlat. Lineáris algebrai egyenletrendszerek megoldhatósága

1. A k-szerver probléma

MATEMATIKA évfolyam

2018, Diszkrét matematika

Gibbs-jelenség viselkedésének vizsgálata egyszer négyszögjel esetén

Bevezetés. 1. fejezet. Algebrai feladatok. Feladatok

1. feladatsor: Vektorterek, lineáris kombináció, mátrixok, determináns (megoldás)

A KroneckerCapelli-tételb l következik, hogy egy Bx = 0 homogén lineáris egyenletrendszernek

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

Diszkrét matematika I., 12. előadás Dr. Takách Géza NyME FMK Informatikai Intézet takach november 30.

MATEMATIKA TANTERV Bevezetés Összesen: 432 óra Célok és feladatok

MBNK12: Permutációk (el adásvázlat, április 11.) Maróti Miklós

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

Függvények határértéke, folytonossága

Gráfok színezése Diszkrét matematika 2009/10 sz, 9. el adás

Bevezetés a bonyolultságelméletbe gyakorlatok I. A(0, y) := y + 1 y 0 A(x, 0) := A(x 1, 1) x 1 A(x, y) := A(x 1, A(x, y 1)) x, y 1

Kriptográfia 0. A biztonság alapja. Számítás-komplexitási kérdések

Skalárszorzat, norma, szög, távolság. Dr. Takách Géza NyME FMK Informatikai Intézet takach/ 2005.

24. szakkör (Csoportelméleti alapfogalmak 3.)

Relációk. 1. Descartes-szorzat

Lineáris egyenletrendszerek

f(x) vagy f(x) a (x x 0 )-t használjuk. lim melyekre Mivel itt ɛ > 0 tetszőlegesen kicsi, így a a = 0, a = a, ami ellentmondás, bizonyítva

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

KOVÁCS BÉLA, MATEMATIKA I.

Ellátási lánc optimalizálás P-gráf módszertan alkalmazásával mennyiségi és min ségi paraméterek gyelembevételével

Diszkrét matematika 2.C szakirány

: s s t 2 s t. m m m. e f e f. a a ab a b c. a c b ac. 5. Végezzük el a kijelölt m veleteket a változók lehetséges értékei mellett!

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

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

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

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

Átírás:

Molnár Gábor Bonyolultsági vizsgálatok egy szépirodalmi m kapcsán Bsc Szakdolgozat Témavezet : Korándi József Adjunktus Matematikatanítási és Módszertani Központ Eötvös Loránd Tudományegyetem Matematikatanítási és Módszertani Központ Budapest 2016

Tartalomjegyzék 1 Bonyolultságelméleti alapok 4 1.1 Turing............................... 4 1.2 Eldönthet ség........................... 6 1.3 Algoritmus és pszeudokód.................... 7 2 Algoritmus bonyolultsága 8 2.1 Polinomiális id.......................... 8 2.2 Más bonyolultsági osztályok................... 16 3 NP Bevezetése 18 3.1 NP-teljes.............................. 19 3.2 NP-teljes feladatok........................ 20 4 Összefoglaló 27 5 Irodalomjegyzék 29 1

Köszönetnyilvánítás Mindenek el tt szeretném megköszönni a sok kapott segítséget témavezet mnek, Korándi József tanár úrnak. Valamint szüleimnek és barátaimnak, akik végig támogattak és kijavították a helyesírási hibáimat. 2

El szó A matematika a való életben sok helyen el fordul, még a médiában is. Szakdolgozatom kiindulási pontja is egy ilyen el fordulás. A média, amely a latin eredet médium (közvetít ) szó többes száma, a kommunikációban az információ rögzítésére és közvetítésére használt eszközt vagy eszközöket jelenti. A médiába számos eszköz beletartozik, ezek közül a legismertebbek talán a televízió, az újságok és a rádió. De médium egy reklámplakát vagy a megállókban található villamos indulásának idejét mutató kijelz is, hiszen ezek is közvetetten nyújtják az információt. De médiumnak min sül akár egy szépirodalmi m is, amikor információkat közöl az olvasóval. Számomra is kicsit meglep élmény volt, amikor Higasino Keigo: X a gyilkos ismeretlen cím regényben matematikai tartalmakkal, utalásokkal találkoztam, és ez adta dolgozatom alapötletét, témáját. A regényben, mint azt azért a címéb l is sejteni lehet, viszonylag nagymértékben fordulnak el matematikai fogalmak, ismert tételek és problémák. Ilyenek például a négyszín-tétel és a Riemann-sejtés, de neves matematikusok is felbukkannak a könyvben, mint például Erd s Pál. Az amerikai Clay Matematikai Intézet 2000-ben díjat alapított a Millenniumi Problémák megoldására. Ezzel a névvel azt a hét komoly matematikai problémát illetik, melyek megoldására az említett intézet egyenként 1 millió dolláros díjat t zött ki. A hét probléma közül hat még mindig megoldatlan, köztük a korábban már említett Riemann-sejtés, és a P = NP probléma is. Ez utóbbi szintén el fordul Higasino Keigo könyvében, és dolgozatom témája is e problémakör alapjai, nevezetesen a bonyolultság-elméleté. A regényben a bonyolultság-elmélet lozóai vonatkozásain van a hangsúly, de ebben a dolgozatban természetesen els sorban a téma matematikájáról lesz szó. Ennek érdekében a leginkább Lovász László Algoritmusok bonyolultsága cím könyvének a felépítését követtem. A könyvben a matematikai tartalmakon és a lozóai vonatkozásokon túl szóba kerülnek matematikatanítási eszközök is, ami miatt a leend matematikatanároknak is ajánlani tudom a regényt, de a matematika didaktikája szintén kívül esik e dolgozat témakörein. 3

1. Bonyolultságelméleti alapok Miel tt foglalkoznánk az algoritmusok vizsgálatával, tisztázzuk annak fogalmát, s a velejáró deníciókat. A Σ-val jelölt, nemüres véges halmazt ábécének nevezünk. A halmaz elemeib l felépített véges sorozatot Σ feletti szónak hívjuk, beleértve az üres szó is, melyet ɛ jelöl. A szó hossza a bet k számával egyezik meg, melyet az x jelöl. Az üres szó hossza nulla, vagyis az ɛ = 0. A k hosszú szavakat Σ k halmazzal jelöljük, az összes szót Σ -gal. Ennek egy tetsz leges részhalmazát L nyelvnek nevezzük. Továbbiakban legyen Σ 0 az a véges ábécé mely nem tartalmazza az üres szót, tehát Σ 0 = Σ ɛ. 1. Deníció. Legyen f és g a természetes számokon értelmezett és valós érték függvények. Azt mondjuk, hogy f = O(g), ha létezik pozitív valós c konstans és n 0 pozitív egész küszöb, hogy minden n > n 0 esetén f(n) cg(n). 2. Deníció. Legyen f és g a természetes számokon értelmezett és valós érték függvények. Azt mondjuk, hogy f = o(g), ha g(n) csak véges sok helyen veszi fel a nullát, és f(n)/g(n) 0 ha n. 1.1. Turing Az algoritmusnak nincs pontos deniálása, mert nem létezik jól megfogalmazható, mindenki számára elfogadott deníció. Ezért szokás a matematikai gép fogalmát bevezetni. A legismertebb ilyen gép a Turing gép, amit f leg elméleti vizsgálatokra használnak. Ez a következ képpen néz ki: van egy vezérl egység, melynek véges sok állapota van. Ki van tüntetve egy START és egy STOP állapot, ahol az utóbbinak két fajtája is van, az ELF (elfogadó) és az ELUT (elutasító). Ezen kívül van k 1 szalagja, amelynek minden mez jébe az ábécé egy tagja van. Eleinte a bemenet és az úgynevezett üresjelek állnak. Továbbá vannak a szalagok mez jét leolvasó és felülíró, író-olvasó fejek, melyek a m velet után esetleg egyet jobbra vagy balra lépnek. Nyilvánvalóan a vezérl egység kezdéskor mindig a START állapotban van. A fejek a szalagok kezd mezején állnak, amelyek minden lépésben leolvassák a szalagjának mezején található jelet. Ezt követ en három dolog lehetséges: átkerül egy új állapotba felülírja annak a mez nek a jelét, ahol épp tartozkodik 4

megtesz egy lépést jobbra vagy balra, avagy nem mozdul Ahogy a STOP állapotba kerül a vezérl egység, a gép leáll. 3. Deníció. Azt mondjuk, hogy egy T Turing-gép eldönti az L nyelvet, ha minden x Σ bemenetre véges sok lépés után leáll, de csak akkor áll meg ELF állapotban, ha x L. Egy nyelv algoritmikusan meghatározható, ha létezik Turing-gép, ami t meghatározza. 1. Példa. Az, hogy egy Diofantoszi egyenletnek létezik-e csak egész számokból álló megoldása, egy algoritmikusan eldönthetetlen feladat, mely be is van bizonyítva. Vagyis nem lehet olyan programot írni, amely minden bemenetre véges lépés után leáll és helyesen dönt arról, hogy van-e egész megoldása. 4. Deníció. Legyen T egy k + 1 és S egy k szalagos Turing-gép, ahol is k 1 és p Σ 0. Azt mondjuk, hogy T a p programmal szimulálja S-et, ha minden x 1,..., x k szavakra T az (x 1,..., x k, p) inputon pontosan akkor áll meg véges számú lépésben, ha S az (x 1,..., x k ) inputon megáll, és ekkor T els k szalagján ugyanaz áll, mint S szalagjain. 5. Deníció. Azt mondjuk, hogy a (k + 1)-szalagos T Turing-gép univerzális a k-szalagos Turing-gépekre nézve, ha tetsz leges k-szalagos Σ feletti S Turing-géphez van olyan p Σ 0 program, amellyel T szimulálja S-et. 1. Tétel. k 1-hez és Σ ábécéhez (k + 1)-szalagos univerzális Turinggép. 2. Tétel. Minden k-szalagos S Turing-géphez létezik egyszalagos T Turinggép, mely S-et helyettesíti a következ képpen: minden üres mez t nem tartalmazó x szóra, T pontosan akkor áll le véges sok lépés után az x bemeneten, ha S leáll és ekkor T szalagján ugyanaz van írva, mint S utolsó szalagján. Valamint, ha S lépésszáma N, akkor T lépéseinek száma legfeljebb O(N 2 ). 1. Megjegyzés. A média szempontból is érdekes Turing neve. Morten Tyldum, norvég rendez, 2014-ben megjelent lmje a Kódjátszma Alan Turing életének egy részével és az Enigma nev német titkosító gépek jeleinek megfejtése. Sajnos matematikai szempontból, nem túl tartalmas. F ként az élete van az el térben. 2. Megjegyzés. Talán a legegyszer bb gép a véges automata, viszont bonyolultságelmélet céljából nem alkalmas, mert csak nagyon szimpla függvények kiszámítására alkalmazható. 5

1.2. Eldönthet ség Az eldönthet ség kérdésének egy fajtája az, amikor egy problémasereghez keresünk olyan algoritmust, mely ezek mindegyikét eldönti. Ez a kés bbiekben fontos eszközünk lesz az algoritmusok bonyolultságának vizsgálatában. Most ki is térünk rá. 6. Deníció. Egy f : Σ 0 Σ 0 függvényt kiszámíthatónak nevezünk, ha létezik k 1 számú szalaggal rendelkez T Turing-gép, mely minden x Σ 0 inputtal, véges id után megáll és az utolsó szalagján az f(x) szó áll. 7. Deníció. Az L Σ 0 nyelvet eldönthet nek nevezzük, ha karakterisztikus függvénye 1, ha x L, f(x) = 0, ha x Σ 0 L kiszámítható. Azt mondjuk, hogy T Turing-gép eldönti az L nyelvet, ha az kiszámítja az f függvényt. 8. Deníció. Az L nyelvet felsorolhatónak nevezzük, ha L = ɛ vagy létezik kiszámítható g : Σ 0 Σ 0 függvény, melynek értékkészlete L. 1. Lemma. Bármely eldönthet nyelv egyben felsorolható is. Bizonyítás: Legyen L eldönthet nyelv. Triviális eset, ha L = ɛ, hiszen ekkor a denícióból következik, hogy felsorolható. Tehát feltesszük, hogy L nem üres. Legyen a L, és tekintsük a következ függvényt: x, ha x L, g(x) = a, ha x / L. Ebb l látszik, hogy kiszámítható és értékkészlete L. 3. Tétel. Egy L nyelv akkor és csak akkor eldönthet, ha maga az L nyelv és a komplementere is felsorolható. A következ tételben kimondjuk, hogy van felsorolható, de nem eldönthet nyelv. Ennek érdekében, legyen T egy k-szalagos Turing-gép, és L T olyan x Σ 0 szavakból áll, melyekre igaz, hogy T minden szalagjára x-et írva, a gép véges sok lépés után leáll. 4. Tétel. Ha T egy univerzális Turing-gép, akkor L T felsorolható nyelv nem eldönthet. 6

1.3. Algoritmus és pszeudokód A fontos kitekintések után rátérünk az algoritmusokra. Az egyszer bb kezelés érdekében, egy általánosabb deníciót veszünk, mégpedig egy precízen megírt eljárást, amely egy felmerült probléma fajtájának egy adott feladatát gépiesen és hibátlanul oldja meg. Minden inputra kiszámít egy outputot. A gép a számításhoz többféle er forrást igényel, ezek közül a legjellemz bbek az id és a tár. Ezek felhasználása a számítás bonyolultságát méri. Amikor egy adott problémához algoritmust tervezünk, az els lépés egy megfelel modell alkotása. Ezek után a megtervezett algoritmust persze szeretnénk majd a bemeneteinkre futtatni. Erre a célra egy számítógépprogramot készítünk, aminek a vázát szövegesen adjuk meg. Ez az úgynevezett pszeudokódos megadás, ami az algoritmusok leírásának elfogadott tömör leíró nyelve. A pszeudokód közelebb áll a számítógépes megvalósításhoz, s független a programozási nyelvekt l. Így ez alapján, gyakorlatilag bármilyen programozási nyelvbe átírható, amib l rengeteg van, de maga az algoritmus lényege nem változik. Számunkra a legmegfelel bb algoritmus, amely a legrosszabb esetet a legkisebb futási id alatt oldja meg. A futási id egy bizonyos inputra a végrehajtott alapm veletek vagy lépések számát jelenti. Célszer úgy megadni a lépéseket, hogy azok minél inkább gépfüggetlenek legyenek. Az egyszer ség kedvéért tekintsük úgy, hogy a pszeudokód egyes sorainak egyszeri végrehajtásához állandó mennyiség id szükséges. Lehetséges, hogy egy sor több id be telik, mint egy másik, de feltesszük, hogy az i-edik sor mindig c i ideig tart, ahol c i állandó. Tehát a futási id meghatározásához els sorban az egyes utasítások végrehajtásának számát vizsgáljuk meg, majd ezeket tömörítjük és egyszer sítjük, hogy kezelhet bb alakot kapjunk. 9. Deníció. A algoritmus lépésszáma t A (n) := max(x bemeneten hány lépést tesz meg), ahol t : N N függvény. Általában x 0, 1 n és x = n. 7

2. Algoritmus bonyolultsága Mint azt már említettük, egy algoritmus bonyolultságát az er forrás igényei határozzák meg, s ezek közül is az id és a tár a kiemelked k. Ezért most feltesszük a Turing-gépekr l, hogy van egy bemenet-szalaguk, amir l csak olvasni tudnak, és egy kimenet-szalaguk, amire csak írni tudnak. Továbbá azt is feltesszük, hogy legalább egy munkaszalagjuk van. Kezdéskor csak a bemenet-szalagra van írva egy Σ feletti szó. A time T (n) függvény a T Turing-gép id igénye, ami a gép lépésszámának maximumát adja meg az n hosszúságú bemenet alapján, ahol time T (n) n. A space T (n) a gép munkaszalágjain azon különböz mez k maximális számát veszi n hosszú bemenetek esetén, melyekre ír. Ez a tárigény-függvény. 10. Deníció. Azt mondjuk, hogy L Σ 0 nyelv id bonyolultsága t(n), ha van olyan T Turing-gép, hogy time T (n) t(n). Ezeket a nyelvosztályokat DT IME(t(n))-nel jelöljük, ahol a D bet a determinisztikus algoritmusokra utal. A polinomiális Turing-géppel eldönthet nyelvek csoportját PTIME-mal vagy csak P-vel jelöljük. 11. Deníció. Azt mondjuk, hogy L Σ 0 nyelv tárbonyolultsága t(n), ha van olyan T Turing-gép, hogy space T (n) t(n). Ezeket a nyelvosztályokat DSP ACE(t(n))-nel jelöljük. A polinomiális tárú Turing-géppel eldönthet nyelvek csoportját PSPACE-szel vagy csak P-vel jelöljük. 2.1. Polinomiális id A legtöbb fontos algoritmus polinomiális idej, néhány speciális esetre ki is térünk, hogy segítse a megértést. Az els ilyen a polinomiális kombinatorikai algoritmusok. Nagyrészt gráfalgoritmusok tartoznak ide, mint a legrövidebb út keresése vagy az Edmonds-Karp algoritmus, amely egy olyan Ford-Fulkerson eljárás, ahol felhasználjuk a legrövidebb utat a maximális folyam megkeresésére. 8

2. Példa. Az alábbi irányított és súlyozott gráfnak keressük a maximális folyam értékét, ahol 0 a forrás és 7 pedig a nyel. Algoritmus: A következ pszeudókódok a Breadth First Search, röviden bfs, és az Edmonds-Karp algortimus, ami felhasználja a bfs-t. A bemenetek rendszerint a G gráf C kapacitás mátrixa és E szomszédos csúcsok listája. Ezen kívül kett kiemelt csúcs, s a forrás és t a nyel. Végül F a maximális folyamot tároló mátrix. Az Edmonds-Karp algoritmus kimenete meg a maximális folyam értéke. (A pszeudokódok az irodalomjegyzékben található források alapján készültek, ami alapján le lettek programozva.) procedure bfs(c, E, s, t, F ) for i = 1... n do szul(i) = 1 end for for i = 1... n do cpc(i) = 0 end for sor s szul(s) = 2 cpc(s) = while sor do cur := u sor u sor for v E(cur) do if C[cur, v] F [cur, v] > 0 & szul = 1 then 9

szul[v] := cur cpc[v] := min(cpc[cur], C[cur, v] F [cur, v]) if v t then sor v else return cpc, szul end if end if end for end while end procedure procedure EdmondsKarp(C, E, s, t, F ) maxfoly := 0 while True do foly = bfs(s, t) if foly = 0 then Stop end if maxfoly := maxfoly + foly cur := t while cur s do prev := szul[cur] F [prev][cur] := F [prev][cur] + foly F [cur][prev] := F [cur][prev] foly cure := prev end while end while return maxf oly end procedure A pszeudokódok alapján létrehoztam az alábbi C++ programot: #include <iostream> #include <conio. h> #include <queue> #include <c s t r i n g > #include <vector > using namespace std ; 10

i n t C [ 1 0 ] [ 1 0 ] ; i n t F [ 1 0 ] [ 1 0 ] ; vector <int > v [ 1 0 ] ; i n t s z u l [ 1 0 ] ; i n t cpc [ 1 0 ] ; i n t b f s ( i n t ss, i n t t t ) memset ( szul, 1, s i z e o f ( s z u l ) ) ; memset ( cpc, 0, s i z e o f ( cpc ) ) ; queue<int > q ; q. push ( s s ) ; s z u l [ s s ] = 2; cpc [ s s ] = 999; while (! q. empty ( ) ) i n t cur = q. f r o n t ( ) ; q. pop ( ) ; f o r ( i n t i =0; i<v [ cur ]. s i z e ( ) ; i++) i n t to = v [ cur ] [ i ] ; i f ( s z u l [ to ] == 1) i f (C[ cur ] [ to ] F [ cur ] [ to ] > 0) s z u l [ to ] = cur ; cpc [ to ] = min ( cpc [ cur ],C[ cur ] [ to ] F [ cur ] [ to ] ) ; i f ( to == t t ) return cpc [ t t ] ; q. push ( to ) ; 11

return 0 ; i n t edmondskarp ( i n t ss, i n t t t ) i n t maxfoly = 0 ; while ( true ) i n t f o l y = b f s ( ss, t t ) ; i f ( f o l y == 0) break ; maxfoly = maxfoly + f o l y ; i n t cur = t t ; while ( cur!= s s ) i n t prev = s z u l [ cur ] ; F [ prev ] [ cur ] = F [ prev ] [ cur ] + f o l y ; F [ cur ] [ prev ] = F [ cur ] [ prev ] f o l y ; cur = prev ; return maxfoly ; i n t main ( ) i n t cs, e l ; cout<<"adja meg a csucsok es e l e k szamat!"<< endl ; c i n >> cs ; c i n >> e l ; i n t s, t ; cout << "Adja meg a f o r r a s t es a n y e l o t! " << endl ; c i n >> s ; c i n >> t ; 12

f o r ( i n t i = 0 ; i < e l ; i++) cout << "Adja meg a kiindulo, az erkezo c s u c s o t " ; cout << " es az e l k a p a c i t a s a t! " << endl ; i n t from, to, cap ; c i n >> from ; c i n >> to ; c i n >> cap ; C[ from ] [ to ] = cap ; v [ from ]. push_back ( to ) ; v [ to ]. push_back ( from ) ; i n t maxfoly = edmondskarp ( s, t ) ; cout << endl << endl <<"Maximalis folyam : " << maxfoly << endl ; getch ( ) ; Kimenet: 7 Míg a Ford-Fulkerson algoritmus nem polinomális idej is lehet, addig ennek az algoritmusnak a futási ideje a következ képpen tev dik össze. Ha a segédgráfban mindig a legrövidebb s-b l t-be vezet utat keressük, akkor legfeljebb n e iteráció elég, ahol n a csúcsok és e az élek száma. Ekkor az összes lépésszám O(n e 2 ). Tehát az algoritmus polinomiális idej, amit az Edmonds-Karp tétel ki is mond. A következ speciális eset a polinomiális aritmetikai algoritmusok. Az alap matematikai m veletek mind ide tartoznak: az egész számok összeadása, kivonása, szorzása és maradékos osztása. Ezek algoritmusa általános iskolai szint, ezért nem részletezzük. Egy algoritmust viszont kiemelnénk, méghozzá az euklideszi algoritmust, mely két természetes szám legnagyobb közös osztóját keresi meg. Algoritmus: Adott az a és b természetes számok, ami a bemenetünk lesz. Ha a = 0, akkor az algoritmus a b-t adja vissza. Különben meg b-t elosztjuk maradékosan a-val és ez a maradék lesz az r. 13

procedure lnko(a,b) while b > 0 do r := b b := a mod b a := r end while return a end procedure Kimenet: A legnagyobb közös osztó. 2. Lemma. Az euklideszi algoritmus polinomiális idej, O(log a + log b) lépésszámmal, ahol max(a, b)-nél nem nagyobb természetes számokra szorítkozunk. Bizonyítás: 0 r < b-b l következik, hogy el bb vagy utóbb leáll az algoritmus. Az kell tehát, hogy polinomiális id ben érjen véget. Ehhez vegyük észre, hogy b a + r > 2r r < b/2 ar < ab/2. Tehát log(ab) iteráció után ab < 1, s mivel a és b N akkor a vagy b = 0. Vagyis le fog állni az algoritmus, s egyértelm, hogy az iterációk polinomálisan elvégezhet ek. Az utolsó speciális eset, amit megemlítünk, a polinomiális lineáris algebrai algoritmusok. Ilyenek a vektorok összeadása, skaláris szorzata és néhány mátrix m velet, mint a szorzás, invertálás és a determinánsok kiszámítása. Az utóbbi kett t részletezzük. Legyen A = (a ij ) tetsz leges n n-es egész számokból álló mátrix és a det(a) polinomiális id ben kiszámítható, vagyis felírható polinomális sok számjeggyel. Algoritmus: A következ pszeudokód csak magát a Gauss-eleminációt írja le, ami egy adott A mátrixot fels háromszögmátrixszá alakít. Annak könny kiszámítani a determinánsát. Bemenet és kimenet az A mátrix. procedure Gauss(A) for k = 1... n 1 do for i = k + 1... n do s := a ik a kk for j = k... n do a ij := a ij s a kj end for 14

end for end for return A end procedure Kimenet: A fels háromszögmátrix. A Gauss-elimináció egy iterációja O(n 2 ) m velettel jár és n iterációt tesz meg, tehát O(n 3 ) aritmetikai m velet adódik. A gond ott van, hogy osztás is szükséges, méghozzá nem maradékosan, így a leprogamozása is nehézségekkel jár. Véges test felett nem okoz gondot, de a racionális test esetén igen. Az igaz, hogy az eredeti mátrixunk elemei egészek, de az algoritmus menetközben racionális számokat hozhat létre. Ezeket egész számokból álló számpárokként tároljuk. Ahhoz, hogy ez megoldható legyen, meg kell adnunk egy eljárást, amely a törteket részben egyszer sített alakban tárolja. Ez azért szükséges, hogy elkerüljük a jegyek számának túlzott növekedését, ami már nem polinomiális is lehet, de mégis egyszer sítsünk. Hiszen minden osztásnál nem egyszer síthetünk, mivel ahhoz egy euklideszi algoritmus kellene futatni, ami polinomiális, de igen sok többletmunka. Tekintsük ehhez a Gauss-elemináció által el álló mátrixot. Feltehetjük, hogy a kiszemelt elemek (1, 1),..., (n, n) pozícióban helyezkednek el, tehát nem kell sorokat vagy oszlopokat permutálni. Jelölje (a (k) jj ) a k iteráció után létrejött mátrixot, ahol 1 i,j n. A kapott mátrix f átlójában lév elemek legyenek d 1,..., d n. Az A mátrix els k sora és oszlopa által meghatározott részmátrixot jelöljük D (k) -val, és az els k és az i-edik sor, illetve az els k és j-edik oszlop által meghatározott részmátrixot meg jelöljük D (k) ij -vel. Nyilvánvalóan D (k) = D (k 1) kk. 3. Lemma. a (k) ij = det(d(k) ij ) det(d (k) ). Tehát a Lemma alapján kiderül, hogy a Gauss-eliminációban el forduló törtek nevez je és számlálója az eredeti A mátrix egy-egy részmátrixának a determinánsa. Így biztosan elegend polinomiálisan sok jegy a törtek leírásához. 15

2.2. Más bonyolultsági osztályok Algoritmusok persze nem csak polinomiális idej osztályba sorolhatók. A kötverkez részben röviden kitérünk más osztályokra is. El is kezdjük az exponenciális idej algortimusokkal. Ilyen id igény algoritmusokat leggyakrabban akkor kapunk, amikor az összes esetet vizsgáljuk. Ez azt jelenti, hogy az id igénye 2 na és 2 nb közé esik, ahol a és b > 0 konstansok. 3. Példa. Nézzük meg, hogy egy G gráf csúcsai kiszínezhet k-e három színnel úgy, hogy a szomszédos csúcsok színei ne egyezzenek meg. Ekkor a triviális megoldás az, hogy sorra vesszük az összes színezést. Tehát 3 n eset, ahol n a G gráf csúcsainak a száma. Minden egyes eset vizsgálata viszont O(n 2 ) id t igényel. Sajnos erre a feladatra nem igazán létezik jobb algoritmus, s t nem is várható. Mint azt mutatni is fogjuk, a gráfszínezés az exponenciális idej problémák egy eléggé speciális részébe esik. Következ osztályunk a lineáris idej ek. Az alapvet aritmetikai algoritmusok nagy része idetartozik, mint például két szám összeadása vagy összehasonlítása. F leg nagyméret bemeneteknél, amelyekkel viszonylag egyszer feladatokat végzünk, fontosak a lineáris idej algoritmusok. Így például a legtöbb adatkezelési ejárás is idetartozik. De a mélységi keresési gráfalgoritmus is ilyen, amivel több nemtriviális gráfelméleti probléma is megoldható lineáris id ben. 12. Deníció. O(n (log n) c ) id igény lineáris algoritmusokat, ahol c konstans, kvázilineárisnak nevezzük. Talán a legfontosabb kvázilineáris id ben megoldható feladat a sorbarendezés, amire több O(n log n) idej algoritmus is van. De b ven akad ilyen a geometriai algoritmusok és a képfeldolgozás területén, mint például egy n elem síkbeli ponthalmaznak a konvex burkát is csak O(n log n) lépésben tudjuk meghatározni. Ha léteznek lineáris idej algoritmusok, akkor léteznek lineáris tárú algoritmusok is. Tárigény szempontjából alapvet osztálynak tekinthet. Idetartoznak azok a gráfalgoritmusok, amelyek leírhatók a csúcsokhoz és az élekhez tartozó címkék változtatásával. A legrövidebb út, a magyar módszer, az összefügg ség vagy éppen az optimális folyam keresése mind ilyen algoritmus. Az adatbányászat területén szinte kizárólag ilyen fajta algoritmusokat használnak. 16

Az utolsó két osztály, amivel foglalkozunk a polinomiális tár, PSPACE, és a logaritmikus tár, LOGSPACE. Nyilván minden polinomiális idej algoritmus egyben polinomiális tárigény is, viszont sokkal általánosabb a polinomiális tár. Az említett gráfszínezési algoritmus tárigénye csak polinomiális, s t lineáris, ha a színezéseket lexikograkus sorrendben nézzük. A logaritmikus tár szintén nagyon fontos és sokat vizsgált osztály. Egyrészt függvények kiszámításánál, másrészt eldöntési problémáknál. 3. Megjegyzés. Edward Reingold mutatta meg 2004-ben, hogy a következ probléma logaritmikus tárigény. A bemenet egy G irányítatlan gráf, és ennek két csúcsa s és t. Kérdés, hogy létezik-e s-b l t-be vezet út vagyis, hogy egy komponensben vannak-e. 17

3. NP Bevezetése A determinisztikus Turing-gépek részletezése után, rátérünk a nemdeterminisztikusra. Egyetlen különbség van a kett között, méghozzá az, hogy a nemdeterminisztikusak minden helyzetben a vezérl egység állapota és a leolvasott jelek több lehetséges lépést is megengedhetnek. Pontosabban, ugyanazzal a bemenettel egy nemdeterminisztikus Turing-gépnek sok különböz legális számolása lehet. 13. Deníció. A T nemdeterminisztikus Turing-gép t id ben elfogadja az x Σ 0 szót, ha az els szalagra x-et, a többire az üres szót írja, akkor ezzel a bemenettel van legális számolása, amely legfeljebb t lépést tesz meg és az els szalag 0 pozícióban az 1 jel szerepel. Hasonlóan deniáljuk az L nyelv s tár felhasználásának elfogadását. 14. Deníció. Azt mondjuk, hogy a T nemdeterminisztikus Turing-gép felismeri az L Σ 0 nyelvet, ha L csak olyan szavakból áll, amiket T elfogad véges id ben. Ha minden x L szót f( x ) id ben elfogad, ahol f : Z + Z +, akkor L-et f(n) id ben felismeri. Ezeknek a nyelveknek az osztályát N T IM E(f(n))-nel jelöljük. 4. Megjegyzés. Hasonlóan deniáljuk az f(n) tárral felismerhet nyelveket, és N SP ACE(f(n))-nel jelöljük ket. 5. Tétel. A nemdeterminisztikus Turing-géppel felismerhet nyelvek csak a felsorolható nyelvek. 15. Deníció. Azt mondjuk, hogy L-nek tanúja az L 0 nyelv, ha x L akkor és csak akkor, ha y Σ 0 szó, hogy x&y L 0, ahol az & egy olyan új jelként funkciónál ami elválasztja x és y szavakat. 6. Tétel. Legyen f jól számolható függvény és g(n) n. Ekkor minden L NT IME(f(n)) nyelvnek O(f(n)) hosszúságú lineáris tanúja van, és ha van f(n) hosszúságú, g(n) idej tanúja, akkor L NT IME(g(n+1+f(n))). Az el z tételb l következik, hogy bármilyen L Σ 0 nyelvre igaz a következ : Polinomiális id ben felismerhet L nyelv nemdeterminisztikus Turinggépen. Ez ekvivalens azzal, hogy L-nek létezik polinomiális hosszúságú és idej tanúja. Az ilyen tulajdonságú nyelvek osztályát jelöljük NP-vel. Ez az osztály fontos algoritmikus problémák nagy hányadát tartalmazza, aminek egy részével itt most foglalkozni fogunk. 18

5. Megjegyzés. Minden determinisztikus Turing-gép egyben nemdeterminisztikus is, nyilván igaz rá, hogy DT IME(f(n)) NT IME(f(n)). A következ példákban feltesszük, hogy a gráfok mind egyszer gráfok, tehát nincs bennük többszörös és hurokél. Egy gráf összefügg sége: Tanúja a feszít fa, és P-beli feladat. Egy gráf síkbarajzolhatósága: Triviális tanú egy konkrét lerajzolás. Ez szintén P-beli és Walter Schnyder adott meg erre egy egyszer lineáris idej algoritmust 1990-ben, Hopcroft és Tarjan polinomiális algoritmusa alapján. Hamilton-kör létezése: Tanúja egy Hamilton-kör megadása. Erre a feladatra már nem ismert polinomiális algoritmus, tehát NP-beli. 3.1. NP-teljes Miután megismerkedtünk az NP fogalmával is, mélyebbre megyünk és megismerkedünk az NP-teljes fogalmával. Ehhez viszont szükségünk van újabb fogalmak deniálására. 16. Deníció. Azt mondjuk, hogy az L 1 Σ 1 nyelv polinomiálisan visszavezethet az L 2 Σ 2 nyelvre, ha f : Σ 1 Σ 2 polinomiális idej függvény, hogy x Σ 1 szóra x L 1 f(x) L 2. 6. Megjegyzés. A denícióból látszik, hogy teljesül a tranzitivitás, tehát ha L 1 visszavezethet L 2 -re és L 2 visszavezethet L 3 -ra, akkor L 1 visszavezethet L 3 -ra. 7. Tétel. Egy P-beli nyelvre minden nyelv ami polinomiálisan visszavezethet rá szintén P-beli. Egy NP-beli nyelvre minden nyelv ami polinomiálisan visszavezethet rá szintén NP-beli. Ezek alapján megfogalmazhatjuk az NP-teljességet. Tehát egy olyan NP-beli L nyelvet nevezünk NP-teljesnek, amire minden NP-beli nyelv polinomiálisan visszavezethet. Ez az osztály a legbonyolultabb NP-beli nyelv. Ha egyetlen NP-teljes nyelvr l be tudnánk bizonyítani, hogy P-ben van, akkor abból máris következne, hogy P = NP. 19

8. Tétel. Ha egy NP-teljes L 1 nyelv polinomiálisan visszavezethet egy L 2 NP-beli nyelvre, abból következik, hogy L 2 is NP-teljes. Nem magától értet d, hogy létezik NP-teljes nyelv. De egy NP-teljes nyelv megadásával, az el z tétel alapján polinomiális visszavezetéssel sok más problémáról is bebizonyítható, hogy NP-teljes. Egy ilyen NP-teljes nyelv a SAT, ami a kielégíthet konjunktív normálformák által alkotott nyelv, amit Cook és Levin 1971-ben bizonyítottak be és ezzel együtt ki is mondták tételként. A SAT nyelv alapján már több NP-teljes nyelvet létrehozhatunk. Ezeknek a kifejtése következik. 3.2. NP-teljes feladatok A továbbiakban olyan problémákkal foglalkozunk, amikr l megmutatjuk, hogy NP-teljesek, és nagyrészük kombinatorikai vagy algebrai feladatok. Mivel egy NP-teljes L nyelv csak akkor lehet P-ben, ha P = NP, de tudjuk, hogy ez jelenleg nem bizonyított. Ezért egy nyelv NP-teljességét úgy értelmezhetjük, hogy az nem dönthet el polinomiális id ben. Ezek bizonyítására viszont szükségünk lesz néhány fogalom deniálására. 17. Deníció. Egy f : 0, 1 n 0, 1 leképezést Boole-függvénynek nevezünk, ahol az 1-est tekintjük az IGAZ, és a 0-át a HAMIS logikai értéknek. A függvény váltózóit logikai változónak vagy Boole-változóknak nevezzük. 18. Deníció. A konjunkció (logikai és: ), a diszunkció (logikai vagy: ) és a negáció (logikai tagadás: ) m veleteivel felírt Boole-függvényt nevezzük Boole-polinomnak és B-vel jelöljük. 19. Deníció. Egy olyan Boole-polinomot, amely csak m veletet tartalmaz elemi konjunkciónak nevezünk és diszjunktív normálformának nevezünk azt, mely csak m velettel összekötött elemi konjunkciókból áll. 20. Deníció. Diszjunktív k-normálforma alatt olyan diszjunktív normálformát értünk, melyben minden elemi konjunkcióban legfeljebb k változó van. 7. Megjegyzés. A m veletek felcserélésével deniáljuk az elemi diszjunkciót és a konjunktív normálformát. 21. Deníció. Kielégíthet nek nevezünk egy olyan Boole-polinomot, amely által deniált Boole-függvény nem azonosan 0. 20

Az el z deníciók segítségével bevezetjük a ksat-ot, ami a kielégíthet konjunktív k-normálformák által alkotott nyelv. Továbbá legyen a SAT-k az a nyelv, mely olyan kielégíthet konjunktív normálformákból áll, amiben minden változó legfeljebb k elemi diszjunkcióban fordul el. Ennek kapcsán kimondunk néhány tételt, ami segíti a kés bbi bizonyításainkat. 9. Tétel. A 3SAT NP-teljes nyelv. Viszont a 2SAT nyelv már P-ben van. 10. Tétel. A SAT-3 NP-teljes nyelv. Viszont a SAT-2 nyelv már P-ben van. 8. Megjegyzés. Természetesen a nehezebb problémák, mint 4SAT, 5SAT, SAT-4, SAT-5 stb. mind szintén NP-teljesek. Az új fogalmak tisztázása után tekintsük az els feladatot, az úgy nevezett lefogási feladatot. Ez egy alapvet kombinatorikai feladat. Adott egy véges S halmaz részhalmazainak rendszere A 1,..., A m, illetve egy k N szám. Ebb l adódó feladat, hogy van-e legfeljebb k elem részhalmaza S-nek, amely minden részhalmazát metszi? 11. Tétel. A lefogási feladat NP-teljes. Bizonyítás: A 3SAT-ot visszavezetjük erre a problémára. Adott B konjunktív 3-normálformához megkonstruálunk egy halmazrendszert a következ módon: az alaphalmaz legyen a B-beli változójelek és azok negáltjainak halmaza, x 1,... x n, x 1,..., x n. B minden tagjához vegyük a benne el forduló változójelek és negáltjainak halmazát, és ezen kívül az x i, x i halmazokat is. Az így konstruált halmazrendszernek az elemei akkor és csak akkor foghatók le legfeljebb n ponttal, ha a normálforma kielégíthet. 9. Megjegyzés. A lefedési feladat ehhez hasonló, s ha az adott részhalmazok legfeljebb 4 elem, akkor az már NP-teljes. A következ feladat, az úgynevezett (k-)partíció feladat, amit pont az el z megjegyzés alapján bizonyítjuk. Adott egy véges S halmaz részhalmazainak rendszere A 1,..., A m, illetve k-partíció feladat esetén még egy k N szám is. Kiválasztható-e egy olyan részrendszer A i1,..., A ik, amely diszjunkt halmazokból áll és azok uniója a teljes S halmaz? Az ilyen diszjunkt halmazokat nevezzük partíciónak. 12. Tétel. A (k-)partíció feladat NP-teljes. 21

Bizonyítás: A legfeljebb 4 elem halmazos lefedési problémára vezetjük vissza a k-partíció feladatot. Tehát adott egy S véges halmaz legfeljebb 4 elem részhalmazainak rendszere és egy k természetes szám. El akarjuk dönteni, hogy kiválasztható-e k darab részhalmaz úgy, hogy az uniójuk maga az S legyen. Ennek érdekében adjuk hozzá a rendszerhez a részhalmazoknak az összes részhalmazait, felhasználva azt, hogy a halmazok korlátosak, tehát a számuk legfeljebb 2 4 -szeresére n. Nyilvánvaló, hogy ha az eredetit k darab részhalmaza lefedi S-et, akkor a b vítettb l alkalmas k S-nek egy partícióját adja. Ezzel beláttuk, hogy NP-teljes a k-partíció feladat. Folytatva a k-partíció feladatot visszavezetjük a partíció feladatra. Legyen U egy S-t l diszjunkt k elem halmaz és az új alaphalmaz legyen S U. A részhalmazok legyenek az A i u halmazok, ahol u U. Ha az új halmazrendszerb l kiválaszthatók az alaphalmaz egy partícióját alkotó halmazok, akkor ezek száma k, és az S-be es részei S-nek egy partícióját alkotják k halmazra. Ezt megfordítva, S minden k darab A i halmaz partíciója az S U halmaznak az új halmazrendszerbeli halmazoknak egy partícióját adja. Tehát NP-teljes a partíció feladat. 13. Tétel. Egy gráf 3 színnel való színezése NP-teljes feladat. Bizonyítás: Legyen adva egy B konjunktív 3-normálforma, amihez készítünk egy G gráfot, amely pontosan akkor színezhet ki 3 színnel, ha B kielégíthet. Els nek a G gráf pontjai közé felvesszük a literálokat, egyetlen változóból álló Boole-polinomokat, és mindegyik változót a negáltjával összekötjük. Majd hozzáveszünk még két pontot, legyen ez u és v, amiket összekötünk egymással, illetve u-t az összes többi változóval és a negáltjáival is. Végül, minden z i1 z i2 z i3 elemi diszjunkcióhoz hozzárendelünk egy-egy ötszöget. Kett szomszédos csúcsát v-vel, a maradék csúcsait z i1 -gyel, z i2 -vel és z i3 -mal kötjük össze. Azt mondjuk, hogy az így kapott G gráf, akkor és csak akkor színezhet ki 3 színnel, ha B kielégíthet. Fontos észrevétel, hogy ha valamely z i1 z i2 z i3 elemi diszjunkcióra a z i1, z i2, z i3 és v pontok ki vannak színezve 3 színnel, akkor ez a színezés csak akkor továbbítható a megfelel ötszögre, ha a négy pont színe nem egyezik meg. Tegyük fel, hogy B kielégíthet és tekintsük a következ értékadást. Legyen piros szín az igaz literálok, és kék a többi. Illetve legyen u sárga, v meg kék. Mivel minden elemi diszjunkcióban kell hogy legyen egy piros pont, így ez a színezés kiterjeszthet az ötszögekre és helyes színezés lesz. 22

Megfordítva, tegyük fel, hogy a G gráf kiszínezhet 3 színnel, legyenek a színek piros, sárga és kék. Feltehetjük, hogy a v pont kék és az u meg sárga. Így a literáloknak megfelel pontok csak kékek és pirosak lehetnek, és minden változó és a negáltja közül az egyik piros, a másik kék. Mivel az ötszögek is ki vannak színezve, ebból következik, hogy minden elemi diszjunkcióban van egy piros csúcs. De egyben azt is jelenti, hogy ha pirosokat igaznak vesszük, egy olyan értékadást kapunk, mely B-t kielégíti. Algoritmus: A 3. példának megfelel en nézzük a következ algoritmust, amely megtalálja egy gráf legkevesebb színb l álló színezését. Majd az alábbi gráfokra futatjuk a programunkat. Bemenetünk a G = (V, E) gráf, kimenetünk meg a minimális színek száma. (A következ peszeudokódot és a C++ programot, a színezési feladat megoldására teljes mértékben én alkottam.) 23

procedure Szin(G) for i = 1... V do j := 1 while j < V do if ((i, j) E) & (i j) then if i szine = 0 then vagyis még nincs szine i szine := 1 end if if i szine = j szine then i szine := i szine +1 j := 0 end if end if j = j + 1 end while end for minszin := színek számával. return minszin end procedure A pszeudokód alapján létrehoztam az alábbi C++ programot: #include <iostream> #include <conio. h> #include <c s t r i n g > #include <vector > using namespace std ; i n t main ( ) i n t cs, el, sz, s ; vector <int > v ; cout << "Adja meg a csucsok es e l e k szamat! " << endl ; c i n >> cs ; c i n >> e l ; i n t T[ cs ] [ cs ] ; memset (T, 0, s i z e o f (T) ) ; 24

f o r ( i n t i =0; i<cs ; i++) v. push_back ( 0 ) ; cout << "Adja meg a csucs uj szomszedjainak szamat! " << endl ; c i n >> sz ; f o r ( i n t j =0; j<sz ; j++) c i n >> s ; T[ i ] [ s ]=1; T[ s ] [ i ]=1; cout << endl ; i n t j ; f o r ( i n t i =0; i<cs ; i++) j =0; while ( j<cs ) i f ( (T[ i ] [ j ]==1) && ( i!= j ) ) i f ( v [ i ]==0) v [ i ]=1; i f ( v [ i ]==v [ j ] ) v [ i ]=v [ i ]+1; j = 1; j ++; i n t minszin ; minszin =0; 25

f o r ( i n t i =0; i<cs ; i++) i f ( minszin<v [ i ] ) minszin=v [ i ] ; f o r ( i n t i =0; i<cs ; i++) cout << v [ i ] << " " ; cout endl << " Legalabb ennyi s z i n k e l l : " << minszin << endl ; getch ( ) ; Kimenet: 3, illetve a másodiknál: 4 Mint azt már korábban a példában is mondtuk, nem igazán létezik jobb algoritmus, minthogy végig nézzük az összes lehet séget. Ez a program se sokkal különb, s t még lassabb, hiszen nem csak 3 színre nézi, hanem a lehet legkevesebb színre. A két gráf csak 1 élben tért el egymástól, mégis többszörösére n tt a futási id. Teljes gráf esetén már n n eset keletkezik, ahol n a csúcsok száma, és minden egyes eset O(n 2 ) id t igényel. Vagyis NP-beli az algoritmus 26

4. Összefoglaló NP-nehéznek nevezzük azt a függvényt, amely nem feltétlenül van NP-ben, de minden NP-beli probléma visszavezethet rá úgy, hogy a függvény értékének a kiszámítását egyetlen lépésnek tekintjük a RAM-gépnél. Ez egy bonyolultabb Turing-gép, viszont a valódi számítógéphez közelebb álló matematikai modell. Ekkor bármely NP-beli probléma polinomiális id ben megoldható. Az NP-teljes nyelvek karakterisztikus függvénye NP-nehéz, de vannak határozottan nehezebbek, mint bármely NP-beli probléma, mint például egy n n-es GO táblán egy állásról eldönteni, hogy ki lesz a gy ztes. Az operációkutatás elég sok diszkrét optimalizálási problémájáról derült ki, hogy NP-nehéz. Ilyen például az utazóügynök probléma is, amelyben egy gráf minden éléhez hozzárendelünk egy költséget, és így keressük a minimális súlyú Hamilton-kört. De sok leszámlálási probléma is NP-nehéz, mint például egy gráfban a teljes párosítások, a Hamilton-körök, vagy éppen a helyes színezések számának a meghatározása. Általában a felvet d NP-beli problémáról vagy az derül ki, hogy NP-teljes, vagy az, hogy P-beli. Aránylag ritka az olyan felvet d probléma, melyr l nem sikerül rövid id n belül belátni sem azt, hogy P-beli, sem azt, hogy NP-beli. Ezért is számít igen komoly eredménynek, hogy 2015-ben Babai László az egyik problémáról, konkrétan a gráf-izomora problémáról, megmutatta, hogy közelebb áll a P-beliekhez, mint az NP-beliekhez. Ha egy problémáról kiderül, hogy NP-teljes, akkor nem túl valószín, hogy találunk egy hatékony polinomiális idej algoritmust rá, mint a párosítás problémára. Az ilyen problémák viszont elég fontosak lehetnek, ezért napjainkban is dinamikusan fejl dnek az ezekkel foglalkozó területek. Így egy-egy NP-teljes problémához különböz típusú részeredmények születnek, speciális osztályok, melyekre léteznek polinomiálisan megoldható algoritmusok. Ilyen osztály a konstans favastagságú gráfok osztálya a Hamilton-kör létezésére, ami lineáris idej. Vagy olyan exponenciális algoritmusok, melyek kis bemenetekre jól használhatóak, ilyen a színezési algoritmus. Persze néha a feladat bonyolultsága az, ami lényeges, mint a kriptográánál. Láthatóan még sok rejlik ebben a témában és hálás vagyok, hogy a regény kapcsán megismerkedhettem a híres P = N P problémával, ami felkeltette az érdekl désemet. Így a szakdolgozatom írása során megismerkedtem egy új matematikai területtel, melyr l eddig még csak említ legesen hallottam. A témát kutatva új ismeretekre tettem szert és azokat kombináltam az el z leg 27

megszerzett tudásommal. Ezek segítségével dolgoztam fel a problémához kapcsolódó fogalmakat és feladatokat. Úgy gondolom, hogy ezeknek az új információknak a jöv ben is sok hasznát vehetem. 28

5. Irodalomjegyzék Hivatkozások [1] Higasino Keigo: X a gyilkos ismeretlen, Libri kiadó 2012 [2] Király Zoltán: Algoritmuselmélet, Typotex kiadó 2014 [3] Lovász László: Algoritmusok bonyolultsága, Typotex kiadó 2014 [4] Házy Attila, Nagy Ferenc: Adatstruktúrák és algoritmusok, 2009 [5] Ivanyos Gábor, Rónyai Lajos, Szabó Réka: Algoritmusok, Typotex kiadó 1998 [6] https://hu.wikipedia.org/wiki/millenniumi_problémák [7] https://hu.wikipedia.org/wiki/média_(kommunikáció) [8] http://index.hu/tudomany/2015/11/12/grafok_arthur_kiraly_udvaraban/ [9] http://www.imdb.com/ [10] https://en.wikipedia.org/wiki/edmonds-karp_algorithm 29