340 likes | 559 Views
Számításelmélet Számítástudomány alapjai. PTE-TTK 2006. ősz. Kilián Imre H-7683 Gyűrűfű Cseresznyéskert tel: +36-73-554412 kilian@axelero.hu. Bonyolultságelmélet Complexity Theory. Mi mennyi?-re bonyolult? Hogyan mérhető? Minőség Mennyiség? Számítási modellek Eldönthetőség
E N D
Számításelmélet Számítástudomány alapjai PTE-TTK 2006. ősz Kilián Imre H-7683 GyűrűfűCseresznyéskerttel: +36-73-554412 kilian@axelero.hu
BonyolultságelméletComplexity Theory • Mi mennyi?-re bonyolult? Hogyan mérhető? • MinőségMennyiség? • Számítási modellek • Eldönthetőség • Erőforrásigény (Idő és tár) • Nemdeterminizmus és párhuzamosság • Információbonyolultság • Döntési fák • Kommunikációs bonyolultság • Kriptográfia
BonyolultságelméletComplexity Theory • Hopcroft-Ullman: Introduction to Automata Theory, Language and Computation, AddisonWesley 1979. • Leiserson-Rivest-Cormen: (Új) Algoritmusok. Műszaki kiadó Budapest. • Papadimitru: Számítási bonyolultság, Novodat 1999. • Lovász-Gács: Computational Complexity (Postscript fájl, 1994.) • Bach Iván: Formális nyelvek. Typotex 2001.
Alapfogalmak • Ábécé: S véges szimbólumhalmaz. • Szavak, mondatok: az ábécé betűiből képzett véges sorozatok. • Nyelv: L az ábécé betűiből képezhető összes véges sorozat egy részhalmaza. Az L nyelv szavai, mondatai: az L elemei • Üres szó: Æ, e • Üres nyelv: Æ (de!! Æ≠{Æ}) • Si : a betűiből alkotott, pontosan i hosszú szavak • S*=i=1U¥Li • Összes szó: S* • |wÎS*| vagyis a || operátor: egy w szó hossza • Nyelv: LÍS* • abc szerinti/alfabetikus/lexikografikus rendezés • Z,Z+ egész számok, pozitív egészek • R,R+ valós számok, pozitív valósak • Q,Q+ racionális számok, pozitív racionálisak
Függvények aszimptotikus viselkedése:A Θ jelölés • Hatékonyságfüggvények értékkészlete/értelmezési tartománya: egész számok • Függvényhalmazt határoz meg: „=„ itt halmazhoz tartozás • Adott f(n) függvényhez akkor mondjuk, hogy Θ(g(n)) = f(n), ha • Léteznek n0, c1, c2 állandók, hogy • n>n0 esetén • 0<=c1*g(n)<=f(n)<=c2*g(n) • (aszimptotikusan korlátok közé szorítható)
Az alacsonyabb rendű tagok elhagyhatók • A legmagasabb rendű tag együtthatója elhagyható • Bizonyítás gondolatmenete: az ilyen módon leegyszerűsített függvényhez meghatározható a n0 küszöbérték, és a c1, c2 aszimptotikus alsó és felső korlátok úgy, hogy 0<= c1*g(n)<=f(n)<=c2*g(n) teljesüljön
Pl: n2/2-3n = Θ(n2) • Azaz: 0<=c1*n2<=n2/2-3n<=c2*n2 | /n2 • 0<=c1<=1/2-3/n<=c2 • Válasszuk n-t szabadon meg… • Pl:n=7>n0 • c2>=1/2-3/7=1/14 • c1<=1/14
O jelölésAszimptotikus felső korlát • Adott f(n) függvényhez akkor mondjuk, hogy O(g(n)) = f(n), ha • Léteznek n0, c állandók, hogy • n>n0 esetén • 0<=f(n)<=c*g(n) • (aszimptotikusan felső korlát alá szorítható) • Legrosszabb érték becslésére használják
Ω jelölésAszimptotikus alsó korlát • Adott f(n) függvényhez akkor mondjuk, hogy Ω(g(n)) = f(n), ha • Léteznek n0, c állandók, hogy • n>n0 esetén • 0<=c*g(n) <=f(n)
Tétel • f(n) és g(n)-re: f(n) = Θ(g(n)) akkor és csak akkor, ha • f(n) = O(g(n)) és • f(n) = Ω(g(n)) • Bizonyítás: házifeladat
o jelölés (kis ordó) Aszimptotikus éles!! felső korlát • Adott f(n) függvényhez akkor mondjuk, hogy o(g(n)) = f(n), ha • Bármely c állandóra • Létezik n0 állandó, hogy • n>n0 esetén • 0<=f(n)<=c*g(n) • Másik definíció: az f(n) a g(n)-hez képest jelentéktelenné válik, vagyis • lim(n∞)f(n)/g(n) = 0
ω jelölésAszimptotikus éles!! alsó korlát • Adott f(n) függvényhez akkor mondjuk, hogy ω(g(n)) = f(n), ha • Bármely c állandóra • Létezik n0 állandó, hogy • n>n0 esetén • 0<=c*g(n) <=f(n) • Másik definíció: f(n) a g(n)-hez képest tetszőlegesen nagy lehet, vagyis • lim(n∞)f(n)/g(n) = ∞
Tulajdonságok (bizonyítás nélkül) • Tranzitivitás, vagyis (O-ra, o-ra, Ω-ra, és ω-ra is!!):f(n) = Θ(g(n)) és g(n) = Θ(h(n)) akkorf(n) = Θ(h(n)) • Reflexivitás: (O-ra és Ω-ra is!) • f(n) = Θ(f(n)) • Szimmetria: f(n) = Θ(g(n)) akkor és csak akkor, ha g(n) = Θ(f(n)) • Felcserélt szimmetria: • f(n) = O(g(n)) akkor és csak akkor, ha g(n) = Ω(f(n)) • f(n) = o(g(n)) akkor és csak akkor, ha g(n) = ω(f(n))
Vigyázat! Párhuzam! • f(n) = O(g(n)) ≈ a<=b • f(n) = Ω(g(n)) ≈ a>=b • f(n) = Θ(g(n)) ≈ a=b • f(n) = o(g(n)) ≈ a<b • f(n) = ω(g(n)) ≈ a>b • Bár hasonlít a valós számok fölött értelmezett függvényekre, a Trichotómia NEM IGAZ!! • Vagyis előfordulhat, hogy két függvényre. f(n)-re és g(n)-re • sem f(n) = Θ(g(n)) • sem f(n) = o(g(n)) • sem f(n) = ω(g(n)) nem teljesül….
Számítási modellek • Mi a számítógép? Mi az algoritmus? • „…mechanikusan kiszámítható matematikai eljárás…” Church tézis • Matematikai gép: O=F(I) O,IÍS* (stringek) • Turing gép (1936)… • Random Access Machine (RAM) • Véges automata – Sejtautomata • Def: Szimuláció: M1 gép szimulálja M2-t, ha M1 ugyanazon bemenő stringekre ugyanazokat a kimenő stringeket állítja elő, mint M2
Véges automaták • Reguláris nyelvek felismerésére • Csak olvasófej van és véges vezérlés. Memória nincs. • M=(Q, S, d,q0, F), ahol… • Q az állapotok véges halmaza • S: A szalagábécé • q0ÎQ: kitüntetett kiinduló állapot • FÍQ: elfogadó állapotok halmaza • d: Q´SQ, az automata mozgási szabályai
Véges automaták működése • Automataállapot, v. konfiguráció: K=<q,w>, ahol:q: az automata belső állapotaw: a bemenő szalag tartalma… • kikj az automata egy lépése akkor következik be, ha ki=<qi,awj> és kj=<qj,wj>, valamint létezik <qi,a>qj mozgási szabály. • ki*kj qi-ből wj bemenő szalag első (j-i) karakterének elolvasásával qj-be véges számú (j-i) lépéssel jut el • Az automata egy w szót akkor fogad el, ha: <q0,w>*<q,e>, ahol qÎF
a b c a b c Diszkusszió • Véges automaták ábrázolása: gráf, melynek csomópontjai az állapotoknak felelnek meg, élei a beolvasott karakterekkel vannak címkézve. • Pl: Felismert nyelv: aibjck • Megadható-e két <q,a>q1, ill. <q,a>q2 szabály? Nemdeterminisztikus automata… • Mi van akkor, ha k=<q,aw>, de nincs <q,a>q1 szabály? Nem teljes automata…
Turing gép és megállási problémája • Turing 1936. Szalag-író/olvasófej-véges vezérlőmű • T=(Q,S,G,d,q0,F), ahol • Q: véges állapothalmaz • S: kezdő ábécé, véges szimbólumhalmaz • G: a szalag ábécéje, SÍG • d:mozgási szabályok • q0:kiindulási állapot • FÍQ: elfogadó állapotok halmaza • Mozgási szabályok: QxGQx(G-º)x{l,r}, ahol º az üres szimbólum. (az állapot és az elolvasott szimbólum függvényében átmegy egy új állapotba, visszaír valamit és jobbra vagy balra elmozdul) • Esetleg: több szalag, esetleg több lépés
Példák • Változtassuk a szöveg 0 és 1 karaktereit X és Y-ra • Találjuk meg a megkettőzött XX karaktereket • Bináris inkrementálás
Példák • Adjunk meg olyan Turing gépet, amely a ‘wcw’ nyelvet elemzi, ahol w=(aub)*. • Adjunk meg olyan Turing gépet, amely a bemenő szót átmásolja • Adjunk meg olyan Turing gépet, amely az x1,…,xn sorozatból előállítja az x1,…,xn sorozatot. • Hogyan lehet Turing géppel karaktert beszúrni? • Hogyan lehet fog-t (két függvény szuperpozícióját kiszámítani)?
Church-tézis: minden, ami algoritmusokkal megvalósítható, az T-géppel kiszámítható • Eljáráshívás: T1 hívja T2-t. Egyesítsük az állapotaikat. Induljon a T1, hívás: olyan szabály, ami a T2-t indítja, Befejezés: T2 végállapotai után térjen valahová T1-be vissza • Beszúrás: T állapothalmaza legyen képes egy szimbólum eltárolására. A szalagra férjen még egy jelölő is. Jelöljük meg a helyet. Cseréljük ki a tároltat a szalagon levővel. Lépjünk jobbra. Ha üres szimbólumot olvasunk, akkor visszatekerünk a jelölőig; ha nem, akkor a cserétől újrakezdjük a ciklust.
A T-gép megáll, ha nincs a helyzetnek (állapot-szalag) megfelelő szabály. Elfogadja a bemeneti nyelvet, ha elfogadó állapotban áll meg. Elutasítja, ha nem elfogadó állapotban áll meg, vagy végtelen ciklusba esik. • Neumann-elv: program-adat ekvivalencia • T-gép képes egy (másik) T-gépet szimulálni úgy, hogy induláskor a szalagján van a (másik) gép leírása, plusz a másik gép bemenete. (kb. 60 mozgási szabály elég hozzá). Programbetöltés, Univerzális T-gép • A T-gép egyenértékű egy egyállapotú T-géppel. • Számítógép: Random Access Machine egyenértékű a T-géppel • Egy T-gép által elfogadott bemenetek egy nyelvet alkotnak • Tétel: A T-gépek a Chomsky 0 osztályú (legszabadabb) nyelvek elemzésére képesek
A megállási probléma • Megállapítható-e, hogy mikor esik a T-gép végtelen ciklusba? Módszer: univerzális T-gépnek odaadjuk a T-gép(ek) leírását bemenetként… • Odaadhatjuk-e univerzális T-gépnek a saját leírását bemenetként? • Odaadhatjuk-e egyes T-gépeknek a saját leírásukat bemenetként? Mi történik? lesz olyan, amelyik elfogadja/elutasítja/ciklusba esik • Legyen: L1 azon T-gép leírások nyelve, amelyek sajátmagukat elfogadják, L2 pedig azoké, amelyek sajátmagukat elutasítják
Az univerzális T-gépet egészítsük ki egy a leírást megkettőző (gép+adat) előkészítő algoritmussal. Ez a T-gép éppen az L1 nyelvet fogja elfogadni. • Készíthetünk-e olyan T-gépet, amely az L2 nyelvet fogadja el? Nem • Tfh. létezik ilyen (a saját leírását elutasító gépeket elfogadó) gép. Mit csinál ez a gép a saját leírásával? Ha elfogadja, akkor a saját leírását elutasítónak kell lennie, vagyis el kellene utasítaniaHa elutasítja, akkor a specifikáció miatt el kellene fogadnia • Nincs az L2 nyelvet elfogadó T-gép. Az L2 nyelv nem írható le generatív módon
Eldönthető-e minden T-gépre és minden bemenetre, hogy a T-gép megáll-e? Nem. (eldönthető egy kérdés, ha megáll) • Tfh. igen. Ekkor szerkeszthető lenne olyan (univerzális) T-gép, ami minden gépleírást-bemenet párt elfogad, ha a leírt gép a bemenetre ciklusba esne, és elutasít vagy ciklusba esik, ha a gép az adatra megállna. • Mit tenne a gép a saját megkettőzött leírására? elfogadná? (akkor, ha ciklusba kellene esnie)ellentmondáselutasítaná vagy ciklusba esne? (akkor a specifikáció miatt meg kellene állnia… ellentmondás • nem dönthető el minden gépre és bemenetre, hogy a gép megáll-e Léteznek nem eldönthető problémák…
Turing gép-RAM gép • Random Access Machine: nincs olvasófej, nem kell odatekercselni, hanem közvetlenül lehet a szalagon indexelni/címezni • Szalagműveletek helyett utasítások • Utasításfajták: x[i]:=0, x[i]:=x[i]+1, x[i]:=x[i]-1, x[i]:=x[i]+x[j], x[i]:=x[i]-x[j], x[i]:=x[x[j]], x[x[j]]:=x[i], if x[i]<=0 then goto p
Példa: RAM gép • Szorzás: x[3]=x[1]*x[2] • Utasítások: • 1. x[3]=x[1] • 2. if x[2]<2 then goto 8 • 3. x[3]=x[3]+x[1] • 4. x[2]=x[2]-1 • 5. if true then goto 2 • 8. END
Példa: RAM gép • Állapítsuk meg, hogy melyik a legnagyobb m szám, amelyre 2m<=a. • Állapítsuk meg, hogy mennyi az a szám n-ik faktoriálisa • Keressünk ciklusban pithagorászi számhármasokat • Keressünk ciklusban számpárokat
xtail(x) x=e a b # e F T head(x) a b xtail(x) xtail(x) xtail(x) Post gépek • Egy S={a,b} ábécé feletti Post gép egy egyváltozós folyamatábra (irányított gráf utasítások felett), ahol x változó {a,b,#} feletti szó a következő utasításokkal: • TEST: • ÉRTÉKADÁS: az abcbármelyik betűjéveljobbról konkatenálunk START ACCEPT REJECT # xxa
START xx# a xtail(x) # b, e a xxa xtail(x) REJECT ACCEPT b #, e REJECT b xxb xtail(x) a, e # xx# REJECT
START a xtail(x) e b ACCEPT a b xxa xtail(x) xxb xtail(x) e a b e REJECT REJECT
Post gépek és Turing gépek egyenértékűsége • Tétel: Ugyanazon ábécé feletti Post és Turing gépek egyenértékűek • Biz (nem precíz): Minden Post gép szimulálható egyállapotú Turing géppel és viszont. • 1. Turing Posttal: Legyen wT=bal.x.jobb, ekkor wP=x.jobb.bal • xyr x.jobb.baljobb.bal.y • xyl x.jobb.bal.zz.y.jobb.bal
Post gépet Turinggal: wP=d1d2d3d4#d5d6, akkor wT=„… d1d2d3d4#d5d6, …” • xtail(x)„d1d2d3d4#d5d6” „d1d2d3d4#d5d6” • xxa „d1d2d3d4#d5d6” „d1d2d3d4#d5d6a”