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.

Hasonló dokumentumok
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.

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

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

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

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

Számjegyes vagy radix rendezés

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

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

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

Fibonacci számok. Dinamikus programozással

14. Mediánok és rendezett minták

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

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

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.

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

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

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

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

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

Nagyordó, Omega, Theta, Kisordó

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

Algoritmuselmélet 1. előadás

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Programozási módszertan. Mohó algoritmusok

Felvételi tematika INFORMATIKA

ALGORITMUSOK ÉS PROBLÉMAOSZTÁLYOK (1. előadás)

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

1. előadás. számításokban. Adatszerkezetek és algoritmusok előadás február 12. Kósa Márk, Pánovics János, Szathmáry László és Halász Gábor

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Algoritmuselmélet 2. előadás


Kupacrendezés. Az s sorban lévő elemeket rendezzük a k kupac segítségével! k.empty. not s.isempty. e:=s.out k.insert(e) not k.

RSA algoritmus. P(M) = M e mod n. S(C) = C d mod n. A helyesség igazoláshoz szükséges számelméleti háttér. a φ(n) = 1 mod n, a (a 1,a 2,...

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

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:

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

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

Algoritmuselmélet 1. előadás

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

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

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

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

A valós számok halmaza

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

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Kupac adatszerkezet. 1. ábra.

KOVÁCS BÉLA, MATEMATIKA I.

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

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Elmaradó óra. Az F = (V,T) gráf minimális feszitőfája G-nek, ha. F feszitőfája G-nek, és. C(T) minimális

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

Haladó rendezések. PPT 2007/2008 tavasz.

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

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

Diszkrét matematika I.

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

Algoritmusok bonyolultsága

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

Rendezések. Összehasonlító rendezések

Kiterjesztések sek szemantikája

Erdélyi Magyar TudományEgyetem (EMTE

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

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

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

Algoritmusok vektorokkal keresések 1

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.

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

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

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

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

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)

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

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!

Az informatika logikai alapjai

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

Programozás II. előadás

Egyesíthető prioritási sor

INFORMATIKA javítókulcs 2016

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!

2018, Diszkrét matematika

Egyszerű programozási tételek

Algoritmuselmélet. Függvények nagyságrendje, elágazás és korlátozás, dinamikus programozás. Katona Gyula Y.

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

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

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

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

KOVÁCS BÉLA, MATEMATIKA I.

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

Geometriai algoritmusok

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

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

Algoritmizálás, adatmodellezés 1. előadás

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

Algoritmuselmélet. Függvények nagyságrendje, elágazás és korlátozás, dinamikus programozás. Katona Gyula Y.

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

2016, Diszkrét matematika

Gyakorló feladatok ZH-ra

Átírás:

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. 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 bemenete: 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 }. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, Specifikáció {B}A{K} A az algoritmus, amelyre az állítás vonatkozik. Az A algoritmus helyes a {B}A{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.

Beszúró Rendezés BESZÚRÓ-RENDEZÉS (A) For j= 2 to hossz(a) {kulcs:=a[j] i:=j-1 while i>0 és A[i]>kulcs {A[i+1]:=A[i] i:=i-1} A[i+1]:=kulcs} Példa (5,2,4,6,1,3) (5,2 j,4,6,1,3) (2,5,4,6,1,3) (2,5,4 j,6,1,3) (2,4,5,6,1,3) (2,4,5,6 j,1,3) (2,4,5,6,1 j,3) (1,2,4,5,6,3) (1,2,4,5,6,3 j ) (1,2,3,4,5,6) További példa: http://www.youtube.com/watch?v=fdgvezzyyrc&feature=related

Futási idő elemzése 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} Á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) = x =n Pr(x)T (A,x)

Elemzés Legyen t j a for ciklus j-edik végrehajtásában a while ciklus tesztelések száma. BESZÚRÓ-RENDEZÉS (A) költség végrehajtások száma For j= 2 to hossz(a) c1 n {kulcs:=a[j] c2 n-1 i:=j-1 c3 n-1 while i>0 és A[i]>kulcs c4 t2+t3+...+tn {A[i+1]:=A[i] c5 (t2-1)+...+(tn-1) i:=i-1} c6 (t2-1)+...+(tn-1) A[i+1]:=kulcs} c7 n-1 A teljes költség: n n n c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 t j + c 5 (t j 1) + c 6 j 1) + c 7 (n 1) j=2 j=2 j=2(t

A teljes költség: n n n c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 t j + c 5 (t j 1) + c 6 j 1) + c 7 (n 1) j=2 j=2 j=2(t Legjobb eset: Ha a tömb már rendezett, akkor minden j-re t j = 1, tehát T l j (A,n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 (n 1) + c 7 (n 1) = n Ez n lineáris függvénye. = n(c 1 + c 2 + c 3 + c 4 + c 7 ) (c 2 + c 3 + c 4 + c 7 ) Legrosszabb eset: Ha a tömb már fordított sorrendben rendezett, akkor minden j-re t j = j, tehát T lr (A,n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 (n(n + 1)/2 1)+ c 5 ((n 1)n/2 1) + c 6 ((n 1)n/2 1) + c 7 (n 1), mivel n j=2 j = n(n + 1)/2 1. A legrosszabb eset n négyzetes függvénye.

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))} Az f (n) = O(g(n)) jelentése: f (n) O(g(n)). Ω-jelölés Ω(g(n)) = { f (n) : ( c,n 0 > 0)( n n 0 )(cg(n) f (n))} Az f (n) = Ω(g(n)) jelentése: f (n) Ω(g(n)). Θ-jelölés Θ(g(n)) = { f (n) : ( c 1,c 2,n 0 > 0)( n n 0 )(c 1 g(n) f (n) c 2 g(n))} Az f (n) = Θ(g(n)) jelentése: f (n) Θ(g(n)).

Aszimptotikus jelölések o-jelölés o(g(n)) = { f (n) : ( c > 0)( n 0 0)( n n 0 )(0 f (n) cg(n))} Az f (n) = o(g(n)) jelentése: f (n) o(g(n)), ekkor f (n)/g(n) 0. ω-jelölés ω(g(n)) = { f (n) : ( c > 0)( n 0 0)( n n 0 )(cg(n) f (n))} Az f (n) = ω(g(n)) jelentése: f (n) ω(g(n)), akkor f (n)/g(n). Példák 2n + 20 = Θ(n) n 2 = ω(nlogn) log 2 (n) = Θ(log 10 n) n 2 + 20n + 10 = Θ(n 2 ) 2 n = ω(n 100000 ) A konstans költségű elemi műveletek mindegyikét számolhatjuk egységnyi költségűnek.

Fő tulajdonságok A Θ reláció tranzitív, reflexív és szimmetrikus, így egy osztályozás tartozik hozzá. A Θ, O, Ω, o, ω relációk mindegyike tranzitív. Ha f (n) = O(g(n)), akkor g(n) = Ω( f (n)). Ha f (n) = o(g(n), akkor f (n) = O(g(n)). Ha f (n) = ω(g(n)), akkor f (n) = Ω(g(n)).

Rekurzív algoritmusok Egy objektum definícióját rekurzívnak nevezünk, ha a definíció tartalmazza a definiálandó objektumot. Egy P eljárást (vagy függvényt) rekurzívnak nevezünk, ha P utasításrészében előfordul magának a P eljárásnak a hívása. Faktor(n) If n=1 return 1 Else return n*faktor(n-1) Példa: Faktor(5)=5*Faktor(4) Faktor(4)=4*Faktor(3) Faktor(3)=3*Faktor(2) Faktor(2)=2*Faktor(1) Faktor(1)=1

Euklideszi algoritmus Ha b=0, akkor lnko(a,b) = a. Egyébként ha a b, akkor lnko(a,b) = lnko(b,a mod b). Tehát, ha a b, akkor az alábbi algoritmus kiszámolja a legnagyobb közös osztót. Euklidesz(a,b) If b=0 return a Else return Euklidesz(b, a mod b) Euklidesz(64, 28) = Euklidesz(28, 8) = Euklidesz(8, 4) = Euklidesz(4, 0) = 4

Partíció probléma Az n természetes szám egy partíciója olyan π = (a 1,...,a k ) sorozat, amelyre teljesül: - a 1 a 2 a k > 0 - k i=1 a i = n Jelölje P(n) az n szám összes partíciójának számát. P(1)=1 (1=1) P(2)=2 (2=2, 2=1+1) P(3)=3 (3=3, 3=2+1, 3=1+1+1) P(4)=5 (4=4, 4=3+1, 4=2+2, 4=2+1+1, 4=1+1+1+1+1)

Partíciószám számító algoritmus Jelölje P2(n, k) n azon partícióinak számát, amelyben minden elem legfeljebb k. Például P2(4,3) = 4, P2(4,2) = 3. Ekkor a következő összefüggések teljesülnek: P2(1,k) = 1,P2(n,1) = 1 P2(n,n) = 1 + P2(n,n 1) (n = n és a többiek) P2(n,k) = P2(n,n) ha n < k P2(n,k) = P2(n,k 1) + P2(n k,k) ha k < n (k benne van vagy nincs) A megoldás: P(n) = P2(n,n) PARTÍCIÓ(n) Return P2(n,n) P2(n,k) If (k=1) Or (n=1) return 1 If k>=n return P2(n,n-1)+1 return P2(n, k-1)+p2(n-k, k)

Rekurziós fa: Olyan fa, amelynek minden pontja egy eljáráshívást jelent adott aktuális paraméterekre, úgy, hogy a pont fiai megfelelnek azoknak az eljáráshívásoknak, amelyek végrehajtódnak az aktuális paraméterek esetén.

Futási idő elemzése Legyen E(n, k) a P2(n, k) eljáráshívás hatására végrehajtott eljárásutasítások száma. Ekkor P2(n,k) E(n,k) 2P2(n,k) 1. Lemma P(n) = Ω(2 n ) Bizonyítás Tekintsük az összes olyan [a 1,...,a k ] sorozatot, ahol n a 1 és n a 1 > a 2 > > a k > 1. Ezek száma pontosan 2 n 1, mivel minden ilyen sorozat egyértelműen megadható egy b n 1,...,b 1 bitvektorral, ahol b x = 1 akkor és csak akkor, ha x + 1 eleme a sorozatnak. Mivel k n, ezért k i=1 a i n. Minden ilyen sorozathoz adjunk hozzá a végén annyi 1- est, hogy a számok összege n legyen, tehát n egy partícióját kapjuk. Ha két kiindulási sorozat különböző volt, akkor a kiegészítéssel különböző partíciót kapunk. Következmény. A P algoritmus futási ideje Ω(2 n ).

Rekurzív algoritmus helyességének bizonyítása I. Terminálás bizonyítása Bebizonyítandó, hogy minden eljáráshívás végrehajtása véges lépésben befejeződik. (Az eljárás terminál.) Megállási feltétel: Legyen P(x 1,...,x n ) egy n-paraméteres rekurzív eljárás. Az M(x 1,...,x n ) egész értékeket felvevő kifejezés megállási feltétele a P rekurzív eljárásnak, ha 1. M(a 1,...,a n ) 0 minden megengedett a 1,...,a n aktuális paraméterre. 2. Ha M(a 1,...,a n ) = 0 akkor nincs rekurzív hívás P(a 1,...,a n ) végrehajtásakor. 3. Ha van rekurzív hívás P(a 1,...,a n ) végrehajtásakor valamely b 1,...,b n paraméterekre, akkor M(b 1,...,b n ) < M(a 1,...,a n ). Példa: M(n,k) = (n 1) (k 1) megállási feltétel P2-re. II. Helyesség bizonyítása 1. Alaplépés. Annak bizonyítása, hogy az eljárás helyes eredményt számít ki, ha az aktuális paraméterek esetén nincs rekurzív hívás. 2. Rekurzív lépés. Feltéve, hogy minden rekurzív hívás helyes eredményt ad, annak bizonyítása, hogy a rekurzív hívások által adott értékekből az eljárás helyes eredményt számít ki.

Összefésülő Rendezés Oszd meg: A rendezendő sorozatot felosztjuk két n/2 méretű részsorozatra. Uralkodj: A két részsorozatot összefésülő rendezéssel rekurzív módon rendezzük. Egyesít: Összefésüljük a két rendezett részsorozatot, így kapjuk a rendezett sorozatot. Összefésülő-rendezés(A,p,r) If p<r Then {q:=[(p+r)/2] Összefésülő-rendezés(A,p,q) Összefésülő-rendezés(A,q+1,r) Összefésül(A,p,q,r)} A teljes tömb rendezését a Összefésülő-rendezés(A, 1, hossz(a)) kezdőhívás adja meg.

Futási idő elemzés Legyen T (n) az n darab szám Összefésülő-rendezéssel történő rendezésének legrosszabb eset korlátja. Ekkor T (1) = Θ(1) és T (n) = 2T (n/2) + Θ(n), ha n > 1 Állítás T (n) = O(nlogn) Bizonyítás: Teljes indukcióval. Az indukciós lépés: ha clog2 > d. T (n/2) c (n/2) log(n/2) T (n) 2(c n/2 log(n/2)) + d n = = c n (logn log2) + d n = = c n logn + n (d c log2) c n logn,

Gyorsrendezés Oszd meg: Az A[p,...,r] tömböt két nem üres A[p,...,q] és A[q + 1,...,r] résztömbre osztjuk úgy, hogy A[p,...,q] minden eleme kisebb vagy egyenlő A[q + 1,...,r] minden eleménél. Uralkodj: Az A[p,..., q] és A[q + 1,..., r] résztömböket a gyorsrendezés rekurzív hívásával rendezzük. Egyesít: A rendezés helyben rendez, így nincs szükség egyesítésre. GYORSRENDEZÉS(A,p,r) If p<r Then {q=feloszt(a,p,r) GYORSRENDEZÉS(A,p,q) GYORSRENDEZÉS(A,q+1,r)} A teljes tömb rendezését a GYORSRENDEZÉS(A, 1, hossz(a)) kezdőhívás adja meg.

Feloszt eljárás (Hoare féle) Feloszt(A,p,r) x:=a[p] i:=p-1 j:=r+1 while(igaz) {repeat j:=j-1 until A[j]<=x repeat i:=i+1 until A[i]>=x if i<j then csere(a[i],a[j]) else return j} Példa: i[5,3,2,6,1,4,3,7] j x=5 [5 i,3,2,6,1,4,3 j,7] [3 i,3,2,6,1,4,5 j,7] [3,3,2,6 i,1,4 j,5,7] [3,3,2,4 i,1,6 j,5,7] [3,3,2,4,1 j,6 i,5,7] Return 5

Feloszt eljárás (Lomuto féle) Feloszt(A,p,r) x:=a[r] i:=p-1 for j=p to r-1 {if A[j]<=x then {i:=i+1 csere(a[i],a[j])}} csere(a[i+1],a[r]) return i+1 Példa: i[2 j,8,7,1,3,5,6, 4] x=4 [2 i,8 j,7,1,3,5,6, 4] [2 i,8,7 j,1,3,5,6, 4] [2,1 i,7,8,3 j,5,6, 4] [2,1,3 i,8,7,5,6, 4] [2,1,3 i,4,7,5,6,8] Megjegyzés: A Lomuto féle felosztásnál a gyorsrendezést a (A,p,q-1) (A,q+1,r) paraméterekre hívjuk meg.

Futási idő elemzés Legrosszabb eset A felosztás mindig egy egyelemű tömbre és a többi elemre oszt. Ekkor T (n) = T lr (n) = T lr (n 1) + Θ(n) n k=1 Θ(k) = Θ( n k=1 k) = Θ(n 2 ). Legjobb eset A felosztás mindig felezi a tömböt. Ekkor T l j (n) = 2T (n/2) + Θ(n) T l j (n) = Θ(nlogn)

Átlagos eset Legyen X a eljárás végrehajtása során a FELOSZT által végrehajtott összehasonlítások száma n elemű bemenetre. Ekkor a teljes futási idő O(n + X). Legyen z i az i-edik legkisebb eleme a bemenetnek, és Z i j = {z i,z i+1,...,z j }. Legyen p i j annak a valószínűsége, hogy z i -t és z j -t valamelyik feloszt eljárás összehasonlítja. Ekkor p i j = 2/( j i + 1), mivel akkor lesznek összehasonlítva, ha a Z i j halmazból vagy z i vagy z j az első felosztó elem. 2/( j i + 1) = O(nlogn). Itt kihasz- Az összehasonlítások várható száma n 1 náljuk, hogy a várható érték additív. i=1 n j=i+1

Partíció probléma rekurzíómemorizálással A partíciószám rekurzív algoritmusa Ω(2 n ) műveletet végez, pedig a megoldandó részfeladatatok száma sokkal kisebb O(n 2 ). A probléma, hogy bizonyos már megoldott részfeladatokat az algoritmus nagyon sokszor újra kiszámol. Megoldás: jegyezzük fel a kiszámolt értéket, és ha már megvan nincs szükség rekurzív hívásra. PARTÍCIÓRM(n) Return P2RM(n,n) P2RM(n,k) if T[n,k]>0 then return T[n,k] if (k=1) Or (n=1) then {T[n,k]:=1 return 1} else if k>=n then {T[n,k]:=P2RM(n,n-1)+1 return T[n,k]} else {T[n,k]:=P2RM(n,k-1)+P2RM(n-k,k) return T[n,k]} A futási idő és tárigény O(n 2 ).