• Nem Talált Eredményt

Egyéb bonyolultsági osztályok

In document Algoritmusok bonyolultsága (Pldal 66-70)

3. Tár és idő 51

3.2. Egyéb bonyolultsági osztályok

a) Exponenciális idő.Az „összes eset” végignézése gyakran vezet exponen-ciális idejű algoritmusokhoz (vagyis olyan algoritmusokhoz, melyeknek idő-igénye2na és2nb közé esik, ahola, b >0konstansok). Például ha meg akarjuk határozni, hogy egyGgráf csúcsai kiszínezhetők-e 3 színnel (úgy, hogy szom-szédos csúcsok különböző színűek legyenek), akkor a triviális algoritmus az, hogy végignézzük az összes színezést. Ez3neset végignézését jelenti, aholna gráf csúcsainak a száma; egy eset magábanO(n2)időt igényel. (Sajnos erre a feladatra lényegesen jobb – nem exponenciális idejű – algoritmus nem ismere-tes, sőt bizonyos értelemben nem is várható, mint azt látni fogjuk a következő fejezetben. Azt is látni fogjuk azonban, hogy a gráfszínezés az exponenciális idejű problémák egy igen speciális osztályába esik.)

b) Lineáris idő.Több alapvető aritmetikai algoritmus (két szám összeadása, összehasonlítása) lineáris idejű.

A lineáris idejű algoritmusok főleg ott fontosak, ahol nagyméretű bemene-teken viszonylag egyszerű feladatokat kell elvégezni, így számos adatkezelési algoritmus lineáris idejű. Fontos lineáris idejű gráfalgoritmus a mélységi

ke-resés. Ennek segítségével több nemtriviális gráfelméleti probléma (pl. síkba-rajzolás) is megoldható lineáris időben.

Kvázilineáris idejűnek nevezik az olyan algoritmust, melynek időigénye O(n(log n)c), aholc konstans. A legfontosabb kvázilineáris időben megold-ható probléma a sorbarendezés, melyre több O(n log n) idejű algoritmus is ismert. Fontos kvázilineáris algoritmusokat találhatunk a geometriai algo-ritmusok és a képfeldolgozás területén (pl. egyn elemű síkbeli ponthalmaz konvex burka ugyancsakO(nlogn)lépésben határozható meg).

c) Polinomiális tár=PSPACE.Nyilvánvalóan polinomiális tárigényű min-den polinomiális idejű algoritmus, de a polinomiális tár lényegesen általáno-sabb. Az a) pontban tárgyalt triviális gráfszínezési algoritmus tárigénye csak polinomiális (sőt lineáris): ha a színezéseket lexikografikus sorrendben nézzük végig, akkor elegendő azt nyilvántartani, hogy melyik színezést vizsgáljuk, és azt, hogy mely élekről ellenőriztük már, hogy nem kötnek-e össze azonos színű pontokat.

Polinomiális tárigényű algoritmusra a legtipikusabb példa egy játékban az optimális lépés meghatározása az összes lehetséges folytatás végigvizsgálá-sával. Feltesszük, hogy a játék bármely adott helyzete egyn hosszúságú x szóval írható le (tipikusan a figurák helyzetével a táblán, beleértve, hogy ki lép, és esetleg egyéb információt, pl. a sakknál azt, hogy lépett-e már a király stb.). Ki van tüntetve egy kezdő helyzet. Azt is feltesszük, hogy a két játékos felváltva lép, és van arra algoritmusunk, mely két adott helyzetre megmond-ja, hogy az elsőből legális-e a másodikba lépni, mondjuk polinomiális időben (elegendő volna azt feltenni, hogy polinomiális tárral, de meglehetősen unal-mas az olyan játék, melyben annak eldöntése, hogy egy lépés legális-e, több, mint polinomiális időt igényel). Ha egy helyzetben nincs legális lépés, ak-kor eldönthető polinomiális időben, hogy ki nyert (a döntetlentől egyszerűség kedvéért eltekintünk). Végül feltesszük, hogy a játék legfeljebb nc lépésben mindig véget ér.

Ekkor az összes lehetséges lejátszások végignézése, és minden helyzetre an-nak meghatározása, hogy ki nyer, csak polinomiális tárat (bár általában expo-nenciális időt) vesz igénybe. Tegyük fel, hogy egy adottx0helyzetről akarjuk eldönteni, hogy nyerő vagy vesztő helyzet-e (a lépésen következő szempont-jából). Helyzeteknek egyx0, x1, . . . , xk sorozatát részjátéknak nevezzük, ha mindenxi helyzetbőlxi+1-be legális lépés vezet. A gép egy adott pillanatban egy részjáték lehetséges folytatásait elemzi. Fenntartjuk, hogyx0, x1, . . . , xi

(0≤i < k)lehetséges folytatásai közül azok, melyekxi+1-nél kisebbek (azn hosszúságú szavak lexikografikus rendezésére nézve), „rossz lépések”, azaz az x0, x1, .., xi után lépésen lévő játékos veszít, ha ide lép, vagy pedig a lépés illegális.

Egy adottk index esetén az algoritmus végignézi az összesn hosszúságú szót lexikografikus sorrendben, hogy legális folytatásai-exk-nak. Amikor egy

ilyet talál, az lesz xk+1, és az így kapott eggyel hosszabb részjátékot vizs-gáljuk. Ha már nem talál ilyet, akkor a vizsgált részjáték bizonyos helyzeteit

„nyerő helyzetnek” jelöli meg (a lépésen levő játékos számára), az alábbiak szerint: eldönti, hogyxk-ban ki nyer. Ha a lépésen levő játékos nyer, akkorxk

nyerő helyzet; ha a másik, akkorxk−1 nyerő helyzet. Legyeniaz a legkisebb index, melyre már tudjuk, hogy nyerő helyzet. Hai= 0, akkor tudjuk, hogy a játékban a kezdő nyer. Hai >1, akkorxi−1-ből ide lépni rossz lépés volt.

Megnézi ezért az algoritmus, hogy lehet-exi−1-ből legálisan olyan helyzetbe lépni, melyxi-nél lexikografikusan nagyobb. Ha igen, legyenyaz első ilyen; az algoritmus azx0, x1, . . . , xi−1, yrészjáték vizsgálatával folytatódik. Ha seme-lyikxi-nél lexikografikusan nagyobb helyzet sem legális lépésxi−1-ből, akkor xi−1-ből minden legális lépés „rossz”. Így ha i= 1, akkor a kezdőállapotban a kezdő veszít, és készen vagyunk. Hai >2, akkorxi−2-t nyerő helyzetként jelölhetjük meg.

Ugyancsak polinomiális tárral, de exponenciális idővel működik a „triviális összeszámlálás” a legtöbb leszámlálási feladat esetén. Például adottGgráfhoz meg akarjuk határozni aGhárom színnel való színezéseinek a számát. Ekkor végignézhetjük az összes színezéseket, és valahányszor egy színezés legális, 1-et adunk egy számlálóhoz.

3.2.1. Feladat. Egy kvantifikált Boole-formula egy olyan Boole-formula, melyben a∀xés∃xkvantorokat is használhatjuk. Bizonyítsuk be, hogy an-nak eldöntése, hogy egy adott kvantifikált Boole-formula kielégíthető-e, a PSPACE-ben van.

d) Lineáris tár.A tárigény szempontjából a polinomiális időhöz hasonlóan alapvető osztály. Ilyenek a gráfalgoritmusok közül azok, melyek leírhatók a pontokhoz és élekhez rendelt címkék változtatásával: pl. összefüggőség, „ma-gyar módszer”, legrövidebb út, optimális folyam keresése. Ilyen a korlátos pontosságú numerikus algoritmusok többsége. Manapság az adatbányászat-ban a hatalmas mennyiségű adatok miatt szinte kizárólag csak lineáris tárat használó algoritmusokat használnak.

Példaként írjuk le Turing-gépen a szélességi keresést. Ennek az algorit-musnak bemenete egy (irányítatlan)Ggráf és egyv∈V(G)csúcs. Kimenete G-nek egy olyan F feszítőfája, melyre minden xpontra azx-etv-vel össze-kötő F-beli út az összes G-beli utak közül a legrövidebb. Feltesszük, hogy a Ggráf úgy van megadva, hogy rendre minden csúcsához meg van adva a csúcs szomszédainak listája. Az algoritmus során mindenxponthoz minden lépésben vagy a „címkézett” vagy az „átvizsgált” címke van hozzárendelve.

Kezdetben nincs átvizsgált pont, és csakv címkézett. Menet közben a cím-kézett, de nem átvizsgált pontok neveit egy külön szalagon, a „sor” szalagon tároljuk, egy másik szalagon (az „F” szalagon) pedig a címkézett pontokat, mindegyik után zárójelben felírva azt is, hogy melyik pontból jutottunk el

hozzá. A gép a címkézett, de nem átvizsgált pontok közül elolvassa az első pont nevét (legyen ezu), majd ennek szomszédai közül keres olyat, amely még nincsen címkézve. Ha talál, akkor ennek a nevét felírja a „sor” szalag és az „F”

szalag végére, az utóbbin utána írva zárójelben, hogy „u”. Ha végigvizsgálta uösszes szomszédját, akkoru-t letörli a „sor” szalag elejéről. Az algoritmus megáll, ha a „sor” szalag üres. Ekkor az „F” szalagon szereplő párok a keresett F fa éleit adják.

Nyilvánvaló, hogy ennek az algoritmusnak a tárigénye csak O(n) darab log n jegyű szám, ennyi tár (konstans tényezőtől eltekintve) pedig már a csúcsok neveinek leírásához (és így a gráf megadásához) is kell.

e) Logaritmikus tár=LOGSPACE.Ez szintén egy központi jelentőségű, igen sokat vizsgált osztály. Egyrészt függvények kiszámításánál hasznos ez a korlátozás (emlékeztetünk rá, hogy se a csak olvasható bemeneti, se a csak írható kimeneti szalag nem számít bele a tárba!), másrészt eldöntési prob-lémák esetén is érdekes (ez esetben szimplán L a megfelelő osztály jelölése, tehát melybe azok a nyelvek tartoznak, amelyeket el lehet dönteniO(logn) tárral). 2004-ben egy áttörő eredmény volt, amikor Reingold megmutatta, hogy az alábbi probléma L-ben van: a bemenet egyG irányítatlan gráf, és ennek két csúcsa:sést. El kell dönteni, hogy van-e úts-bőlt-be, azaz hogy egy komponensben vannak-e. (Érdekes módon az irányított gráfokra vonat-kozó analóg problémára nem ismert, hogy L-ben van-e, sőt inkább várható, hogy erre a kérdesre a válasz „nem”).

3.2.2. Feladat. a) Adjunk logaritmikus tárat használó algoritmust, amely eldönti egy szóról a{(, )}kételemű ábécé felett, hogy helyesen záró-jelezett-e.

b) Adjunk logaritmikus tárat használó algoritmust, amely eldönti egy szó-ról a{(, [, ), ]}négyelemű ábécé felett, hogy helyesen zárójelezett-e.

3.2.3. Feladat. Labirintus a kockás papíron: a bemenet egyn×n-es nulla-egy mátrix, sorfolytonosan leírva, minden mátrix-sor végén nulla-egy vessző. A mátrix 1 értékű elemein definiálunk egy gráfot: két csúcs össze van kötve, ha (vízszintesen vagy függőlegesen) szomszédosak a mátrixban. Adjunk LOG-SPACE algoritmust, mely megszámolja ezen gráf komponenseinek a számát.

3.2.4. Feladat. Tegyük fel, hogy f és g logaritmikus tárban számítható függvények. Bizonyítsuk be, hogy ekkor a kompozíciójuk is kiszámítható lo-garitmikus tárban.

3.3. Általános tételek a tár- és

In document Algoritmusok bonyolultsága (Pldal 66-70)