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

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.

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.

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

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

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


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

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

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

Fibonacci számok. Dinamikus programozással

14. Mediánok és rendezett minták

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

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

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

Algoritmuselmélet 2. előadás

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

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.

Programozási módszertan. Mohó algoritmusok

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

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

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

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

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

Rekurzió. Horváth Gyula.

Rekurzív algoritmusok

Algoritmuselmélet 1. előadás

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

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.

ALGORITMUSOK ÉS PROBLÉMAOSZTÁLYOK (1. előadá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..

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

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

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

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

Rekurzió. 1. Feladat: Sorbaállítások száma. 2. Feladat: Zsebpénz. Horváth Gyula Megoldás. Megoldás

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

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

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

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

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

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

Adatszerkezet - műveletek

<... < s n. Írjuk le a megoldási módszert, és adjunk meg egy megjegyzésekkel ellátott Pascal-programot. A bemeneti adatokat helyesnek tekintjük.

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

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

Kupac adatszerkezet. 1. ábra.

Eötvös Loránd Tudományegyetem Természettudományi Kar. Péter Zsófia. Véletlenített algoritmusok és alkalmazásaik. Matematika BSc Szakdolgozat

Algoritmusok vektorokkal keresések 1

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

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

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

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

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

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.

Amortizációs költségelemzés

Az informatika logikai alapjai

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

Algoritmuselmélet 1. előadás

Geometriai algoritmusok

INFORMATIKA javítókulcs 2016

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

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

Sorozatok és Sorozatok és / 18

Biomatematika 2 Orvosi biometria

2018, Diszkrét matematika

KOVÁCS BÉLA, MATEMATIKA I.

Gyakorló feladatok ZH-ra

Adatbázis rendszerek Gy: Algoritmusok C-ben

Diszkrét matematika I.

Eötvös Loránd Tudományegyetem Informatikai Kar. Szabó László. Algoritmusok. Feladatgyűjtemény

Egyszerű programozási tételek

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:

Egyesíthető prioritási sor

Dr. Schuster György február / 32

2. Visszalépéses keresés

Nagyordó, Omega, Theta, Kisordó

Diszkrét matematika 1. estis képzés. Komputeralgebra Tanszék ősz

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

PROGRAMOZÁSI TÉTELEK

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

2. Visszalépéses stratégia

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.

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

Intergrált Intenzív Matematika Érettségi

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

Algoritmusok bonyolultsága

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

Érdekes informatika feladatok

Struktúra nélküli adatszerkezetek

2018, Funkcionális programozás

Programozás II. előadás

2015, Diszkrét matematika

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

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

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

Legkönnyebb és legnehezebb Rendezési algoritmusok

A programozás alapjai 1 Rekurzió

Átírás:

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. 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. 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) P2(n,k) = P2(n,n) ha n < k P2(n,k) = P2(n,k 1) + P2(n k,k) ha k < n 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 a 1 > a 2 > > a k. Ezek száma pontosan 2 n, mivel minden ilyen sorozat egyértelműen megadható egy b n,...,b 1 bitvektorral, ahol b x = 1 akkor és csak akkor, ha x eleme a sorozatnak. Mivel k n, ezért k i=1 ai 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

1. ábra. 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. 2

Ö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/2log(n/2)) + d n c n(logn log2) + d n c nlogn, 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 leme 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} 3

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 Legjobb eset T (n) = A felosztás mindig felezi a tömböt. Ekkor T lr (n) = T lr (n 1) + Θ(n) n k=1 Θ(k) = Θ( n k=1 T l j (n) = 2T (n/2) + Θ(n) k) = Θ(n 2 ). T l j (n) = Θ(nlogn) Átlagos eset 4

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. Az összehasonlítások vártható száma n 1 i=1 n j=i+1 2/( j i + 1) = O(nlogn) A hanoi torony probléma Három pálca egyikén n korong van a többi üres. A korongok nagyság szerinti sorrendben helyezkednek el, alul van a legnagyobb. Át akarjuk helyezni a korongokat egy másik pálcára a következő szabályok alapján. Egyszerre csak egy korong mozgatható. A korong vagy üres pálcára vagy egy nála nagyobb korongra helyezhető. Oldjuk meg a feladatot egy rekurzív algoritmussal! Legyen a hanoi eljárás egy olyan algoritmus, amelynek három argumentuma van, az első argumentum azt adja meg, hogy hány korongot helyezünk át, a második megadja, hogy melyik toronyról a harmadik, hogy melyik toronyra. Ekkor az eljárás az (n,1,2) argumentummal megoldja a feladatot. Amennyiben i 1 korongot már át tudunk helyezni, i korongot a következőképpen helyezhetünk át. Elsőként i 1 korongot áthelyezünk az oszlopról egy másik oszlopra. Utána az i-edik korongot rárakjuk a kimaradó üres oszlopra. Végül ezen korong tetejére felrakjuk az i 1 korongot. Ezt a rekurziót írja le a következő eljárás (a megengedett lépést a mozgat függvény írja le). Hanoi(n, rol, ra) If n=1 Then mozgat(rol, ra) Else {hanoi(n-1, rol, 6-rol-ra) mozgat(rol, ra) Hanoi(n-1, 6-rol-ra, ra)} Lépések száma: Az i-edik korong átrakásához kétszer kell i 1 korongot áthelyezni és egy további mozgatás szükséges. Tehát T (i)-vel jelölve az i korong átrakásához szükséges mozgatások számát a T (i) = 2T (i 1) + 1 rekurzív összefüggés áll fenn. T (1) = 1, így T (2) = 3, T (3) = 7. Azt sejthetjük, hogy T (i) = 2 i 1 egyenlőség, amely teljes indukcióval egyszerűen igazolható. Kisdolgozatok Partíciószámot kiszámító algoritmus Partíciószámot kiszámító algoritmus rekurziós fája Gyorsrendezés+Feloszt Hoare Gyorsrendezés+Feloszt Lomuto Feloszt algoritmusok végrehajtása 5