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

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

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.

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.

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

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

Dr. Schuster György február / 32

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

Nagyordó, Omega, Theta, Kisordó

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Programozási módszertan. Függvények rekurzív megadása "Oszd meg és uralkodj" elv, helyettesítő módszer, rekurziós fa módszer, mester módszer

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

14. Mediánok és rendezett minták

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Algoritmusok helyességének bizonyítása. A Floyd-módszer

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

Bevezetés az informatikába

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

Kiterjesztések sek szemantikája

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

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

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

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.

Egyszerű programozási tételek

A valós számok halmaza

ELEMI PROGRAMOZÁSI TÉTELEK

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

A sorozat fogalma. függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet. az értékkészlet a komplex számok halmaza, akkor komplex

1. ábra. Számláló rendezés

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

Diszkrét Irányítások tervezése. Heurisztika Dr. Bécsi Tamás

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Számjegyes vagy radix rendezés

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

PROGRAMOZÁSI TÉTELEK

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

KOVÁCS BÉLA, MATEMATIKA I.

Térinformatikai algoritmusok Elemi algoritmusok

Algoritmuselmélet 1. előadás

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Térinformatikai algoritmusok Elemi algoritmusok

Ordó, omega, theta, rekurzió :15 11:45. Megoldás. A nagyságrendi sorra tekintve nyilvánvalóan igaz pl., hogy: 1

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Számláló rendezés. Példa

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Diszkrét matematika I.

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

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

Analízis előadás és gyakorlat vázlat

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

Logika és informatikai alkalmazásai kiskérdések február Mikor mondjuk, hogy az F formula a G-nek részformulája?

Programozási tételek. Dr. Iványi Péter

6. ELŐADÁS DIFFERENCIÁLSZÁMÍTÁS II. DIFFERENCIÁLÁSI SZABÁLYOK. BSc Matematika I. BGRMA1HNND, BGRMA1HNNC

ismertetem, hogy milyen probléma vizsgálatában jelent meg ez az eredmény. A kérdés a következő: Mikor mondhatjuk azt, hogy bizonyos események közül

Algoritmizálás, adatmodellezés tanítása 1. előadás

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

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

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

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

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

Diszkrét matematika I.

Hatékonyság 1. előadás

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Online algoritmusok. Algoritmusok és bonyolultságuk. Horváth Bálint március 30. Horváth Bálint Online algoritmusok március 30.

Diszkrét matematika I.

Bevezetés a programozásba. 5. Előadás: Tömbök

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Gyakorló feladatok ZH-ra

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Analízis I. Vizsgatételsor

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Boros Zoltán február

ÖSSZEVONT ÓRÁK A MÁSIK CSOPORTTAL. tartósság, megerősítés, visszacsatolás, differenciálás, rendszerezés. SZÁMTANI ÉS MÉRTANI SOROZATOK (25 óra)

Programozási segédlet

Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Algoritmusok és adatszerkezetek II.

Tuesday, March 6, 12. Hasító táblázatok

7. előadás. Gyorsrendezés, rendezés lineáris lépésszámmal. Adatszerkezetek és algoritmusok előadás március 6.

Algoritmusok bonyolultsága

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Algoritmizálás és adatmodellezés tanítása 2. előadás

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

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

Algoritmizálás, adatmodellezés tanítása 6. előadás

Algoritmuselmélet 1. előadás

Analízis I. beugró vizsgakérdések

Programkonstrukciók A programkonstrukciók programfüggvényei Levezetési szabályok. 6. előadás. Programozás-elmélet. Programozás-elmélet 6.

Számítógép hálózatok, osztott rendszerek 2009

Adatszerkezetek I. 1. előadás

1000 forintos adósságunkat, de csak 600 forintunk van. Egyetlen lehetőségünk, hogy a

Átírás:

1. Alapfogalmak 1.1. Algoritmus Az algoritmus olyan elemi műveletekből kompozíciós szabályok szerint felépített összetett művelet, amelyet megadott feltételt teljesítő bemeneti adatra végrehajtva, a megkívánt kimeneti adatot eredményezi. Program = algoritmus leírása adott programozási nyelven. 1.2. Számítási probléma A számítási probléma bemenet/kimenet feltételpárral meghatározott követelmény. Azt írja elő, hogy a bemeneti feltételt teljesítő adatra a kimeneti feltételt teljesítő adatot kell kiszámítani. Probléma esete: egy olyan (esetleg összetett) adat, amely teljesíti a bemeneti feltételt. Például, a rendezési probléma a következőt jelenti. Bemenet: Azonos típusú adatok H = {a 1,...,a n halmaza, amelyeken értelmezett egy lineáris rendezési reláció. Kimenet: A H halmaz elemeinek egy rendezéstartó felsorolása, tehát olyan b 1,...,b n sorozat, amelyre b 1 b 2... b n, és H = {b 1,...,b n. 1.3. 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. {BA{K Algoritmus helyessége. Az A algoritmus helyes a {BA{K specifikációra nézve, ha minden X bemeneti adatra, amelyre teljesül a B bemeneti feltétel, az algoritmus végrehajtása véges sok elemi művelet végrehajtása után befejeződik, és a keletkezett kimeneti adatra teljesül a K kimeneti feltétel. Például, a rendezési probléma specifikációjában a B bemeneti feltétel azt írja elő, hogy a bemeneti halmaz elemein értelmezett a lineáris rendezési reláció. A kimeneti feltétel pedig a következő formulával adható meg: (H = {b 1,...,b n ) (b i b i+1,i = 1,...,n 1) Megjegyzés. 1. Ugyanazon bemeneti adatra több olyan kimeneti adat is lehet, amelyre a specifikáció igaz. 2. A kimeneti feltételben hivatkozhatunk bemeneti adatra, illetve bemeneti adatot tartalmazó változóra is. A kimeneti formulában az x változónak a művelet előtti értékére a Pre(x) kifejezéssel hivatkozunk. Pl. a CSERE művelet, amelytől azt várjuk el, hogy az x és y változó tartalmát kicserélje, a következő specifikációval adható meg: {Igaz CSERE {x = Pre(y) y = Pre(x). 1.4. Algoritmusok futási ideje Legyen A az e 1,,e m elemi műveletekből felépített algoritmus, és jelölje t i az e i művelet futási idejét (konkrét, vagy hipotetikus gépen). A t i futási idő függhet az e i művelet argumentumaitól. A továbbiakban feltételezzük, hogy minden e i elemi művelet futási ideje c i konstans. Adott x bemenetre jelölje T (A,x) az A algoritmus tényleges futási idejét, ami az x bemeneti adatra ténylegesen végrehajtott elemi műveletek futási idejének az összege. Jelölje x az x bemeneti adat méretét. Ez a méret összetett adat (pl. halmaz, vagy sorozat) esetén általában az adatok száma. Nem összetett adat esetén pedig általában az adat értéke. Az e i elemi műveletek t i futási ideje és az x méret függvény együttesen adja a bonyolultsági mértéket. Algoritmusnak más költsége is van, nevezetesen a memóriaigény, és elosztott algoritmusok esetén fontos a kommunikációs költség is. Legjobb eset T l j (A,n) = min{t (A,x) : x = n Legrosszabb eset T lr (A,n) = max{t (A,x) : x = n 1

Átlagos eset Jelölje Pr(x) annak valószínűségét, hogy x bemeneti adata lesz az A algoritmusnak. T a (A,n) = Pr(x)T (A,x) x =n 1.5. üggvények növekedési rendje, aszimptotikus jelölések O-jelölés O(g(n)) = { f (n) : ( c,n 0 0)( n n 0 )(0 f (n) cg(n)) f (n) = O(g(n)) jelentése: f (n) O(g(n)) c g(n) f(n) n0 1. ábra. f (n) = O(g(n)) Ω-jelölés Θ-jelölés Ω(g(n)) = { f (n) : ( c,n 0 0)( n n 0 )(0 cg(n) f (n)) f(n) c g(n) n0 2. ábra. f (n) = Ω(g(n)) Θ(g(n)) = { f (n) : ( c 1,c 2,n 0 0)( n n 0 )(0 c 1 g(n) f (n) c 2 g(n)) 2

c2 g(n) f(n) c1 g(n) n0 3. ábra. f (n) = Θ(g(n)) Algoritmusok futási idejének elemzésénél előforduló legfontosabb függvényosztályok: Logaritmikus - O(lg n) Lineáris - O(n) n-log-n - O(n lgn) Négyzetes - O(n 2 ) Köbös - O(n 3 ) Polinomiális - O( k i=0 a in i )(a k > 0) Exponenciális - O(2 n ) Minden f (n) és g(n) függvényre f (n) = Θ(g(n)) akkor és csak akkor ha f (n) = O(g(n)) és f (n) = Ω(g(n)). o-jelölés o(g(n)) = { f (n) : ( c > 0)( n 0 > 0)( n n 0 )(0 f (n) < cg(n)). Következmény: f (n) lim n g(n) = 0. Például, 2n = o(n 2 ), de 2n 2 o(n 2 ). ω-jelölés ω(g(n)) = { f (n) : ( c > 0)( n 0 > 0)( n n 0 )(0 cg(n) < f (n)) Például, n 2 /2 = ω(n), de n 2 /2 ω(n 2 ). Az f (n) = ω(g(n)) relációból következik, hogy f (n) lim n g(n) = 1.6. Aszimptotikus egyenlőségek és egyenlőtlenségek Tranzitivitás: f (n) = Θ(g(n)) és g(n) = Θ(h(n)) akkor f (n) = Θ(h(n)), f (n) = O(g(n)) és g(n) = O(h(n)) akkor f (n) = O(h(n)), f (n) = Ω(g(n)) és g(n) = Ω(h(n)) akkor f (n) = Ω(h(n)), f (n) = o(g(n)) és g(n) = o(h(n)) akkor f (n) = o(h(n)), f (n) = ω(g(n)) és g(n) = ω(h(n)) akkor f (n) = ω(h(n)). 3

Reflexivitás: Szimmetria: Antiszimmetria: f (n) = Θ( f (n)), f (n) = O( f (n)), f (n) = Ω( f (n)). f (n) = Θ(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)), f (n) = o(g(n)) akkor és csak akkor ha g(n) = ω( f (n)). Példa algoritmus futási idejének számítására. Probléma: Keresés véges halmazból származó, egész számokból álló rendezetlen sorozatban. Bemenet: a 0,...,a n 1 sorozat és x keresett elem. Kimenet: Olyan i hogy 0 i < n és x = a i vagy i = n és akkor ( i)(0 i < n x a i ) public static int Keres(int[] A, int x){ int i=0; //c1 while (i<a.length && A[i]!=x){ //c2 i++; //c3 return i; //c4 Legyen B i = {(A,n,x) : A[i] = x ( j)(0 j < i A[ j] x) i = 0,...,n 1, és legyen B n = {(A,n,x) : ( j)(0 j < n A[ j] x) Minden (A,n,x) bemeneti adat pontosan egy B i halmazba esik (i = 0,...,n). Ha (A,n,x) B i, akkor KERES(A,n,x) futási ideje c 1 + (i + 1)c 2 + ic 3 + c 4 Legjobb eset: Ha (A,n,x) B 0, tehát T l j (n) = c 1 + c 2 + c 4 = O(1) Legrosszabb eset: Ha (A,n,x) B n, tehát T lr (n) = c 1 + (n + 1)c 2 + nc 3 + c 4 = (c 2 + c 3 )n + c 1 + c 2 + c 4 = O(n). Átlagos eset: Legyen D az Integer típus elemeinek a száma. Tegyük fel, hogy minden bemenet egyformán valószínű, azaz annak valószínűsége, hogy x = a valamely adott a egész számra D 1. Vezessük be a p = D 1 és q = 1 D 1 jelöléseket (Nyilvánvaló, hogy p < 1 és q < 1). Jelölje Pr((A,n,x) B i ) annak valószínűségét, hogy az (A,n,x) bemenet a B i halmazba esik. Pr((A,n,x) B i ) = q i p, i = 0,...,n 1, és Pr((A,n,x) B n ) = q n Tehát a KERES algoritmus átlagos futási ideje: T a (n) = = n i=0 Pr((A,n,x) B i )(c 1 + (i + 1)c 2 + ic 3 + c 4 ) n 1 q i p(c 1 + (i + 1)c 2 + ic 3 + c 4 ) + q n (c 1 + (n + 1)c 2 + nc 3 + c 4 ) i=0 n 1 (c 1 + n(c 2 + c 3 ) + c 4 )p q i + (c 1 + (n + 1)c 2 + nc 3 + c 4 ) i=0 = (c 1 + n(c 2 + c 3 ) + c 4 )p qn 1 q 1 + (c 1 + (n + 1)c 2 + nc 3 + c 4 ) = (c 1 + n(c 2 + c 3 ) + c 4 )(1 q n ) + (c 1 + (n + 1)c 2 + nc 3 + c 4 ) (c 1 + n(c 2 + c 3 ) + c 4 ) + (c 1 + (n + 1)c 2 + nc 3 + c 4 ) = (2c 2 + 2c 3 )n + 2c 1 + c 2 + 2c 4 4

Tehát T a (n) = O(n). Ha algoritmus futási idejének nagyságrendjét (O, Ω, Θ) akarjuk kifejezni, akkor a számítást egyszerűsíthetjük: 1. Minden elemi művelet költségét 1-nek vehetjük. 2. Elhagyhatjuk azokat az elemi műveleteket, amelyek végrehajtási száma konstans, azaz nem függ a bemeneti adattól. 1.7. Bizonyítási (következtetési) szabályok H 1,,H k H Ha H 1,,H k igaz állítások (specifikációk), azaz vagy axiómák, vagy már bizonyított állítások, akkor H is igaz állítás. 1.7.1. Kezdőfeltételes ismétléses vezérlés. P i M h P P P A P logikai formulát ciklusinvariánsnak nevezzük. 4. ábra. while ciklus bizonyítási szabálya { PM {P {Pwhile() M { P 1.7.2. Végfeltételes ismétléses vezérlés. P M Q Q i h Q 5. ábra. repeat ciklus bizonyítási szabálya {PM {Q, Q P {PdoM; while(){q 5

1.8. A KERES algoritmus helyességének bizonyítása public static int Keres(int[] A, int x){ int i=0; //c1 while (i<a.length && A[i]!=x){ //c2 i++; //c3 return i; //c4 Jelölje az ismétlési feltételt, = (i < n) (A[i] x). 1. Megmutatjuk, hogy a P = ( j)(1 j < i A[i] x) formula ciklusinvariáns lesz. Nyilvánvaló, hogy ha a while ciklus magja, az i++ értékadás előtt teljesül az P formula, akkor az értékadás után teljesül P. 2. Meg kell mutatni, hogy a while ciklus előtt, azaz az i=0; értékadás után teljesül a P formula. Ez azért igaz, mert nincs olyan j, hogy 0 j < i = 0. A while ciklus biztosan terminál, mert a ciklusmag minden végrehajtása 1-el növeli az i változó értékét. A kezdőfeltételes ismétlés bizonyítási szabálya szerint a while ciklus után P teljesül. = (i n) (A[i] = x). Ha i n teljesül, az azt jelenti, hogy a keresett x nem eleme a sorozatnak, hisz P is teljesül. Ha a terminálás után i < n, akkor A[i] = x és mivel P is teljesül, i a legkisebb olyan index, hogy A[i] = x. 6