ALGORITMUS ELMÉLET 2016/2017 I. félév,

Hasonló dokumentumok
2009/2010/II. félév, Prof. Dr. Galántai Aurél Óbudai Egyetem NIK IMRI Budapest

2009/2010/I. félév, Prof. Dr. Galántai Aurél BMF NIK IMRI Budapest november 25.

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:

dr. Szalkai István Pannon Egyetem, Veszprém, Matematika Tanszék november 3.

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

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 digitális számítás elmélete

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

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

Chomsky-féle hierarchia

A Számítástudomány alapjai

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.

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

dr. Szalkai István Pannon Egyetem, Veszprém, Matematika Tanszék augusztus 12.

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

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

KOVÁCS BÉLA, MATEMATIKA I.

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

Halmazelméleti alapfogalmak

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

Matematikai logika és halmazelmélet

Chomsky-féle hierarchia

HALMAZELMÉLET feladatsor 1.

Automaták mint elfogadók (akceptorok)

2014. szeptember 24. és 26. Dr. Vincze Szilvia

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

DiMat II Végtelen halmazok

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

A matematika nyelvér l bevezetés

Automaták és formális nyelvek

Diszkrét matematika I.

A számítógépes nyelvészet elmélete és gyakorlata. Formális nyelvek elmélete

Diszkrét matematika 2.C szakirány

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

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

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

ZH feladatok megoldásai

1. tétel - Gráfok alapfogalmai

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

Házi feladatok megoldása. Nyelvek felismerése. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 5. gyakorlat

Algoritmuselmélet 12. előadás

KOVÁCS BÉLA, MATEMATIKA I.

Itt és a továbbiakban a számhalmazokra az alábbi jelöléseket használjuk:

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

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

4. Fuzzy relációk. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

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

Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

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

Algoritmuselmélet 18. előadás

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

Gráfelméleti feladatok. c f

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

Alap fatranszformátorok II

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

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

A valós számok halmaza

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

13.1.Állítás. Legyen " 2 C primitív n-edik egységgyök és K C olyan számtest, amelyre " =2 K, ekkor K(") az x n 1 2 K[x] polinomnak a felbontási teste

NP-teljesség röviden

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

Matematika alapjai; Feladatok

1. Mondjon legalább három példát predikátumra. 4. Mikor van egy változó egy kvantor hatáskörében?

Diszkrét matematika 2.

Diszkrét matematika 2.

RE 1. Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

n =

A 2015/2016. tanévi Országos Középiskolai Tanulmányi Verseny döntő forduló MATEMATIKA III. KATEGÓRIA (a speciális tanterv szerint haladó gimnazisták)

A relációelmélet alapjai

Algoritmuselmélet 2. előadás

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

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

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

Logika es sz am ıt aselm elet I. r esz Logika 1/36

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.

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

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

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Formális nyelvek - 9.

22. GRÁFOK ÁBRÁZOLÁSA

Diszkrét matematika 1. középszint

Algoritmuselmélet 1. előadás

0 ; a k ; :::) = ( 0: x = (0; 1; 0; 0; :::; 0; :::) = (0; 1)

SZÁMÍTÁSTUDOMÁNY ALAPJAI

Nagyordó, Omega, Theta, Kisordó

Kronecker-modulusok kombinatorikája és alkalmazások

A = fx j P (x) igazg ; A = fx j 1 x 7; x prímszámg : A [ B = fx j x 2 A, vagy x 2 Bg ; [a::b] := [a; b] \ Z

Struktúra nélküli adatszerkezetek

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

Atomataelmélet: A Rabin Scott-automata

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

1. előadás: Halmazelmélet, számfogalom, teljes

Logika és informatikai alkalmazásai

HHF0CX. k darab halmaz sorbarendezésének a lehetősége k! Így adódik az alábbi képlet:

Házi feladatok megoldása. Nyelvtani transzformációk. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 6. gyakorlat.

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

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

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Predikátumkalkulus. Predikátumkalkulus alapfogalmai, formalizálás, tagadás, logikailag igaz formulák. Vizsgáljuk meg a következ két kijelentést.

Átírás:

ALGORITMUS ELMÉLET 2016/2017 I. félév, (el½oadás vázlat) Prof. Dr. Galántai Aurél Óbudai Egyetem NIK Alkalmazott Informatikai Intézet Budapest 2016-09-10

2

Tartalomjegyzék 1. Bevezetés 5 2. Matematikai alapfogalmak 9 2.1. Jelölések........................................ 9 2.2. Relációk és függvények................................ 10 2.3. Függvények aszimptotikus jellemzése........................ 11 2.4. Gráfok......................................... 14 2.5. Halmazok számossága................................ 17 3. Formális nyelvek 21 3.1. Nyelvek és szavak................................... 21 3.2. Generatív nyelvtanok................................. 23 3.3. Generatív nyelvtanok osztályozása.......................... 25 4. Algoritmusok, kiszámítható függvények és döntési problémák 29 5. Algoritmusok elemzése 33 5.0.1. Az oszd meg és uralkodj elv......................... 33 5.0.2. A mester tétel................................. 34 5.1. Keresési, rendezési és kiválasztási feladatok..................... 36 5.1.1. Keresési feladatok............................... 36 5.1.2. Rendezési feladatok.............................. 39 5.1.3. Alsó becslés a rendezések bonyolultságára................. 44 5.1.4. Kiválasztási feladatok............................. 45 5.2. Aritmetikai algoritmusok............................... 48 5.2.1. Szorzás..................................... 49 5.2.2. Osztás..................................... 51 5.3. Mátrixalgoritmusok.................................. 54 5.3.1. Mátrixok és vektorok szorzása........................ 55 5.3.2. Strassen mátrix szorzó algoritmusa..................... 56 5.3.3. Megjegyzések a gyors mátrix szorzásokról.................. 58 5.4. Gyors Fourier-transzformáció............................ 60 5.4.1. A Cooley-Tukey féle radix-2 algoritmus................... 63 5.5. További algoritmusok................................. 66 6. Turing gépek 67 6.1. Turing gépek programozása............................. 71 6.2. A Turing gép kiterjesztései.............................. 74 TARTALOMJEGYZÉK 3

6.3. Számítási modellek ekvivalenciája.......................... 75 6.4. Univerzális Turing gépek............................... 76 7. Algoritmikus eldönthet½oség, kiszámíthatóság és bonyolultság 79 7.1. Nyelvek felismerése és eldöntése Turing gépekkel.................. 79 7.2. Eldönthetetlen problémák.............................. 86 7.3. Néhány további eldönthetetlen probléma...................... 87 7.4. Bonyolultságelméleti eredmények és fogalmak................... 90 8. Számítási bonyolultság 95 8.1. Az NP osztály és NP-teljesség............................ 95 8.1.1. Nem-determinisztikus Turing-gépek és az NP osztály........... 96 8.1.2. NP-teljesség.................................. 99 9. Irodalom 103 4 TARTALOMJEGYZÉK

1. fejezet Bevezetés "Amit hallok, elfelejtem. Amit látok, emlékezem. Amit csinálok, megértem." Konfuciusz Mi az algoritmus elmélet? Ennek a kérdésnek a pontos megválaszolása - más tudomány területekhez hasonlóan - nehéz feladat, már csak az informatika rohamos mérték½u fejl½odése miatt is. Ide soroljuk az algoritmusok és az általuk megoldott problémák elemzését, algoritmusok hatékonyság vizsgálatát és bonyolultság elméletét és még sok más területet (lásd pl. ACM Computing Classi cations System, Wikipédia). Az el½oadás f½oként számítási modellekkel, algoritmusok elemzésével (analízisével) és bonyolultságelmélettel foglalkozik. A bonyolultságelmélet számítógép korszak (von Neumann) el½otti el½ozményeit a matematikai logika fejl½odésében kereshetjük, nevezetesen a "bizonyítás" és a "kiszámítható függvény" fogalmának formalizálásával kapcsolatos kutatásokban. Gödel 1930-ban igazolta, hogy egy (aritmetikai, vagy aritmetizálható) logikai rendszeren belül megfogalmazhatók olyan állítások, amelyek igaz, vagy hamis volta (a rendszeren belül) nem igazolható (Gödel, K.: Über formal unentscheidbare Sätze der Principa Mathematica und verwandtere Systeme I ( On formally undecidable propositions of Principia Mathematica and related systems I ), Monatshefte für Mathematik und Physik, 38, 1931, 173 198 ). Ebben a munkájában Gödel de niálta a (primitív) rekurzív függvény fogalmát is, amely alapvet½o a kiszámítható függvény fogalmának vizsgálatában. Turing 1936-ban bevezette a Turing gép fogalmát, amely mind a kiszámíthatóság-, mind pedig az algoritmuselméletben alapvet½o fontosságú eszköznek bizonyult. (Turing, A.M.: On computable numbers with an application to the Entscheidungsproblem, Proc. London Math. Soc., ser. 2, 42, 1936-7, 230 265 ). BEVEZETÉS 5

Kurt Gödel (1906-1978) Alan Turing (1912-1954) Az 1936-os évben két másik fontos fogalmat is bevezettek. Alonzo Church de niálta a - kalkulust 1 (A. Church: An unsolvable problem in elementary number theory, American Journal of Mathematics, 58, 1936, 345 363). Church híres tézise azt a sejtést mondja ki, hogy minden számítás az általa megadott rendszerben formalizálható. Ugyancsak 1936-ban S.C Kleene bevezette a -rekurzív függvényeket (S.C. Kleene: General recursive functions of natural numbers, Mathematische Annalen, 112, 1936, 727 742 ). Alonzo Church (1903-1995) S. C. Kleene (1909-1994) Érdemes megjegyezni, hogy a LISP nyelvet a -kalkulusból fejlesztették ki. Az imperatív programnyelvek (pl. Pascal, C) pedig a -rekurzív függvények implementációinak tekinthet½ok. A rekurzív függvények elméletéhez Péter Rózsa (1936, k-szoros rekurzív függvények) és Kalmár László (1943, elemi függvények) is jelent½osen hozzájárult. A Neumann-elv½u számítógépek elterjedésével kezd½odött a számítástudomány kialakulása is. A bonyolultság elmélet kifejl½odésének f½obb kezdeti lépései S.A. Cook szerint (ACM Turing Award, 1982): 1 A -kalkulusban a függvények jelölése: x 1 ; : : : ; x n [: : :] azt a függvényt jelöli, amelynek változói rendre x 1, x 2,..., x n és értéke [: : :]. 6 BEVEZETÉS

- Turing (1936): Turing gép, az e ektíven (algoritmikusan) kiszámítható függvény fogalma, kielégithet½oségi probléma, (Church-)Turing hipotézis: Bármely függvény, amely egy jól de niált eljárással kiszámítható, kiszámítható egy Turing géppel is. - Rabin (1959, 1960): Mit jelent az, hogy f-et nehezebb kiszámítani mint g-t? - Hartmanis, Stearns (1965): bonyolultság mértéke, hierarchia tételek. - Cobham (1965): függvények bels½o számítási nehézsége, gépfüggetlen elmélet. - Karp (1972): P osztály (tractability vagy feasibility). - Aho, Ullman, Hopcroft (1974): RAM gép. A bonyolultságelmélet témakörét M. Rabin az 1976-os ACM Turing díj átvételekor tartott el½oadásában a következ½okben foglalta össze. Legyenek adottak a következ½ok: - P probléma osztály, - I 2 P egyedi probléma, - jij a probléma mérete, - AL a P problémát (problémaosztályt) megoldó algoritmus. Az I 2 P problémát megoldva az AL algoritmus egy S I sorozatot hoz létre. Az S I sorozathoz hozzárendelünk bizonyos mértékeket (költséget). A legfontosabb mértékek: (1) Az S I hossza (számítási id½o) (2) Az S I mélysége (a párhuzamosítás mértéke, párhuzamosítás számítási ideje) (3) A memória igény (4) S I teljes "lépésszáma" helyett bizonyos kitüntetett aritmetikai m½uveletek, összehasonlítások, memóriam½uveletek, stb. száma) (5) Az algoritmus hardver implementálásához szükséges áramkör (Boole áramkör) bonyolultsága (kombinatorikus bonyolultság). Tegyük fel, hogy van egy mértékünk az S I számításokhoz. Fontosabb bonyolultsági mértékek: Legrosszabb eset bonyolultság: F AL (n) = max f (S I ) j I 2 P; jij = ng : Átlagos bonyolultság: adott egy p valószín½uség eloszlás minden egyes P n = fi j I 2 P; jij = ng feladat halmazon. Ekkor a mérték: M AL (n) = X I2P n p (I) (S I ) : Algoritmusok analízise alatt azt értjük, hogy adott jij méretfüggvény és (S I ) mérték esetén meghatározzuk a P -t megoldó AL algoritmus F AL (n) legrosszabb eset és M AL (n) átlagos bonyolultságát. Rabin szerint a bonyolultságelmélet legfontosabb kérdései (1976-ban) a következ½ok: 1. Hatékony algoritmusok keresése P megoldására. 2. A P feladatosztály bels½o bonyolultságára alsó becslések keresése. 3. P egzakt megoldásának keresése (már ha van). 4. Közelít½o algoritmusok fejlesztése. 5. A legrosszabb bels½o bonyolultság vizsgálata. BEVEZETÉS 7

6. A P átlagos bonyolultságának vizsgálata. 7. Szekvenciális algoritmusok fejlesztése P megoldására. 8. Párhuzamos algoritmusok fejlesztése P megoldására. 9. Szoftver algoritmusok fejlesztése. 10. Hardveren implementált algoritmusok. 11. Megoldás valószín½uségi (véletlen) algoritmusokkal. A bonyolultságelmélet mára a számítástudomány központi fontosságú területévé vált. A Rabin által felvázolt kérdések ma is intenzív vizsgálatok tárgyát képezik. Az el½oadás egy bevezetés az alapvet½o fogalmakba és eredményekbe. 8 BEVEZETÉS

2. fejezet Matematikai alapfogalmak 2.1. Jelölések A halmazok (naív) fogalmát és a velük végezhet½o m½uveleteket ismertnek tételezzük fel. A következ½o jelöléseket használjuk: N - természetes számok halmaza N 0 - nemnegatív egész számok halmaza (N 0 = N [ f0g) Z - egész számok halmaza n p Q - racionális számok halmaza (Q = o) j p; q 2 Z, q 6= 0 q R - valós számok halmaza C - komplex számok halmaza (C = fa + bi j a; b 2 Rg, i = p 1 ) ; - üres halmaz - valódi részhalmaz - részhalmaz jaj - az A halmaz számossága (elemeinek száma) De níció: Egy A 6= ; halmaz hatványhalmazán a 2 A = fx j X Ag halmazrendszert értjük. Értelemszer½uen ;; A 2 2 A. Szokás 2 A helyett a P (A) (power set of A) jelölést is használni. Állítás: Ha jaj = n, akkor 2 A = 2 n. Bizonyítás: Az n elem½u halmaz k elem½u különböz½o részhalmazainak száma k n P és n n k=0 k = 2 n. De níció: A 1 ; A 2 ; : : : ; A n tetsz½oleges halmazok direkt, vagy Descartes féle szorzatán az A 1 A 2 : : : A n = f(a 1 ; : : : ; a n ) j a i 2 A i, i = 1; : : : ; ng halmazt értjük. A direkt szorzat elemei rendezett elem n-esek. A direkt szorzat rövid jelölése: n i=1a i. Ha A 1 = A 2 = = A n = A, akkor használjuk az A n := n i=1a jelölést is. Ílymódon például R n és C n jelöli a valós, illetve komplex elem½u n dimenziós vektorok halmazát. MATEMATIKAI ALAPFOGALMAK 9

2.2. Relációk és függvények De níció: Legyenek A és B tetsz½oleges halmazok. Tetsz½oleges S AB részhalmazt (bináris) relációnak nevezünk. Az a 2 A és b 2 B elemek S relációban állnak egymással (jelölés asb) akkor és csak akkor, ha (a; b) 2 S. A de níciót rövidebben is megadhatjuk: asb () (a; b) 2 S. De níció: Az S A B reláció értelmezési tartománya: D S = fa 2 A j 9b 2 B : (a; b) 2 Sg : De níció: Az S A B reláció értékkészlete: R S = fb 2 B j 9a 2 A : (a; b) 2 Sg : De níció: Az S A B reláció értéke (metszete) egy adott a 2 D S helyen: S (a) = fb 2 B j (a; b) 2 Sg : De níció: Az S A B relációt függvénynek nevezzük, ha js (a)j = 1 (8a 2 D S ): A függvényeket S : A! B formában is megadhatjuk. De níció: Egy S függvényrelációt teljes függvénynek nevezünk, ha D S = A és parciális függvénynek, ha D S A és D S 6= A. Két egyszer½u példa relációra: S 1 = f(0; 0) ; (1; 1) ; (2; 4) ; (3; 9) ; (4; 16)g és S 2 = f(small,short) ; (medium,middle) ; (medium,average) ; (large,tall)g: A de níció alapján D S1 = f0; 1; 2; 3; 4g, R S1 = f0; 1; 4; 9; 16g és S 1 (i) = fi 2 g (i 2 D S1 ). Az S 1 reláció függvény. Az S 2 reláció esetén D S2 = fsmall,medium,largeg ; R S2 = fshort,middle,average,tallg: Minthogy S 2 (medium) = fmiddle,averageg, az S 2 reláció nem függvény. Függvényreláció esetén S (a) vagy üres, vagy egyelem½u halmaz. Például az S 1 = x; x 2 j x 2 R R R reláció (teljes) függvény, mert D S1 = R. De az S 2 = x; p x j x 2 R; x 0 R R reláció csak parciális függvény, mert S 2 (x) = ; minden x < 0 számra. Tetsz½oleges S A B relációt felfoghatunk egy S : A! 2 B halmazfüggvénynek is, ugyanis minden a 2 D S esetén S (a) B, azaz S (a) 2 2 B. 10 MATEMATIKAI ALAPFOGALMAK

Az f : A! B fügvényt véges függvénynek nevezzük, ha A és B véges halmaz. Az f : f0; 1g n! f0; 1g m tipusú véges függvényeket bináris függvényeknek nevezzük. De níció: Az f : f0; 1g n! f0; 1g függvényt Boole függvénynek nevezzük. A de níció másképpen fogalmazva azt jelenti, hogy f (x 1 ; x 2 ; : : : ; x n ) 2 f0; 1g (x i 2 f0; 1g ; i = 1; : : : ; n): Az alábbi igazság táblázatok megadnak négy alapvet½o Boole függvényt: x y x ^ y 0 0 0 0 1 0 1 0 0 1 1 1 x y x _ y 0 0 0 0 1 1 1 0 1 1 1 1 x y x y 0 0 0 0 1 1 1 0 1 1 1 0 x x 0 1 1 0 Ha a 0 értékhez a hamis, az 1 értékhez pedig az igaz logikai értékeket rendeljük, akkor a fenti táblázatok rendre a logikai és (AND, x^y), vagy (OR, x_y), kizáró vagy (XOR, xy) és negáció (NOT, x) függvényeket adják meg. A negáció függvényt szokás még a :x módon is jelölni. Legyen x; y 2 f0; 1g két logikai változó (vagy állítás)! Ekkor x = 1 x; x ^ y = 1, ha x = y = 1 0, egyébként x _ y = 0, ha x = y = 0 1, egyébként ; x y = 1, ha x + y = 1 0, egyébként : Az XOR felírható még az x y x + y (mod 2) formában is. De níció: A logikai változók :, ^, _ jelekkel felírt kifejezéseit Boole-polinomoknak nevezzük. Állítás: Minden Boole-függvény kifejezhet½o Boole-polinomokkal. 2.3. Függvények aszimptotikus jellemzése A következ½okben aszimptotikus nagyságrendi relációkat de niálunk. De níció: f (n) = O (g (n)) ( f (n) 2 O (g (n))), ha létezik c; n 0 > 0 konstans, hogy jf (n)j c jg (n)j teljesül minden n n 0 számra. FÜGGVÉNYEK ASZIMPTOTIKUS JELLEMZÉSE 11

y 8 6 4 2 0 2 4 0 50 100 150 200 x f(x)=o(g(x)) aszimptotika Példa: Megmutatjuk, hogy log n = O (n). Teljes indukcióval igazoljuk: n 1 ) log n n. n = 1 esetén: log 1 = 0 1. Tegyük fel, hogy n 1-re igaz az állítás: log n n. Ekkor log (n + 1) log (2n) = log 2 + log n 1 + n. Példa: Megmutatjuk, hogy 2 n+1 = O (3 n =n). Teljes indukcióval igazoljuk: n 7 ) 2 n+1 3 n =n. n = 7 esetén: 2 8 = 256 3 7 =7 312:428. Tegyük fel, hogy n 7 és 2 n+1 3 n =n. Ekkor f(x) c*g(x) 2 n+2 = 2 2 n+1 2 3n n = 2 (n + 1) 3n 3 n+1 n + 1 3n+1 n + 1 ; mert 2(n+1) 3n < 1. Az O (nagy ordó) relációval a következ½o m½uveleteket végezhetjük. Állítás: Ha f 1 (n) 2 O (g 1 (n)) és f 2 2 O (g 2 (n)), akkor f 1 (n)+f 2 (n) = O (jg 1 (n)j + jg 2 (n)j), illetve f 1 (n) + f 2 (n) = O (max fjg 1 (n)j ; jg 2 (n)jg). Bizonyítás: Tegyük fel, hogy n n 0 esetén jf 1 (n)j c 1 jg 1 (n)j és jf 2 (n)j c 2 jg 2 (n)j. Ekkor jf 1 (n) + f 2 (n)j jf 1 (n)j + jf 2 (n)j (c 1 + c 2 ) max fjg 1 (n)j ; jg 2 (n)jg : Állítás: Ha f 1 (n) 2 O (g 1 (n)) és f 2 2 O (g 2 (n)), akkor f 1 (n) f 2 (n) = O (g 1 (n) g 2 (n)). Állítás: Ha f (n) 2 O (g (n)), akkor cf (n) 2 O (g (n)). További példák: f (x) = x 4 3x 3 + 5x 1973 = O (x 4 ). (n + 1) 2 = n 2 + O (n). f (n) = 4 log n 3 (log n) 2 + n 2 = O (n 2 ) : 12 MATEMATIKAI ALAPFOGALMAK

y Az f (n) = O (1) azt jelöli, hogy f (n) felülr½ol korlátos. De níció: f (n) = (g (n)) ( f (n) 2 (g (n))), ha létezik c; n 0 > 0 konstans, hogy jf (n)j c jg (n)j teljesül minden n n 0 számra. 8 7 6 5 4 3 1 2 1 0 2 0 50 100 150 200 x f(x)=(g(x)) aszimptotika f(x) c*g(x) Példa: (1=2) n 2 5n = (n 2 ), mert 1 1 2 n2 5n =n 2 = 2 5 1 n 4 ; n 20. I(g) g nél gyorsabban növő függvények O(g). g g vel azonosan növő függvények g nél lassabban növő függvények A O (g) és (g) halmazok megjelenítése De níció: f (n) = o (g (n)) ( f (n) 2 o (g (n))), ha g (n) csak véges sok helyen nulla és f (n) lim n!1 g (n) = 0: FÜGGVÉNYEK ASZIMPTOTIKUS JELLEMZÉSE 13

y 16 14 12 sqrt(x) log(x) log(x)/sqrt(x) 10 8 6 2 4 2 0 4 10 1 10 0 10 1 10 2 10 3 f(x)=o(g(x)) aszimptotika x Példák: log n = o (n), n log n = o (n 2 ), de n log n = O (n 2 ) és n log n = O (n 3 ). Melyik becslés jobb? 2n 2 = O (n 2 ), de 2n 2 6= o (n 2 ) Megjegyzés: Ha f = o (g), akkor egyúttal f = O (g) is teljesül. De níció: f (n) g (n), ha f (n) lim n!1 g (n) = 1: Példa: p n + log n p n. 2.4. Gráfok De níció: A gráf pontokból és a pontokat összeköt½o vonalakból álló alakzat. A gráf pontjait szögpontoknak, vagy csúcsoknak nevezzük. A gráf két szögpontját összeköt½o olyan vonalat, amely nem megy át más szögponton, élnek nevezzük. A szögpontok halmazát V (vertex), az élek halmazát E (edge) jelöli. A G gráfot a G = (V; E) pár adja meg. Egy e 2 E élt a rendezetlen [u; v] pár ad meg, ahol u; v 2 V. Az u és v csúcsok az e él végpontjai. Az [u; u] 2 E élt huroknak nevezzük. Az e; e 0 2 E éleket többszörös éleknek nevezzük, ha ugyanazt a két pontot kötik össze, azaz e = [u; v] és e 0 = [u; v]. 14 MATEMATIKAI ALAPFOGALMAK

A hurkot és többszös éleket nem tartalmazó gráfokat egyszer½u gráfoknak nevezzük egyébként pedig multigráfnak. De níció: Az u 2 V csúcs (u) fokán az u csúcsot tartalmazó élek számát érjük. Ha (u) = 0, akkor az u csúcsot izoláltnak nevezzük. De níció: A G gráf üres, ha E = ;. Teljes a gráf, ha minden szögpontpár éllel van összekötve. De níció: Az u; v 2 V csúcsokat összeköt½o n hosszúságú vonalnak nevezzük az egymáshoz csatlakozó f[v i 1 ; v i ]g n i=1 élek sorozatát, ha v 0 = u és v n = v. A vonal zárt, ha v 0 = v n. A vonalat útnak nevezzük, ha a v 0 ; v 1 ; : : : ; v n csúcsok a v 0 = v n lehet½oség kivételével egymástól különböznek. A zárt utat körnek nevezzük. De níció: A gráf összefügg½o, ha bármely két szögpontját út köti össze. Következmény: Ha egy gráf nem összefügg½o, akkor van legalább egy olyan szögpontja, amelyb½ol nem vezet út az összes többi szögpontba. De níció: Azok a szögpontok, amelyek egy adott szögpontból úttal elérhet½ok, a hozzájuk illeszked½o élekkel együtt a gráf egy összefügg½o komponensét alkotják. De níció: Az olyan összefügg½o gráfot, amelyben nincsen kör, fának nevezzük. Ha a fának n csúcsa van, akkor pontosan n 1 éle van. De níció: A G gráfot cimkézettnek nevezzük, ha az éleihez adatokat rendelünk. Ha minden e éléhez egy w (e) 0 számot rendelünk, akkor súlyozott gráfról beszélünk. De níció: A G gráfot végesnek nevezzük, ha V és E véges halmazok. De níció: A G s = (V s ; E s ) gráf a G = (V; E) gráf részgráfja, ha V s V és E s E. A A E D B C D B C A B C B 3 4 A 2 3 2 E 3 D E F C 6 D Irányítatlan gráfok De níció: A G = (V; E) gráfot irányítottnak vagy digráfnak (directed graph) nevezzük, ha minden élét irányítjuk. GRÁFOK 15

Ekkor E rendezett párok halmaza. Az e = [u; v] 2 E élnek u a kezd½opontja és v a végpontja. Egy u 2 V csúcspont be (u) bemen½o foka, vagy be-foka az u szögpontban végz½od½o élek száma. Az u csúcspont ki (u) kimen½o foka, vagy ki-foka az u pontból induló élek száma. Az u 2 V csúcspontot forrásnak nevezzük, ha ki (u) > 0, de be (u) = 0. Az u 2 V csúcspont nyel½o, ha ki (u) = 0, de be (u) > 0. Az irányított vonal, út és kör de níciója hasonló az eredeti defínícióhoz azzal az eltéréssel, hogy az út (és a kör) esetén az élek irányítása meg kell, hogy egyezzen a vonal irányításával. Az v csúcs elérhet½o az u csúcsból, ha létezik u-ból induló és v-ben végz½od½o irányított út. De níció: A G = (V; E) irányított gráf er½osen összefügg½o, ha bármely u; v 2 V csúcsot irányított él köt össze. De níció: A G = (V; E) irányított gráf aciklikus, ha irányított kört nem tartalmaz. A D B C Irányított gráf A gráfok és relációk szoros kapcsolatban állnak egymással: 1. Legyen G = (V; E) irányított gráf. Ez megfeleltethet½o egy R V V relációnak: R = f(u; v) j e = [u; v] 2 Eg : 2. Legyen R A B reláció. Ez megfeleltethet½o egy (V; E) gráfnak: V = A [ B; E = fe = [u; v] j (u; v) 2 Rg : A logikai áramkörök aciklikus irányított gráfoknak feleltethet½ok meg. Az alábbi két ábra ilyen logikai áramköröket mutat be. 16 MATEMATIKAI ALAPFOGALMAK

2 v 8 1 v 5 1 v o 6 v 7 2 v 3 v 4 o v 4 1 v 5 v 1 v 2 v 1 v 2 v 3 2.5. Halmazok számossága Egy A halmaz számosságán a halmaz elemeinek jaj-val jelölt "számát" értjük. Ha A elemeinek száma véges, akkor jaj egy meghatározott egész számot, az elemek tényleges számát jelenti. Ha azonban A elemeinek száma végtelen, akkor jaj jelentését egy osztályozás segítségével jellemezzük. De níció: Két A és B halmazt azonos, vagy egyenl½o számosságúnak nevezünk ( jaj = jbj), ha elemeik között kölcsönösen egyértelm½u megfeleltetés létesíthet½o. Az jaj = jbj egyenl½o számosság összefüggés egy ekvivalencia reláció, amely a halmazok egy természetes osztályozását indukálja. Az azonos számosságú halmazokat azonos osztályba soroljuk. Ezek jellemz½oje hogy az azonos osztályhoz tartozó halmazok elemszáma azonos, míg a különböz½o osztályokhoz tartozó halmazok elemszáma különböz½o. A halmaz számossága ebben az értelemben annak az osztálynak a megjelölése, amelyhez tartozik. Jegyezzük meg, hogy a most bevezetett számosság fogalom nincs ellentmondásban azzal, hogy véges elemszámú halmazok számossága elemeik száma. Az egyenl½o számosság reláció ugyanis a véges halmazokat az n = 0; 1; 2; : : : elem½u halmazok osztályaiba sorolja és ezeket az osztályokat az elemek tényleges véges számával tudjuk azonosítani. De níció: jaj jbj, ha van olyan C B részhalmaz, amelyre jaj = jcj. Könnyen belátható, hogy A B esetén jaj jbj. Fennállnak a következ½o relációk: a) jaj jbj ^ jbj jcj ) jaj jcj; b) jaj jbj ^ jbj jaj ) jaj = jbj. Cantor igazolta, hogy bármely két halmaz számossága nagyságrendi viszonyba állítható. A legkisebb végtelen számosság a természetes számok N halmazának @ 0 -al (@=alef) jelölt számossága. De níció: Egy A halmazt megszámlálható számosságúnak nevezünk, ha számossága a természetes számok N halmazának számosságával egyenl½o. Véges sok véges vagy megszámlálható halmaz uniója is megszámlálható. Megszámlálható halmazok végtelen részhalmazai is megszámlálhatók. HALMAZOK SZÁMOSSÁGA 17

Ennek megfelel½oen a természetes számok összes végtelen részhalmazának számossága megegyezik N számosságával. Pl. az összes páros természetes számok halmaza felírható az fn = 2k j k = 1; 2; : : :g alakban, ahol a k! 2k leképezés kölcsönösen egyértelm½u megfeleltetést hoz létre a két halmaz között. Könnyen igazolható, hogy az N N 0 Z Q valódi tartalmazás ellenére ezen halmazok számossága azonos: jnj = jn 0 j = jzj = jqj = @ 0. A ( 1; 1) R részhalmaz számossága ugyancsak megegyezik R számosságával: az x! x 1 jxj leképezés kölcsönösen egyértelm½u megfeleltetést létesít a két halmaz között. A fenti példák azt mutatják, hogy végtelen halmazok valódi végtelen részhalmazainak megegyezhet a számossága a tartalmazó halmaz számosságával. Ez a tulajdonság a végtelen halmazok egyik jellemz½o sajátossága, amely nem igaz véges halmazok esetére. De níció: jaj < jbj, ha jaj jbj és jaj 6= jbj. A valós számok R halmazát kontinuum számosságúnak nevezzük, amelyre fennáll, hogy jrj > @ 0. A valós számok halmazának számossága nem megszámlálhatóan végtelen. Tétel (Cantor): jxj < 2 X. Az N összes véges részhalmazának 2 N hatványhalmazára tehát fennáll, hogy 2 N > jnj. A 2 N halmaz számosságát @ 1 -el jelöljük. A Cantortól származó kontinuum hipotézis azt mondja ki, hogy nincs olyan nem megszámlálhatóan végtelen A halmaz, amelynek számossága @ 0 és jrj között van. A hipotézist az jrj = 2 N alakban is meg lehet adni. Gödel 1938-ban igazolta, hogy a kontinuum hipotézist a Zermelo-Fraenkel féle (ZF) axiómarendszerben nem lehet megcáfolni. Paul Cohen (1934-) 1963- ban azt bizonyította, hogy a kontinuum hipotézist igazolni sem lehet a ZF axiómarendszerben. Ennek következtében a probléma eldönthetetlen a ZF axiómarendszerben. A megszámlálható (felsorolható) halmaz fogalmának különösen fontos szerepe van az algoritmuselméleti vizsgálatokban. A következ½okben ennek egy fontos vonatkozását próbáljuk kiemelni. Egy halmazt felsorolhatónak (megszámlálhatónak) nevezzük, ha a tagjai felsorolhatók a következ½o értelemben: elhelyezhet½ok egy listában, amelynek van els½o, második, stb. tagja és a halmaz minden eleme el½obb vagy utóbb felt½unik a listán. A nulla elemmel rendelkez½o ; üres halmazt ebben az értelemben felsorolhatónak tekintjük. A halmaz elemeit felsoroló lista véges vagy végtelen. Egy végtelen halmazt, amelynek elemei felsorolhatók felsorolhatóan (vagy megszámlálhatóan) végtelennek nevezzük. A természetes számok N halmaza felsorolható. Egy lehetséges felsorolása: 1; 2; 3; : : : ; n; n + 1; : : :. Nem fogadható el felsorolásként például az 1; 3; 5; 7; : : : ; 2; 4; 6; : : : lista, amely els½obb felsorolja a páratlan, majd a páros számokat. A megkövetelt felsorolásban ugyanis a halmaz minden elemének fel kell t½unnie valamilyen n-edik elemként, ahol n véges. Példa: Az N 2 = N N halmaz felsorolható. A halmaz (i; j) alakú számpárokból (i; n 2 N) áll. A halmaz elemeinek egy lehetséges felsorolása a következ½o: (1; 1) ; (1; 2) ; (2; 1) ; (1; 3) ; (2; 2) ; (3; 1) ; (1; 4) ; (2; 3) ; (3; 2) ; (4; 1) ; : : : 18 MATEMATIKAI ALAPFOGALMAK

Itt a felsorolás (rendezés) elve az, hogy (i; j) párokat egy mindkét irányban végtelen mátrixba rendezzük (i=sorindex, j=oszlopindex), majd a ferde átlók mentén felsoroljuk az ábrán jelzett módon: (1,1) (1,2) (1,3) (1,4) (1,5)... (2,1) (2,2) (2,3) (2,4) (2,5)... (3,1) (3,2) (3,3) (3,4) (3,5)... (4,1) (4,2) (4,3) (4,4) (4,5)... (5,1) (5,2) (5,3) (5,4) (5,5).................. Az (i; j) párok felsorolása Vegyük észre, hogy a ferde átlókban szerepl½o elempárok összege konstans: 2 az els½o átlóban, 3 a második átlóban, 4 a harmadik átlóban, és így tovább. A felépítésb½ol világos, hogy bármely kiválasztott (m; n) pár a felsorolásban szerepelni fog j (m; n)-edik tagként. Az i-edik ferde átló elemeinek összege i + 1, elemeinek száma pedig i. Az (m; n) pár elemeinek összege m + n, ami az elemet az (m + n 1)-edik átlóba sorolja. Az els½o m + n 2 átló elemeinek száma: 1 + 2 + + (m + n 2) = (m + n 2) (m + n 1) : 2 Az (m; n) pár a saját átlójában az m-edik elem lesz. Tehát az (m; n) pár sorszáma a fenti felsorolásban: j (m; n) = (m + n 2) (m + n 1) 2 + m = m2 + 2mn + n 2 m 3n + 2 : 2 Állítás: Ha az A és B halmazok felsorolhatók (megszámlálhatók), akkor A B is felsorolható (megszámlálható). Bizonyítás: A példa alapján eljárva az A és B halmaz elemeit el½oször külön-külön felsoroljuk: a 1 ; a 2 ; : : : ; a m ; : : :, illetve b 1 ; b 2 ; : : : ; b n ; : : : Ezután az (a i ; b j ) elempárokat az (i; j) indexek alapján sorbarendezzük az el½obb látott módon. Az állítás alapján könnyen beláthatjuk, hogy N k is felsorolható (megszámlálható). HALMAZOK SZÁMOSSÁGA 19

20 MATEMATIKAI ALAPFOGALMAK

3. fejezet Formális nyelvek A formális nyelvek elmélete az 1950-es évek végén, az 1960-as évek elején alakult ki a programozási nyelvek megalapozására és vizsgálatára. 3.1. Nyelvek és szavak De níció: Tetsz½oleges véges 6= ; halmazt ábécének nevezünk. A ábécé elemeit a bet½uinek (szimbólumainak) nevezzük. Példák: bool = f0; 1g, a Boole ábécé, lat = fa; b; c; : : : ; zg, a latin ábécé, keyboard = lat [ fa; B; : : : ; Z; t; >; <; (; ); : : : ;!g, klaviatúra nyelve, t a szóköz jel, m = f0; 1; 2; : : : ; m 1g, m 1 egész, az m alapú számrendszer ábécéje, logic = f0; 1; x; (; ); ^; _; :g, Boole formulák ábécéje. De níció: A ábécé jeleinek tetsz½oleges véges sorozatát feletti szónak nevezzük. A w szó jwj hossza a w-ben lév½o jelek száma. A w = x 1 x 2 : : : x n szót felfoghatjuk a n halmaz egy (x 1 ; x 2 ; : : : ; x n ) elemének is, amelyb½ol a zárójeleket és az elválasztójeleket elhagyjuk. A w = x 1 x 2 : : : x n szó hossza: jwj = n. A "szavakkal" különböz½o objektumokat reprezentálhatunk: számokat, képleteket, gráfokat és programokat. Például az x = x 1 x 2 : : : x n ; x i 2 bool (i = 1; 2; : : : ; n) szót az N (x) = P n i=1 2n i x i nemnegatív szám bináris el½oállításának tekinthetjük. FORMÁLIS NYELVEK 21

De níció: Jelöljön G = (V; E) egy irányított gráfot, amelyben V a csúcsok és E f(v i ; v j ) j v i ; v j 2 V; v i 6= v j g az élek halmaza. Legyen jv j = n a csúcsok száma. A gráf M G = [a ij ] n i;j=1 szomszédsági) mátrixát az 1; ha (vi ; v a ij = j ) 2 E 0; ha (v i ; v j ) =2 E el½oírással adjuk meg. Tekintsük az alábbi gráfot! adjacencia (v. v 1 v 2 v 3 v 4 A gráf adjacencia mátrixa 2 6 4 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 0 A mátrix f0; 1; #g ábécé feletti lehetséges szó reprezentációja pedig 3 7 5 : 0011#0011#0101#0000#: De níció: Az x = x 1 x 2 : : : x k 2 k és y = y 1 y k : : : y l 2 l szavak konkatenációján (egymás után írásán) az xy = x 1 x 2 : : : x k y 1 y k : : : y l 2 k+l szót értjük. Példa: x = 0aa1bb, y = 111b, = f0; 1; a; bg. xy = 0aa1bb111b A konkatenáció asszociatív: x (yz) = (xy) z: (3.1) Az üres szót "-al jelöljük. Ennek hossza j"j = 0 és tetsz½oleges x szóval konkatenálva visszaadja az x szót: x" = "x = x: De níció: A felett értelmezett összes szavak halmazát, beleértve az " üres szót is, jelöli. De níció: Legyen egy ábécé. Minden x 2 és i 1 egész számra legyen x 0 = " és x i = xx i 1. 22 FORMÁLIS NYELVEK

Példa: aabbaaaaaa = a 2 b 2 a 6 = a 2 b 2 (aa) 3. De níció: Legyen = fs 1 ; s 2 ; : : : ; s n g egy ábécé, n 1 és tegyük fel, hogy elemei (lineárisan) rendezettek, azaz s 1 < s 2 < < s n. A -on értelmezett lexikogra kus (kanonikus) rendezést a következ½o el½oírással de niáljuk: u < v, (juj < jvj) _ (juj = jvj ^ u = xs i u 0 ^ v = xs j v 0 ^ i < j) ; ahol x; u 0 ; v 0 2. A lexikogra kus rendezés segítségével megmutathatjuk, hogy megszámlálható (felsorolható). A felsorolás a következ½oképpen néz ki: s 1 ; s 2 ; : : : ; s n ; s 1 s 1 ; s 1 s 2 ; : : : ; s 1 s n ; : : : ; s n s 1 ; : : : ; s n s n ; Elve pedig az, hogy el½oször vesszük az 1 jel hosszúságú szavakat (az ábécé bet½uit), majd a 2 jel hosszúságú szavakat a lexikogra kus rendezés szerint, a 3 jel hosszúságú szavakat a lexikogra kus rendezés szerint és így tovább. Az összes k hosszúságú szó száma n elem½u ábécé esetén n k. Így egy x 2 szó, amelynek hossza ` a P` 1 k=1 nk + 1 és P` k=1 nk sorszámok között kerül sorra a fenti felsorolásban. Tehát felsorolható (megszámlálható). De níció: A tetsz½oleges L részhalmaza nyelv. Az L C = n L halmazt az L nyelv komplementumának nevezzük. L ; = ; az üres nyelv. L " = f"g az egyetlen üres szóból álló nyelv. De níció: Legyenek L 1 és L 2 nyelvek felett. Ekkor a két nyelv konkatenációja L 1 L 2 = fvw j v 2 L 1 és w 2 L 2 g : De níció: Legyen L nyelv, L 0 = L ", L i+1 = L i L ( i 1). Az L halmaz Kleene-féle lezárása L = [ i2n0 L i, pozitív lezárása pedig L + = [ i2n L i : Az L + nem tartalmazza az üres szót. Vegyük még észre, hogy a ábécé Kleene-féle lezárása. 3.2. Generatív nyelvtanok Most bevezetjük a generatív nyelvtan fogalmát, amely a T terminális és az N nemterminális jelek diszjunkt ábécéjéb½ol, egy kitüntetett nemterminális kezd½oszimbólumból és szavak átírási szabályainak R halmazából áll. A fejezetben négy nyelvtípust de niálunk a generatív nyelvtan fogalmának segítségével. A formális nyelvek elméletét programozási nyelvek interpretálására (elemzésére, felismerésére) használjuk. A programnyelvet (általában) több lépésben fordítjuk és értelmezzük. Ennek els½o GENERATíV NYELVTANOK 23

lépése a lexikális analízis, amelyben a jeleket lexikális egységekbe (tokenekbe) gy½ujtjük. Ezt a lépést tipikusan automatákkal (véges állapotú gépekkel) végzik. A fordítás második lépése a szintaktikai elemzés (parsing), amelyben a lexikális egységekhez (tokenekhez) a nyelvtan szabályainak egy sorozatát (derivációkat) rendelünk. De níció: A G = (N ; T ; s; R) rendszert generatív nyelvtannak nevezzük, ahol 1) N 6= ; véges halmaz, a nemterminális szimbólumok (változók) halmaza, 2) T 6= ; véges halmaz, a terminális szimbólumok halmaza, 3) N \ T = ;, 4) s 2 N a kezd½oszimbólum, 5) R olyan u! v ( u; v 2 (N [ T ) ) alakú átírási (helyettesítési) szabályok véges halmaza, ahol u tartalmaz legalább egy elemet N -b½ol. Az átírási szabályok R halmazát felfoghatjuk a + véges részhalmazaként, ahol = N [ T a teljes ábécé. Tehát az u! v átírási szabályt az (u; v) 2 R elempárral azonosítjuk. Példa: Legyen N = fsg, ahol s egyben a kezd½oszimbólum is, T = fa; bg a terminális jelek halmaza, R pedig a s! asb, s! ab alakú átírási szabályok halmaza. Az s kezd½ojelb½ol kiindulva a két átírási szabály ismételt alkalmazásával a k b k (k 1) alakú szavakat tudunk el½oállítani: s! asb! a (asb) b!! a k sb k! a k (ab) b k = a k+1 b k+1 : De níció: Legyen G = (N ; T ; s; R) generatív nyelvtan. Ha w 1 2 (N [ T ) +, w 1 = p 1 up 2 és R tartalmazza az u! v átírási szabályt, akkor w 1 -et helyettesíthetjük a w 2 = p 1 vp 2 szóval. Ebben az esetben azt mondjuk, hogy w 2 közvetlenül levezethet½o w 1 -b½ol G-ben (jelben w 1 ) G w 2 ). A v 2 (N [ T ) levezethet½o az u 2 (N [ T ) + szóból (jelben u ) G v), ha van olyan k egész szám és u 0 ; u 1 ; : : : ; u k 2 (N [ T ) szavak, hogy u = u 0 ) G u 1 ) G : : : ) G u k = v: Ezt a levezetés láncot k-hosszúságú derivációnak is nevezzük. Például s ) A ) aab ) aaabb ) aaabbb egy 4-hosszúságú deriválás. De níció: Legyen G = (N ; T ; s; R) generatív nyelvtan. A G nyelvtan által generált nyelven az L (G) = fw 2 T j s ) G wg nyelvet értjük. Az L (G) nyelv az összes olyan T -beli szóból áll, amely megkapható a kezd½oállapotból G-beli derivációval. Példa: G = (fsg ; fa; bg ; s; fs! asb; s! abg) esetén L (G) = fa n b n j n 1g : Példa: Legyen G 1 = (N 1 ; T 1 ; s; R 1 ), ahol N 1 = fs,b,cg, T 1 = fa,b,cg és R 1 a következ½o 24 FORMÁLIS NYELVEK

szabályokból áll: a) s! asbc d) ab! ab g) cc! cc b) s! abc e) bb! bb c) CB! BC f) bc! bc Tekintsük a következ½o levezetés láncokat: s! a(s)bc ) aab(cb)c ) a(ab)bcc ) aa(bb)cc ) aab(bc)c ) aabb(cc) ) aabbcc; illetve s! a(s)bc ) aa(s)bcbc ) aaab (CB) CBC ) aaabbc(cb)c ) aaabb(cb)cc ) ) aa(ab)bbccc ) aaa(bb)bccc ) aaab(bb)ccc ) aaabb(bc)cc ) ) aaabbb(cc)c ) aaabbbc(cc) ) aaabbbccc: Feladat: Igazoljuk, hogy L (G 1 ) = fa n b n c n j n 1g. A generatív nyelvtan fogalmának segítségével meg tudjuk fogalmazni függények kiszámítását a formális nyelvek keretén belül. De níció: Legyen adott egy G = (N ; T ; s; R) generatív nyelvtan és az f :! függvény ( = N [ T ). A G nyelvtan "kiszámítja" f-et, ha minden w; v 2 esetén a következ½o állítás igaz: sws ) G v akkor és csak akkor, ha v = f (w) : Egy! függvényt nyelvtanilag kiszámíthatónak nevezünk, ha létezik egy G nyelvtan, amely kiszámítja. A most megfogalmazott függvénykiszámítás koncepció nem határozza meg a helyettesítési szabályok sorrendjét. Markov rendszerben ez egyértelm½uvé tehet½o, de a kiszámítható függvények köre ugyanaz marad. 3.3. Generatív nyelvtanok osztályozása A generatív nyelvtanok következ½o osztályozását N. Chomsky vezette be és ezek egymáshoz való viszonyát Chomsky-féle hierarchiának nevezzük. De níció: A G = (N ; T ; s; R) generatív nyelvtan kifejezés struktúra, vagy 0-típusú, ha átírási szabályainak R halmazára nincs megszorítás. A 0-típusú nyelvtanok által generált nyelvek osztályát L 0 -al jelöljük De níció: A G = (N ; T ; s; R) generatív nyelvtan környezetfügg½o, vagy 1-típusú, ha minden (u; v) 2 R átírási szabályára teljesül, hogy v nem tartalmaz kevesebb karaktert mint u, azaz juj jvj. GENERATíV NYELVTANOK OSZTÁLYOZÁSA 25

A környezetfügg½o (1-típusú) nyelvtanok által generált nyelvek osztályát L 1 -el jelöljük és ezeket környezetfügg½o nyelveknek nevezzük. Feladat: Igazoljuk, hogy L (G 1 ) környezetfügg½o. De níció: A G = (N ; T ; s; R) generatív nyelvtan környezetfüggetlen, vagy 2-típusú, ha minden (u; v) 2 R átírási szabályára teljesül, hogy u 2 N. A környezetfüggetlen (2-típusú) nyelvtanok által generált nyelvek osztályát L 2 -vel jelöljük és környezetfüggetlen nyelveknek nevezzük. Példa: A G = (fs,ag ; fa,bg ; s; fs! asb; s! "g) nyelvtan környezetfüggetlen és az L (G) = fa n b n j n 0g nyelvet generálja. Példa: Tekintsük a G 3 nyelvtant, amelyet az alábbi terminális és nemterminális jelek és átírási szabályok de niálnak: a) s! cmcnc d) N! bnb b) M! ama e) N! c c) M! c Könnyen igazolható, hogy G 3 környezetfüggetlen és L (G 3 ) = fca n ca n cb m cb m c j n; m 0g. A környezetfüggetlen nyelvek számos programozási nyelv fontos tulajdonságait emelik ki. De níció: A G = (N ; T ; s; R) generatív nyelvtan reguláris, vagy 3-típusú, ha minden (u; v) 2 R átírási szabálya a! w vagy a! wb alakú, ahol a; b 2 N és w 2 T. Ez azt jelenti, hogy az átírási szabályok jobb oldala vagy terminális elem, vagy egy terminális elem amelyet egy nem terminális elem követ. A reguláris (3-típusú) nyelvtanok által generált nyelveket reguláris nyelveknek nevezzük és ezek osztályát L 3 -al jelöljük. Példa: Legyen G 4 = (N 4 ; T 4 ; s; R 4 ), ahol N 4 = fs; A; Bg, T 4 = f0; 1g és R 4 -et az alábbi átírási szabályok de niálják: a) s! 0A d) B! 0A b) s! 0 e) B! 0 c) A! 1B Ez a nyelvtan reguláris. Az átírási szabályokat alkalmazva a következ½o derivációkat kaphatjuk: s! 0, s! 0A! 01B! 010, s! 0A! 01B! 010A! 0101B! 01010, stb. Eszerint a generált nyelv (01) k 0 alakú szavakból áll, hol k n 0. o Feladat: Igazoljuk formálisan is, hogy L (G 4 ) = (01) k 0 j k 0. Feladat: Legyen G = (fs; a; bg ; f1g ; s; R), ahol R = fs ) 1a; a ) 1b; b ) 1a; a ) 1; s ) "g. Igazoljuk, hogy G reguláris és L (G) = f1 2n j n 0g! Feladat: Legyen G = (fsg ; fa; bg ; s; R), ahol R elemei: s ) asb, s ) ss, s ) ". Mi az L (G)? Azonosítsuk a-t a balzárójellel, b-t pedig a jobb zárójellel! A programozási nyelvek nagy része környezetfüggetlen. A reguláris nyelveknek fontos szerepe van a lexikális analízisnél. 26 FORMÁLIS NYELVEK

A Chomsky-féle hierarchia azt jelenti, hogy a most de niált négy generatív nyelvosztályra fennáll az L 0 L 1 L 2 L 3 tartalmazási reláció. Gra kusan ábrázolva: kifejezés struktúra (L 0 ) nyelvek környezetfüggő (L 1 ) nyelvek környezetfüggetlen (L 2 ) nyelvek reguláris (L 3 ) nyelvek Generatív nyelvek Chomsky-féle osztályozása A négy nyelvosztályba tartozó nyelveket különböz½o tulajdonságú (erej½u) gépekkel (automatákkal, Turing gépekkel, stb.) lehet felismerni. Ezeket a következ½okben tárgyaljuk. GENERATíV NYELVTANOK OSZTÁLYOZÁSA 27

28 FORMÁLIS NYELVEK

4. fejezet Algoritmusok, kiszámítható függvények és döntési problémák Az algoritmus, a kiszámíthatóság és eldönthet½oség alapvet½o, egymással összefügg½o fogalmak. Mi ezeket a fogalmakat részletesen a formális nyelvek, a leképezések (relációk) és a Turing gépek segítségével fogjuk tárgyalni. Muhammad ibn Musa al-khwarizmi, IX. század eleje Az algoritmus szó a híres középkori "arab" matematikus Muhammad ibn Musa al-khwarizmi nevéb½ol ered, aki 800. el½ott született Horezm területén (az Amu-Darja mentén, kb. a mai Türkmenisztán és Üzbegisztán), és legalább 847-ig élt. A Bagdadi "Bölcsesség Háza" egyetemen tanított és 825 körül írta a f½o munkáját, amelynek címe "Al-jabr wa l muqabala" (az algebra szó innen ered) és egy könyvet az 1,2,3,4,5,6,7,8,9 és 0 jeleken alapuló hindu-arab számokról. Az utóbbi könyv eredeti arab kézirata elveszett, de ennek latin fordítása "Algoritmi de numero Indorum" (Al-Khwarizmi a Hindu számítási m½uvészetr½ol) fennmaradt és bevezette az arab számokat Európába. A 0 szám els½o el½ofordulása is valószín½uleg neki köszönhet½o. A könyvben számítási szabályok vannak leírva, amelyeket utána neveztek el (Algoritmi dicit.../al-khwarizmi ezt mondja...). Igen sokáig algoritmus alatt a ma már "egyszer½u" aritmetikai számolási szabályokat értették. Most a részletek pontos speci kálása nélkül feltesszük, hogy az algoritmus egy leképezés a következ½o tulajdonságokal. ALGORITMUSOK, KISZÁMíTHATÓ FÜGGVÉNYEK ÉS DÖNTÉSI PROBLÉMÁK 29

De níció: Az A algoritmus (program) egy A : 1! 2 leképezés a 1 és 2 ábécék felett a következ½o tulajdonságokkal: (i) Az inputok 1 feletti szavak, (ii) Az outputok 2 feletti szavak, (iii) A minden inputhoz egyértelm½uen rendel hozzá egy outputot. Jelölje az A algoritmus inputját x 2 1, az outputját pedig A (x) 2 2. De níció: Az A; B : 1! 2 algoritmusokat (programokat) ekvivalensnek nevezzük, ha A (x) = B (x) minden x 2 1 esetén. De níció: Legyen 1 és 2 két ábécé. Az A algoritmus kiszámítja az f : 1! 2 függvényt, ha minden x 2 1 esetén A (x) = f (x). De níció: Egy adott ábécéhez és L nyelvhez tartozó (; L) döntési probléma alatt azt értjük, hogy minden x 2 P esetén el kell dönteni, hogy x 2 L vagy x =2 L. Az A algoritmus a (; L) döntési problémát megoldja vagy felismeri, ha minden x 2 esetén: 1, ha x 2 L; A (x) = 0, ha x =2 L. A döntési probléma tehát egy speciális függvény kiszámítási probléma, ahol az algoritmus az L nyelv un. karakterisztikus függvényét számítja ki. Példa: Prímtesztelés: ( bool ; fx 2 ( bool ) j N (x) prímszámg) ; ahol N (x) az x szóhoz rendelt bináris szám. Egy gráf Hamilton körén olyan (irányított) utat értünk, amely a gráf minden csúcsát egyszer érinti. Példa: Hamilton kör probléma (; HC), ahol = f0; 1; #g és Egy Boole formula, pl. HC = fx 2 j x Hamilton kört tartalmazg : (u 1 _ :u 3 _ :u 4 ) ^ (:u 1 _ u 2 _ :u 4 ) kielégíthet½o, ha nem azonosan 0 a lehetséges inputokra. Példa: Kielégíthet½oségi probléma ( logic ; SAT ) : SAT = fx 2 ( logic ) j x egy kielégíthet½o Boole formulag : De níció: Ha egy L nyelvhez létezik egy algoritmus, amely L-et felismeri, akkor az L nyelvet rekurzívnak nevezzük. A fenti de níciók alapján gondolhatjuk, hogy függvények kiszámítása a legáltalánosabb számítási probléma. Ez azonban nem így van. 30 ALGORITMUSOK, KISZÁMíTHATÓ FÜGGVÉNYEK ÉS DÖNTÉSI PROBLÉMÁK

De níció: Legyen és két ábécé és legyen R egy reláció. Az A algoritmus kiszámítja R-et, ha minden x 2 esetén (x; A (x)) 2 R. Példa: Input: x 2 ( bool ), Output: y 2 ( bool ), ahol y értékét a következ½oképpen határozzuk meg. Ha N (x) prímszám, akkor y = 1. Ha N (x) összetett szám, akkor y az N (x) egynél nagyobb akármelyik osztója lehet. A megfelel½o reláció: R = f(x; y) j y = 1, ha N (x) prím, y > 1 ^ (y j N (x))g : Az el½oz½o de nícióban szerepl½o relációval nemdeterminisztikus számítási feladatokat írunk le. Az (x; A (x)) 2 R feltétel azt jelenti, hogy A (x) 2 R (x). Ha R valódi reláció, azaz jr (x)j > 1 legalább egy x 2 D R elemre, akkor az adott x esetén az algoritmus eredménye tetsz½oleges A (x) 2 R (x) elem lehet. Azaz ugyanarra az inputra más és más eredményeket kaphatuk. A determinisztikus esetben ez nem lehetséges, mert ugyanarra az inputra mindig ugyanazt a kimenetet kapjuk. Tekintve, hogy a nemdeterminisztikus számítási modellek fontos szerepet játszanak a bonyolultságelméletben, a függelékben röviden ismertetjük a programozás alapfogalmainak egy nemdeterminisztikus, relációelméleti leírását is. ALGORITMUSOK, KISZÁMíTHATÓ FÜGGVÉNYEK ÉS DÖNTÉSI PROBLÉMÁK 31

32 ALGORITMUSOK, KISZÁMíTHATÓ FÜGGVÉNYEK ÉS DÖNTÉSI PROBLÉMÁK

5. fejezet Algoritmusok elemzése Algoritmikusan megoldható feladatokkal és megoldó algoritmusaik elemzésével foglalkozunk. A felvet½od½o kérdések: - Adott feladat nehézségének (bonyolultságának) jellemzése. - Több módszer (algoritmus) esetén a jobbik (legjobb) kiválasztása. A feladatok nehézségét a megoldási költséggel és a szükséges er½oforrások mennyiségének vizsgálatával jellemezzük. Az alapvet½o jellemz½ok: - számítási id½o (általában aritmetikai vagy logikai m½uveletek számában), - tárigény. Egy feladat nehézségét sok esetben a megoldás "költségére" adott fels½o, illetve alsó korláttal tudjuk jellemezni. A fels½o korlátok jobb, gyorsabb algoritmusok keresését inspirálják, míg az alsó korlátok (amiknél nincs gyorsabb algoritmus) a feladat nehézségét jellemzik. A feladatok bonyolultsága és az ½oket megoldó algoritmusok hatékonysága általában összefüggést mutat. Adott feladatot megoldó algoritmusok között a hatékonyabbat csak az algoritmusok elemzésével tudjuk kiválasztani. Konkrét algoritmusok elemzésénél a cél az adott algoritmusok hatékonyságának (költségének és er½oforrásigényének) vizsgálata. Megjegyezzük, hogy egy algoritmus hatékonyságára vonatkozó információ egyúttal a megoldandó feladat nehézségét is jellemzi, vagy jellemezheti. 5.0.1. Az oszd meg és uralkodj elv A oszd meg és uralkodj elv egy egyszer½u és hatékony módszer problémák megoldására. Az elv alapötlete: - Szétosztjuk a problémát kisebb rész problémákra. - Megoldjuk a kisebb részproblémákat. - A kisebb részproblémák megoldásaiból összerakjuk az eredeti probléma megoldását. Tekintsük az elvet leíró alábbi általános algoritmust! DivideAndConquer(data,N,solution) data a set of input values ALGORITMUSOK ELEMZÉSE 33

N the number of values in the set solution the solution to this problem if (N SizeLimit) then DirectSolution( data, N, solution ) else DivideInput( data, N, smallersets, smallersizes, numbersmaller ) for i = 1 to numbersmaller do DivideAndConquer(smallerSets[i], smallersizes[i], smallsolution[i]) end for CombineSolutions(smallSolution, numbersmaller, solution) end if Az algoritmus el½oször azt nézi meg, hogy a probléma méret elég kicsi-e ahhoz, hogy egy direkt algoritmussal (DirectSolution) oldjuk meg. Ha probléma túl nagy, akkor el½oször az inputot felosztó rutint (DivideInput) hívja meg, hogy az input adatokat (feladatot) kisebb részekre bontsa. Ezek méretei lehetnek egyenl½ok, vagy eltér½oek is. Az algoritmus ezután rekurzívan meghívásra kerül a kisebb input adathalmazokon és ezen hívások eredményeit f½uzi össze a CombineSolutions rutin. A fenti oszd meg és uralkodj algoritmus hatékonyságát (bonyolultságát) a következ½oképpen írhatjuk le: DIR(N), DAC(N)= ha N SizeLimit DIV(N)+ P numbersmaller i=1 DAC(smallerSizes[i])+COM(N), ha N > SizeLimit ahol DAC a DivideAnd Conquer algoritmus bonyolultsága, DIR a DirectSolution bonyolultsága, DIV a DivideInput bonyolultsága, COM a CombineSolutions bonyolultsága. A rekurzíó megoldásához szükségünk van a következ½o szakaszban található mester tételre. 5.0.2. A mester tétel A mester tétel segítségével meghatározhatjuk az oszd meg és uralkodj algoritmus bonyolultságát abban az esetben, amikor az input adatokat egyenl½o részre osztjuk. Tétel: Ha n a b szám hatványa, a; b; c; d konstansok, a 1, b > 1, akkor a d; ha n = 1 T (n) = (5.1) at (n=b) + cn; ha n > 1 rekurzió megoldása 8 < O (n) ; ha a < b T (n) = O (n log n) ; ha a = b : O n log a b, ha a > b. 34 ALGORITMUSOK ELEMZÉSE (5.2)

Bizonyítás: Könnyen látható, hogy n T (n) = at + cn b n = a at + c n + cn b 2 b n = a 2 T + acn + cn b 2 b n = a at 2 + c n + acn + cn b 3 b 2 b n = a 3 T + a2 cn + acn + cn b 3 b 2 b Minthogy azért Ha a < b, akkor a=b < 1, Ezért T (n) < dn log b a + cbn= (b Ha a > b, akkor. n Xi 1 a j = a i T + cn b i b = a log b n T (1) + cn j=0 log b n 1 X j=0 a b j : a log b n = b log b a log b n = b log b n log b a = n log b a ; T (n) = dn log b a + cn log b n 1 X j=0 log b n 1 X j=0 a j X 1 a j < = b b j=0 a b j : b b a : a) = O (n). (a < b ) log b a < 1!). Ha a = b, akkor log b n X T (n) = dn + cn 1 j = dn + cn (1 + log b n) = O (n log n) : log b n 1 X j=0 a b j=0 j = (a=b) log b n 1 (a=b) 1 = nlog b a 1 1 (a=b) 1 = O nlog b a 1 : Tehát ekkor T (n) = dn + cno n log b a Példák: 1 = O n log b a. ALGORITMUSOK ELEMZÉSE 35

Ha T (n) = 2T (n=3) + cn, akkor a = 2 < b = 3 miatt T (n) = O (n). Ha T (n) = 2T (n=2) + cn, akkor a = b = 2 miatt T (n) = O (n log n). Ha T (n) = 4T (n=2) + cn, akkor a = 4 > b = 2 miatt T (n) = O n log 2 4 = O (n 2 ). Feladat: Adjuk meg a következ½o rekurziók megoldását a mester tétellel, illetve jelezzük, ha ez nem alkalmazható: a) T (n) = 2T (n=2) + n 2 ; b) T (n) = 4T (n=2) + n 2 ; c) T (n) = T (n=2) + 2 n ; d) T (n) = 2 n T (n=2) + n n ; e) T (n) = 16T (n=4) + n; f) T (n) = 2T (n=2) + n log n; g) T (n) = 2T (n=2) + n= log n; h) T (n) = 2T (n=4) + n 0:51 ; i) T (n) = 0:5T (n=2) + 1=n. 5.1. Keresési, rendezési és kiválasztási feladatok A mindennapi gyakorlatban is fontos keresési, kiválasztási és rendezési feladatokkal foglalkozunk néhány alapvet½o esetben. 5.1.1. Keresési feladatok A keresési feladaton azt értjük, hogy egy listában (vagy tömbben) egy adott érték½u elemet (target) keresünk. A lista (tömb) lehet rendezetlen, vagy rendezett. A szekvenciális és a bináris keresés algoritmusát elemezzük. Ha a lista elemei rendezetlenek, akkor a lista elemeit szekvenciálisan összehasonlítjuk az adott érték½u elemmel. A szekvenciális keresés algoritmusa: SequentialSearch(list,target,N) list the elements to be searched target the value being searched for N the number of elements in the list for i = 1 to N do if (target = list[i]) 36 ALGORITMUSOK ELEMZÉSE

return i end if end for return 0 A legjobb eset, ha a keresett elem (target) az els½o elem, a legrosszabb pedig az, ha az utolsó N-edik elem. Tehát az összehasonlítások száma (esetünkben a számítási költség) 1 és N közé esik. Ha feltesszük, hogy az adott tulajdonságú elem azonos 1=N valószín½uséggel lehet a lista bármelyik helyén, akkor a keresés átlagos költsége a következ½oképpen határozható meg. Ha a keresett elem az i-edik helyen van, akkor i összehasonlítások költsége. Az átlagos költség a költségek várható értéke: A (N) = NX i=1 i N = 1 N NX i = 1 N i=1 N (N + 1) 2 = N + 1 : 2 Ha feltesszük, hogy a keresett elem nincs a listán, akkor N + 1 lehet½oségünk van. Feltéve, hogy minden eset egyenl½oen valószín½u, akkor ezek valószín½usége 1= (N + 1) és az átlagos költség a következ½o lesz:! NX i A (N) = + N N + 1 N + 1 = 1 N (N + 1) + N N + 1 2 i=1 = N 2 + N N + 1 = N + 1 + N 1 2 2 (N + 1) : Látható, hogy az újabb feltevésünk módosította (növelte) az átlagos költséget. Ha N! 1, N 1 akkor! 1 és ezért 2(N+1) 2 A (N) N + 1 + 1 2 2 : Nagy N-re ez nem jelent½os növekedés. A következ½okben tegyük fel, hogy a listánk növekv½oen rendezett és vizsgáljuk a bináris keresés algoritmusát, amelynek alapötlete, hogy felezzük a listát, a középs½o elemmel összehasonlítjuk a keresett elemet, majd aszerint, hogy milyen viszonyban állnak (<, =, >) választjuk a lista els½o felét, a kilépést, vagy a lista második felét. Ezt ismételjük a kapott részlistán, amíg az el nem fogy. Egy lehetséges program a következ½o BinarySearch(list,target,N) list the elements to be searched target the value being searched for N the number of elements in the list start = 1 end = N while start end do middle = d(start + end)=2e KERESÉSI, RENDEZÉSI ÉS KIVÁLASZTÁSI FELADATOK 37

if list[middle]<target start = middle+1 if list[middle]=target return middle if list[middle]>target end = middle 1 end while return 0 Az eljárás döntési fája 7 elem½u lista esetén: list[4] list[2] list[6] list[1] list[3] list[5] list[7] A döntési fa csomópontjaiban lév½o elemeket hasonlítja össze az algoritmus a target értékével az egyes iterációkban. Ha a target értéke kisebb mint a csomóponti elem, akkor a számítás a baloldali részfán folyik tovább, ha pedig nagyobb, akkor a jobboldali részfán. A legrosszabb eset bonyolultságot vizsgáljuk. Az algoritmus felezési jellege miatt tegyük fel, hogy N = 2 k 1 valamilyen k 1 értékre. Az els½o felezésben a középs½o elem indexe 1 + 2 k 1 =2 = 2 k 1. Ezért az els½o iterációban keletkez½o részlista hossza 2 k 1 1. Hasonló okfejtéssel a második iterációban keletkez½o részlista hossza 2 k 2 1, és igy tovább. A j-edik iteráció részlistájának hossza 2 k j 1. Az iterációs ciklus legkés½obb a k-adik iterációban fejez½odik be. Ez k öszehasonlítást jelent, ahol k = log 2 (N + 1) s log 2 N. Az átlagos bonyolultságot vizsgáljuk az N = 2 k 1 elemszámra azon feltevés mellett, hogy a target a listában van és ott egyenl½o 1=N valószín½uséggel fordulhat el½o bárhol. A döntési fa i-edik szintjén lev½o elemek száma 2 i 1 és a szintek száma k. Ha a keresett elem az i-edik szinten van, akkor i összehasonlítást végzünk a megtalálásához. Ezért az átlagos számítási költség: 0 1 kx X2 i 1 A (N) = @ i 1 A = 1 kx i2 i 1 : N N Vegyük észre, hogy x 6= 1 esetén i=1 j=1 1 + 2x + + kx k 1 = 1 + x + x 2 + + x k 0 x k+1 0 1 = x 1 = (k + 1) xk (x 1) x k+1 1 (x 1) 2 i=1 = kxk+1 (k + 1) x k + 1 (x 1) 2 : 38 ALGORITMUSOK ELEMZÉSE

Az x = 2 értéket ebbe behelyettesítve kapjuk, hogy kx i2 i 1 = k2 k+1 (k + 1) 2 k + 1 = (k 1) 2 k + 1: i=1 Tehát az átlagos számítási költség átírható az A (N) = 1 (k 1) 2 k + 1 = (log 2 (N + 1) 1) (N + 1) + 1 N N = log 2 (N + 1) 1 + log 2 (N + 1) N alakba. Minthogy log 2 (N + 1) =N! 0, az átlagos számítási költségre fennáll, hogy A (N) log 2 (N + 1) 1; ami 1-el kevesebb mint a legrosszabb eset log 2 (N + 1) költsége. Feladat: Mi a bináris keresés átlagos bonyolultsága, ha megengedjük, hogy a keresett elem ne legyen a listában és minden eset (elhelyezkedés) valószín½usége azonosan 1= (N + 1)? Feladat: Mi a bináris keresés legrosszabb eset bonyolultsága, ha N 6= 2 k 1? Feladat: Mi a bináris keresés átlagos bonyolultsága, ha a keresett elem a listában van, minden eset (elhelyezkedés) valószín½usége azonosan 1=N és N 6= 2 k 1? Feladat: Mi a bináris keresés átlagos bonyolultsága, ha a keresett elem esetleg nincs a listában, minden eset (elhelyezkedés) valószín½usége azonosan 1= (N + 1) és N 6= 2 k 1? 5.1.2. Rendezési feladatok Két fontos rendezési algoritmust elemzünk, amelyek az oszd meg és uralkodj elv tipikus alkalmazásai. Összefésül½o rendezés Az algoritmus alapja az összefésülés (merge). Tegyük fel, hogy adottak az A [1 : k] és B [1 : l] növekv½oen rendezett tömbök és tartalmukat a C [1 : k + l] tömbben kívánjuk tárolni, rendezetten. A két rendezett tömb összefésülési algoritmusa a következ½o: 1. C [1]-be az A [1] és B [1] közül a kisebbiket rakjuk, 2. Ha az A [1 : i] és B [1 : j] résztömböket már feldolgoztuk, akkor a következ½o elem: C [i + j + 1] = min fa [i + 1] ; B [j + 1]g : Az összefésülés maximális költsége k + l 1 összehasonlítás és k + l mozgatás. A legkisebb költség: min fk; lg összehasonlítás (Miért?). KERESÉSI, RENDEZÉSI ÉS KIVÁLASZTÁSI FELADATOK 39

Legyen az A [1 : n] tömb rendezetlen. Az összefésül½o rendezés (msort) alapelve: rendezzük a tömb els½o és második felét külön külön, majd ezek tartalmát fésüljük össze és használjunk rekurziót! function msort (x; y) comment sorts A [x::y] if y x 1 then return(a) else return(merge(msort x; x+y 2 ; msort x+y 2 + 1; y ) Legyen T (n) az összefésül½o rendezés költsége (összehasonlítások száma) n hosszúságú tömb esetén és tegyük fel, hogy n = 2 k alakú. Az n=2 hosszúságú rendezett tömbök összefésülése n 1 összehasonlítás. Ezért az algoritmus költségére fennáll, hogy T (n) = 1; ha n 1 2T (n=2) + n 1; egyébként A mester tétel alapján T (n) = O (n log n) összehasonlítás az összefésül½o rendezés költsége. A pontosabb eredmény: n n T (n) = 2T + n 1 = 2 2 T 2 2 2 n n = 2 3 T + 2 2 1 2 3 2 2 n = 2 i T + 2 i = 2 k T (1) + ix j=1 kx j=1 n + 2 2 n + 2 2 n 2 j 1 1 + n 1 2 j 1 1 + n 1 1 + n 1 n 2 j 1 + n 1 = 2n + kn 1 = 2n + kn 1 2 k 1 = n log 2 n + n: Tehát az összefésül½o rendezés legrosszabb eset bonyolultsága n hosszúságú tömb esetén O (n log n) összehasonlítás. kx j=1 2 j 1 Gyorsrendezés A gyorsrendezés vagy quicksort algoritmust C.A.R. Hoare publikálta 1962-ben és egyike a 20. század tíz legfontosabbnak tartott algoritmusának (lásd B. A. Cipra: The Best of the 20th Century: Editors Name Top 10 Algorithms, SIAM News, Volume 33, Number 4). 40 ALGORITMUSOK ELEMZÉSE

Sir Tony Hoare Az algoritmusnak három eleme van: - felosztás, - uralkodás, - összevonás. A felosztásban az algoritmus kiválaszt egy A (q) elemet (pivot elemet vagy ½orszemet) és felosztja az fa (p) ; : : : ; A (r)g (p r) tömböt két összefügg½o (esetleg üres) fa (p) ; : : : ; A (q 1)g ; fa (q + 1) ; : : : ; A (r)g résztömbre úgy, hogy a baloldali résztömb elemei kisebbek, vagy kisebb-egyenl½ok A (q)-nál, a jobboldali résztömb elemei pedig nagyobbak A (q)-nál. A két résztömb elemei nem rendezettek. Az q index (½orszem, pivot elem) számítása a felosztó eljárás része. Az uralkodás fázisában az fa (p) ; : : : ; A (q 1)g és fa (q + 1) ; : : : ; A (r)g résztömböket a felosztás (gyorsrendezés) rekurzív hívásával rendezzük. Az összevonás fázisa: Mivel rekurzív hivások az egyelem½u résztömböknél állnak le és résztömböket helyben rendeztük, az eredményül kapott egész fa (p) ; : : : ; A (r)g tömb rendezett lesz. Az algoritmus leírása: gyorsrendezés (A; p; r) if p < r then q =feloszt(a; p; r) gyorsrendezés(a; p; q 1) gyorsrendezés(a; q + 1; r) A teljes tömb rendezése: gyorsrendezés(a; 1; hossz (A)). A feloszt eljárás kiválasztja az ½orszemet (esetünkben x = A (r)), majd helyben átrendezi az fa (p) ; : : : ; A (r)g résztömböt. feloszt (A; p; r) x = A (r) KERESÉSI, RENDEZÉSI ÉS KIVÁLASZTÁSI FELADATOK 41