Dr. Schuster György február / 32

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

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.

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

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

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

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

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

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

14. Mediánok és rendezett minták

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

Programok értelmezése

Erdélyi Magyar TudományEgyetem (EMTE

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

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

BASH script programozás II. Vezérlési szerkezetek

Komputeralgebra Rendszerek

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

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

Gyakorló feladatok ZH-ra

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

Számjegyes vagy radix rendezés

Mintavételes szabályozás mikrovezérlő segítségével

Algoritmusok bonyolultsága

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

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

Pénzügyi algoritmusok

S z á m í t ó g é p e s a l a p i s m e r e t e k

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

Algoritmuselmélet 1. előadás

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

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

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

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

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

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.

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

I. A DIGITÁLIS ÁRAMKÖRÖK ELMÉLETI ALAPJAI

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

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

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

Smalltalk 2. Készítette: Szabó Éva

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Algoritmuselmélet 12. előadás

Objektumorientált Programozás VI.

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

Adatszerkezetek 7a. Dr. IványiPéter

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

Algoritmusok, adatszerkezetek, objektumok

Programozási nyelvek 6. előadás

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Nagyordó, Omega, Theta, Kisordó

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

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

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

Maximum kiválasztás tömbben

Mesterséges intelligencia 1 előadások

A C programozási nyelv III. Pointerek és tömbök.

Programozási módszertan. Dinamikus programozás: szerelőszalag ütemezése Mátrixok véges sorozatainak szorzása

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

A C programozási nyelv III. Pointerek és tömbök.

Bevezetés az informatikába

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

Java programozási nyelv

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

Adatszerkezetek 2. Dr. Iványi Péter

Algoritmuselmélet 2. előadás

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)

Szoftver karbantartási lépések ellenőrzése

1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007

Algoritmusok bonyolultsága

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

Partíció probléma rekurzíómemorizálással

Algoritmusok és adatszerkezetek gyakorlat 07

Programozási módszertan. Dinamikus programozás: A leghosszabb közös részsorozat

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

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)

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

Programozási segédlet

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Rekurzív algoritmusok

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Formális módszerek GM_IN003_1 Program verifikálás, formalizmusok

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Algoritmuselmélet 1. előadás

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Kupac adatszerkezet. 1. ábra.

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

Programozási alapismeretek 3. előadás

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

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

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Fibonacci számok. Dinamikus programozással

Átírás:

Algoritmusok és magvalósítások Dr. Schuster György OE-KVK-MAI schuster.gyorgy@kvk.uni-obuda.hu 2015. február 10. 2015. február 10. 1 / 32

Algoritmus Alapfogalmak Algoritmus Definíció Algoritmuson olyan megengedett végesszámú lépésekből álló módszert, utasítás sorozatot, részletes útmutatást, receptet értünk, amely valamely felmerült probléma megoldására alkalmas. 2015. február 10. 2 / 32

Algoritmus Alapfogalmak Algoritmus Tulajdonságai: 1 Az eljárás egyértelműen leírható véges szöveggel. 2 Az eljárás minden lépése ténylegesen kivitelezhető. 3 Az eljárás minden időpontban véges sok tárat használ. 4 Az eljárás véges sok lépésből áll. Következmény: 1 Az algoritmus ugyanarra a bemenetre mindig ugyanazt az eredményt adja. 2 Minden időpontban egyértelműen adott a következő lépés. 2015. február 10. 3 / 32

Adatstruktúra Alapfogalmak Algoritmus Algoritmus adatstruktúra Az algoritmus az elemi műveletek sorozata. Az algoritmus adatok alapján dolgozik. Az adatstruktúra Az elérhető adatok egy szisztematikusan összeállított szerkezete. 2015. február 10. 4 / 32

Jellemzők: Alapfogalmak Algoritmusok analízise Futási idő Elsődleges mérőszám. Az idő az egyik legfontosabb erőforrás. Természetes elvárás a lehető legkisebb időfelhasználás. Tárfelhasználás: Lényeges mérőszám. Hardver függő. Beleférünk-e a tárba, vagy nem. Manapság háttérbe szorul, mivel a memória egyre olcsóbb. Megjegyzés: A futási sebesség és a tárfelhasználás egymásnak ellentmondó követelmények. 2015. február 10. 5 / 32

Futási sebesség Alapfogalmak Algoritmusok analízise Mitől függ? a bementek számátol, a műveletek számától, a kimenetek számától. 2015. február 10. 6 / 32

Futási sebesség Alapfogalmak Algoritmusok analízise Tapasztalati mérések Hasznos, de korlátai vannak: limitált számú teszt bemenet használható, két algoritmus nehezen hasonlítható össze, hacsak nem azonos hardver és szoftver környezetben vizsgáljuk, az algoritmust implementálni és futtatni kell azért, hogy a mérést el lehessen végezni. 2015. február 10. 7 / 32

Futási sebesség Alapfogalmak Algoritmusok analízise Feladatok a tapasztalati méréshez: a lehetséges bemenetek felmérése, az algoritmus hatékonyságának eldöntése, illetőleg összehasonlítása hardver- és szoftver környezettől függetlenül, az algoritmus magas szintű leírása implementáció nélkül. 2015. február 10. 8 / 32

Futási sebesség Alapfogalmak Algoritmusok analízise Komponensek: az implementáció nyelve, a számítási modell, amelyben az algoritmus fut, a mérőszám, amelyben mérjük a futási sebességet, az a megközelítés, amely alapján a futási időt mgehatározzuk, a rekurzív algoritmusokat is. 2015. február 10. 9 / 32

Pszeudó kód Példa: Alapfogalmak Pszeudo kód Algorithm arraymax(a, n): Input: An array A storing n 1 integers. Output: The maximum element in A. currentmax <- A[0] for i <- 1 to n 1 do if currentmax < A[i] then currentmax <- A[i] return currentmax 2015. február 10. 10 / 32

Pszeudó kód Alapfogalmak Pszeudo kód Mi is ez? A pszeudó kód egyfajta keveréke a természetes nyelv(ek)nek és egy magasszintű szabványos programozási nyelvnek. 2015. február 10. 11 / 32

Pszeudó kód Alapfogalmak Pszeudo kód Elemei: Kifejezések: a logikai és matematikai kifejezésekre szabványos matematikai jelölések, Metódusok deklarációja: az algoritmus neve és paraméter lista, Döntési struktúrák: szabványos if, then és else kifejezések, While ciklus: while feltétel do művelet, Repeat ciklus: repeat művelet until feltétel, For ciklus: for változó - inkremens to feltétel do művelet, Tömb indexelés: A[i], Metódus hívás: metodus(argumentumok), Metódus visszatérés: return(változó). 2015. február 10. 12 / 32

Alapfogalmak Pszeudo kód RAM (Random Access Machine) Miért kell: A kisérleti analízis limitált pontosságú és hatékonyságú. Ezért két eljárást nehéz összehasonlítani - főleg futtatás nélkül. Műveleti primitívek: változónak értékadás, metódus hívás, aritmetikai művelet végrehajtása, két szám összehasonlítása, tömb indexelés, objektum referencia kezelése, metódusból visszatérés. 2015. február 10. 13 / 32

Alapfogalmak Pszeudo kód RAM (Random Access Machine) Definíció: feltételezi, hogy a CPU a RAM modellben bármelyik műveleti primitívet véges lépésben végre tudja hajtani. A műveletek nem függnek a bemeneti értékektől. 2015. február 10. 14 / 32

Alapfogalmak Pszeudo kód RAM (Random Access Machine) Számolás a műveleti primitívekkel A példa alapján: A[0]-t a CurrentMax értékkel inicializálja, azi-t ciklusszálálót 1-el inicializálja, mielőtt a ciklustörzsbe belép ellenőrzi, hogy i<n a ciklustörzset n-1-szer végrehajtja, ahol - inedxel, - összehasonlít CurrentMax-al, - A[i]-t esetleg cseréli CurrentMax-al (indexel és értéket ad), visszatér a CurrentMax értékkel. Legalább 2+1+n+ 4(n 1)+1 = 5n Legfeljebb 2+1+n+6(n 1)+1 = 7n 2 2015. február 10. 15 / 32

Alapfogalmak Pszeudo kód Átlagos eset vagy legrosszabb eset Átlagos eset Az átlagos futási sebesség egy adott nagyrészt véletlenszerű bemeneti halmazra vonatkozik és statisztikai vizsgálatokat, illetőleg valószínűség számítási módszereket igényel. A legrosszabb eset A legroszabb (leghosszabb) futási sebesség bemeneti halmaza gyakran egyértelműen megállapítható, így a kalkuláció pontosan elvégezhető. 2015. február 10. 16 / 32

Alapfogalmak Pszeudo kód Rekurzív algoritmusok analízise A példa rekurzív megoldása: Algorithm recursivemax(a,n) Input: An array A storing n 1 itegers. Output: The maximum element in A if n=1 then return A[0] return max{recursivemax(a,n-1),a[n-1]} A futási idő: { 3 ha n = 1. T(n) = T(n 1)+7 egyébként. 2015. február 10. 17 / 32

Alapfogalmak Miért? 1 a pontos meghatározás nagyon munkaigényes, 2 minden egyes magasszintű utasítás számos elemi utasítást tartalmaz, 3 az elemi utasítások száma nem mindig határozható meg (JIT compile), 4 sokszor elegendő egy közelítés is, főleg összehasonlítások esetén. 2015. február 10. 18 / 32

Alapfogalmak Nagy O definíció Legyenek f(n) és g(n) függvények, amelyek nem negatív egészek halmazáról a valós számok halmazára képeznek le. f(n) akkor O(g(n)), ha létezik egy olyan c R, hogy c > 0 és egy n n 0, ahol n, n 0 Z +, hogy n n 0 esetén f(n) c g(n). Ekkor mondjuk, hogy f(n) O(g(n)), vagy f(n) nagy ordo g(n). Példa: 7n 2 az O(n) Bizonyítás: Keressük c > 0 és n 0 1, hogy 7n 2 c n, ha n n 0 -ra. Célszerű választás a c = 7 és az n 0 = 1. 2015. február 10. 19 / 32

Alapfogalmak 20n 3 + 10n log n+5 az O(n 3 ) 20n 3 + 10n log n+5 35n 3 n 1 Megjegyzés: Minden a k n k + a k 1 n k 1 + +a 1 n+a 0 polinóm az O(n k ). 3 log n+ log log n az O(log n) 3 log n+ log log n 4 log n, ha n 2 2 100 az O(1) 2 100 2 100, ha n 1 5n log n+2n az O(n log n) 5n log n+2n 7n log n, ha n 2 2015. február 10. 20 / 32

Alapfogalmak Szabályok: 1 ha d(n) az O(f(n)), akkor ad(n) szintén O(f(n)) minden a > 0-ra, 2 ha d(n) az O(f(n)) és e(n) az O(g(n)), akkor d(n)+e(n) az O(f(n)+g(n)), 3 ha d(n) az O(f(n)) és e(n) az O(g(n)), akkor d(n) e(n) az O(f(n) g(n)), 4 ha d(n) az O(f(n)), akkor f(n) az O(g(n)), 5 ha a k n k + a k 1 n k 1 + +a 1 n+a 0, akkor f(n) az O(n k ), 6 ha f(n) = n x, akkor O(a n ), bármilyen rögzített x > 0 és a > 1-re, 7 ha log n x az O(log n) bármilyen rögzített x > 0-ra, 8 ha log x n az O(n y ) bármilyen rögzített x > 0 és y > 1-re. 2015. február 10. 21 / 32

Alapfogalmak Példa: 2n 3 + 4n 2 log n az O(n 3 ) log n az O(n), 8. szabály, 4n 2 log n az O(4n 3 ), 3. szabály, an 3 + 4n 2 log n az O(2n 3 + 4n 3 ), 2. szabály, 2n + 4n 3 az O(n 3 ), 5. és 1. szabály, 2n 3 + 4n 2 log n az O(n 3 ), 4. szabály. 2015. február 10. 22 / 32

Alapfogalmak Terminológia: O(log n) logaritmikus, O(n) lineáris, O(n 2 ) kvadratikus, O(n k ) polinomiális (k 1), O(a n ) exponenciális (a > 1) 2015. február 10. 23 / 32

Alapfogalmak Ω jelölés Legyenek f(n) és g(n) függvények, amelyek nem negatív egészek halmazáról a valós számok halmazára képeznek le. f(n) akkor Ω(g(n)), ha g(n) O(f(n)), amely szerint létezik olyan c > 0 valós konstans és egy n n 0 (n 0 1) egész küszöbszám, amelyre igaz az, hogy f(n) cg(n) n n 0. Ez a definíció lehetővé teszi, hogy két algoritmus egy adott c konstans erejéig aszomptotikusan egyenlőek, illetve összehasonlíthatóak. Θ jelölés Legyenek f(n) és g(n) függvények, amelyek nem negatív egészek halmazáról a valós számok halmazára képeznek le. f(n) akkor Ω(g(n)), ha g(n) O(f(n)), amely szerint léteznek olyan c > 0 és c > 0 valós konstansok és egy n n 0 (n 0 1) egész küszöbszám, amelyre igaz az, hogy c g(n) f(n) c g(n) n n 0. 2015. február 10. 24 / 32

Alapfogalmak Kis o definíció Legyenek f(n) és g(n) függvények, amelyek nem negatív egészek halmazáról a valós számok halmazára képeznek le. f(n) akkor o(g(n)), ha bármely olyan c R + és egy n n 0, ahol n, n 0 Z 0,+, hogy n n 0 esetén f(n) c g(n). Ekkor mondjuk, hogy f(n) az o(g(n)), vagy f(n) kis ordo g(n). ω definíció Akkor mondjuk, hogy f(n) az ω(g(n)), ha g(n) az o(f(n)), vagyis ha bármely olyan c R + és egy n n 0, ahol n, n 0 Z 0,+, hogy n n 0 esetén g(n) c f(n). Megjegyzés: o( ) analóg a kisebb egyenlő, az ω( ) analóg a nagyobb aszimptótikus közelítéssel. 2015. február 10. 25 / 32

Alapfogalmak f(n) = 12n 2 + 6n az o(n 3 ) és ω(n) 1 fn(n) az o(n 3 ) legyen c > 0 ebből n 0 = (12+6)/c = 18/c 18 < cn n n 0, ebből f(n) = 12n 2 + 6n 12n 2 + 6n 2 = 18n 2 cn 3. Tehát f(n) az o(n 3 ). 2 f(n) az ω(n) legyen c > 0 ebből n 0 = c/12 egy n n 0 12n c, így f(n) = 12n 2 + 6n 12n 2 cn. Tehát f(n) az ω(n). Megjegyzés: Vagis f(n) akkor és csak akkor o(g(n)), ha f(n) lim n g(n) = 0 2015. február 10. 26 / 32

Összegzés Alapfogalmak Matematikai áttekintés Definíció: b f(i) = f(a)+f(a+1)+f(a+2)+ +f(b) i=a Gyakori!! Ha ciklussal dolgozunk, akkor a futásidő lineárisan nő. Ezért jó tudni, hogy: n i=0 ai = 1+a+a 2 + +a n = 1+an+1, ha a > 0, 1 a n 1 i=0 = 1+2+4+8+ +2n 1 = 2 n 1, n n(n+1) i=1 = 1+2+3+4+ +n 1+n =, ha n 1, 2 2015. február 10. 27 / 32

Esettanulmány Alapfogalmak Matematikai áttekintés Egyszerű részösseg algoritmus s j,k = a j + a j+1 + +a k = Algorithm MaxsubSlow(A): Input: An n-element array A of numbers, indexed from 1 to n. Output: The maximum subarray sum of array A. m 0 // the maximum found so far for j 1 to n do for k j to n do s 0 // the next partial sum we are computing for i j to k do s s + A[i] if s > m then m s return m Ez O(n 3 ). k i=j a i 2015. február 10. 28 / 32

Esettanulmány Alapfogalmak Matematikai áttekintés Javított részösszeg algoritmus Input: An n-element array A of numbers, indexed from 1 to n. Output: The maximum subarray sum of array A. S 0 0 // the initial prefix sum for i 1 to n do S i S i1 + A[i] m 0 // the maximum found so far for j 1 to n do for k j to n do s = S k - S jx1 if s > m then m s return m Ez O(n 2 ). 2015. február 10. 29 / 32

Esettanulmány Alapfogalmak Matematikai áttekintés Lineáris idejű részösszeg algoritmis M t = max{0, M t 1 + A[t]} Algorithm MaxsubFastest(A): Input: An n-element array A of numbers, indexed from 1 to n. Output: The maximum subarray sum of array A. M0 0 // the initial prefix maximum for t 1 to n do M t max{0, M t1 + A[t]} m 0 // the maximum found so far for t 1 to n do m max{m, M t} return m Ez O(n) 2015. február 10. 30 / 32

Alapfogalmak Matematikai áttekintés 2015. február 10. 31 / 32

Alapfogalmak Matematikai áttekintés 2015. február 10. 32 / 32