Algoritmuselmélet 2. előadás

Hasonló dokumentumok
A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

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

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

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

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

Algoritmuselmélet 1. előadás

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

Algoritmuselmélet 1. 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.

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

Algoritmusok és adatszerkezetek gyakorlat 07

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

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

Algoritmuselmélet 11. előadás

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

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

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

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

Adatszerkezetek és algoritmusok

PROGRAMOZÁSI TÉTELEK

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

Adatszerkezetek 7a. Dr. IványiPéter

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

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

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

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

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

Gyakorló feladatok ZH-ra

Algoritmusok vektorokkal keresések 1

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

15. A VERSENYRENDEZÉS

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

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

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

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

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

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

Algoritmuselmélet 18. előadás

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

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)

Kupac adatszerkezet. 1. ábra.

Algoritmuselmélet 6. előadás

Algoritmuselmélet 7. előadás

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

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

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

Gyakori elemhalmazok kinyerése

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.

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Adatszerkezetek 2. Dr. Iványi Péter

Algoritmuselmélet 12. előadás

JAVASLAT A TOP-K ELEMCSERÉK KERESÉSÉRE NAGY ONLINE KÖZÖSSÉGEKBEN

Egyirányban láncolt lista

INFORMATIKA javítókulcs 2016

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

Adatbázis rendszerek Gy: Algoritmusok C-ben

7 7, ,22 13,22 13, ,28

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

Adatszerkezetek 1. előadás

Nyugat-magyarországi Egyetem Simonyi Károly Kar. Szabó László. Algoritmusok. Feladatgyűjtemény

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

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

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

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.

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

Adatszerkezetek II. 10. előadás

Egyesíthető prioritási sor

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

Adatszerkezet - műveletek

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

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

Algoritmusok és adatszerkezetek I. 1. előadás

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

17. A 2-3 fák és B-fák. 2-3 fák

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

Programozás alapjai II. (7. ea) C++

Legkönnyebb és legnehezebb Rendezési algoritmusok

Tartalomjegyzék. Algoritmuselmélet előadás jegyzet

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Rendezettminta-fa [2] [2]

angolul: greedy algorithms, románul: algoritmi greedy

2. Visszalépéses keresés

Matematika szintfelmérő dolgozat a 2018 nyarán felvettek részére augusztus

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

14. Mediánok és rendezett minták

Programozás alapjai. 8. előadás

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.

Algoritmusok bonyolultsága

Algoritmuselmélet zárthelyi (BSc képzés) április 24.

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

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

Felvételi tematika INFORMATIKA

Hierarchikus adatszerkezetek

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

Átírás:

Algoritmuselmélet 2. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Február 12.

ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés Input: A[1 : n] (rendezetlen) tömb Ha valamely i-re A[i] > A[i + 1], akkor a két cella tartalmát kicseréljük. A tömb elejéről indulva a cserélgetve eljutunk a tömb végéig.

ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés Input: A[1 : n] (rendezetlen) tömb Ha valamely i-re A[i] > A[i + 1], akkor a két cella tartalmát kicseréljük. A tömb elejéről indulva a cserélgetve eljutunk a tömb végéig. Ekkor a legnagyobb elem A[n]-ben van.

ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés Input: A[1 : n] (rendezetlen) tömb Ha valamely i-re A[i] > A[i + 1], akkor a két cella tartalmát kicseréljük. A tömb elejéről indulva a cserélgetve eljutunk a tömb végéig. Ekkor a legnagyobb elem A[n]-ben van. Ismételjük ezt az A[1 : n 1] tömbre, majd az A[1 : n 2] tömbre, stb.

ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés Input: A[1 : n] (rendezetlen) tömb Ha valamely i-re A[i] > A[i + 1], akkor a két cella tartalmát kicseréljük. A tömb elejéről indulva a cserélgetve eljutunk a tömb végéig. Ekkor a legnagyobb elem A[n]-ben van. Ismételjük ezt az A[1 : n 1] tömbre, majd az A[1 : n 2] tömbre, stb. procedure buborék (* az A[1 : n] tömböt nem csökkenően rendezi *) for (j = n 1, j > 0, j := j 1) do for (i = 1, i j, i := i + 1) do { ha A[i + 1] < A[i], akkor cseréljük ki őket.} összehasonlítások száma: n 1 + n 2 +... + 1 = n(n 1) 2 cserék száma: n(n 1) 2

ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés Input: A[1 : n] (rendezetlen) tömb Ha valamely i-re A[i] > A[i + 1], akkor a két cella tartalmát kicseréljük. A tömb elejéről indulva a cserélgetve eljutunk a tömb végéig. Ekkor a legnagyobb elem A[n]-ben van. Ismételjük ezt az A[1 : n 1] tömbre, majd az A[1 : n 2] tömbre, stb. procedure buborék (* az A[1 : n] tömböt nem csökkenően rendezi *) for (j = n 1, j > 0, j := j 1) do for (i = 1, i j, i := i + 1) do { ha A[i + 1] < A[i], akkor cseréljük ki őket.} összehasonlítások száma: n 1 + n 2 +... + 1 = n(n 1) 2 cserék száma: n(n 1) 2 Java animáció: Buborék rendezés

ALGORITMUSELMÉLET 2. ELŐADÁS 2 Beszúrásos rendezés Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemet A[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb.

ALGORITMUSELMÉLET 2. ELŐADÁS 2 Beszúrásos rendezés Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemet A[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb. összehasonlítás lineáris n(n 1) 2 n 1 bináris log 2 (k + 1) k=1

ALGORITMUSELMÉLET 2. ELŐADÁS 2 Beszúrásos rendezés Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemet A[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb. összehasonlítás mozgatás lineáris n(n 1) 2 (n + 2)(n 1) 2 n 1 bináris log 2 (k + 1) k=1 (n + 2)(n 1) 2

ALGORITMUSELMÉLET 2. ELŐADÁS 2 Beszúrásos rendezés Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemet A[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb. összehasonlítás lineáris n(n 1) 2 n 1 bináris log 2 (k + 1) k=1 mozgatás átlagos összehasonlítás (n + 2)(n 1) 2 n(n 1) 4 (n + 2)(n 1) 2 log 2 (n + 1) n 1 k=1

ALGORITMUSELMÉLET 2. ELŐADÁS 2 Beszúrásos rendezés Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemet A[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb. összehasonlítás mozgatás átlagos összehasonlítás átlagos mozgatás lineáris n(n 1) 2 (n + 2)(n 1) 2 n(n 1) 4 n 2 4 n 1 bináris log 2 (k + 1) k=1 (n + 2)(n 1) 2 log 2 (n + 1) n 1 k=1 n 2 4

ALGORITMUSELMÉLET 2. ELŐADÁS 3 Bináris beszúrásos rendezés lépésszáma K := log 2 2 + log 2 3 +... + log 2 n n log 2 n

ALGORITMUSELMÉLET 2. ELŐADÁS 3 Bináris beszúrásos rendezés lépésszáma K := log 2 2 + log 2 3 +... + log 2 n n log 2 n Jobb becslés: használjuk fel, hogy log 2 k 1 + log 2 k K < n 1 + log 2 2 +... + log 2 n = n 1 + log 2 (n!)

ALGORITMUSELMÉLET 2. ELŐADÁS 3 Bináris beszúrásos rendezés lépésszáma K := log 2 2 + log 2 3 +... + log 2 n n log 2 n Jobb becslés: használjuk fel, hogy log 2 k 1 + log 2 k K < n 1 + log 2 2 +... + log 2 n = n 1 + log 2 (n!) Felhasználva a Stirling formulát: n! (n/e) n 2πn kapjuk, hogy log 2 n! n(log 2 n log 2 e) + 1 2 log 2 n + log 2 2π n(log2 n 1, 442)

ALGORITMUSELMÉLET 2. ELŐADÁS 3 Bináris beszúrásos rendezés lépésszáma K := log 2 2 + log 2 3 +... + log 2 n n log 2 n Jobb becslés: használjuk fel, hogy log 2 k 1 + log 2 k K < n 1 + log 2 2 +... + log 2 n = n 1 + log 2 (n!) Felhasználva a Stirling formulát: n! (n/e) n 2πn kapjuk, hogy log 2 n! n(log 2 n log 2 e) + 1 2 log 2 n + log 2 2π n(log2 n 1, 442) Ezért K n(log 2 n 0, 442) elég nagy n-re.

ALGORITMUSELMÉLET 2. ELŐADÁS 3 Bináris beszúrásos rendezés lépésszáma K := log 2 2 + log 2 3 +... + log 2 n n log 2 n Jobb becslés: használjuk fel, hogy log 2 k 1 + log 2 k K < n 1 + log 2 2 +... + log 2 n = n 1 + log 2 (n!) Felhasználva a Stirling formulát: n! (n/e) n 2πn kapjuk, hogy log 2 n! n(log 2 n log 2 e) + 1 2 log 2 n + log 2 2π n(log2 n 1, 442) Ezért K n(log 2 n 0, 442) elég nagy n-re. Java animáció: Beszúrásos rendezés

ALGORITMUSELMÉLET 2. ELŐADÁS 4 Alsó becslés összehasonlítás alapú rendezésre Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyik sorrendje (permutációja) az igazi sorrend.

ALGORITMUSELMÉLET 2. ELŐADÁS 4 Alsó becslés összehasonlítás alapú rendezésre Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyik sorrendje (permutációja) az igazi sorrend. Kezdetben n! lehetséges sorrend jön szóba.

ALGORITMUSELMÉLET 2. ELŐADÁS 4 Alsó becslés összehasonlítás alapú rendezésre Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyik sorrendje (permutációja) az igazi sorrend. Kezdetben n! lehetséges sorrend jön szóba. Két elemet összehasonlítva, a válasz két részre osztja a sorrendeket. Ha pl. azt kapjuk, hogy x < y, akkor az olyan sorrendek, amikben x hátrébb van y-nál, már nem jönnek szóba.

ALGORITMUSELMÉLET 2. ELŐADÁS 4 Alsó becslés összehasonlítás alapú rendezésre Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyik sorrendje (permutációja) az igazi sorrend. Kezdetben n! lehetséges sorrend jön szóba. Két elemet összehasonlítva, a válasz két részre osztja a sorrendeket. Ha pl. azt kapjuk, hogy x < y, akkor az olyan sorrendek, amikben x hátrébb van y-nál, már nem jönnek szóba. Ha az ellenség megint úgy válaszol, hogy minél több sorrend maradjon meg, akkor k kérdés után még szóba jön n! 2 k sorrend.

ALGORITMUSELMÉLET 2. ELŐADÁS 4 Alsó becslés összehasonlítás alapú rendezésre Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyik sorrendje (permutációja) az igazi sorrend. Kezdetben n! lehetséges sorrend jön szóba. Két elemet összehasonlítva, a válasz két részre osztja a sorrendeket. Ha pl. azt kapjuk, hogy x < y, akkor az olyan sorrendek, amikben x hátrébb van y-nál, már nem jönnek szóba. Ha az ellenség megint úgy válaszol, hogy minél több sorrend maradjon meg, akkor k kérdés után még szóba jön n! sorrend. 2 k Ha n! > 1 nem tudjuk megadni a rendezést. = 2 k Tétel. Minden összehasonlítás alapú rendező módszer n elem rendezésekor legalább log 2 (n!) összehasonlítást használ.

ALGORITMUSELMÉLET 2. ELŐADÁS 5 Összefésüléses rendezés Összefésülés (MERGE): Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba való rendezése:

ALGORITMUSELMÉLET 2. ELŐADÁS 5 Összefésüléses rendezés Összefésülés (MERGE): Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba való rendezése: A[1 : k] és B[1 : l] rendezett tömbök = C[1 : k + l] rendezett tömb

ALGORITMUSELMÉLET 2. ELŐADÁS 5 Összefésüléses rendezés Összefésülés (MERGE): Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba való rendezése: A[1 : k] és B[1 : l] rendezett tömbök = C[1 : k + l] rendezett tömb Nyilván C[1] = min{a[1], B[1]}, pl. A[1],

ALGORITMUSELMÉLET 2. ELŐADÁS 5 Összefésüléses rendezés Összefésülés (MERGE): Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba való rendezése: A[1 : k] és B[1 : l] rendezett tömbök = C[1 : k + l] rendezett tömb Nyilván C[1] = min{a[1], B[1]}, pl. A[1], ezt rakjuk át C-be és töröljük A-ból.

ALGORITMUSELMÉLET 2. ELŐADÁS 5 Összefésüléses rendezés Összefésülés (MERGE): Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba való rendezése: A[1 : k] és B[1 : l] rendezett tömbök = C[1 : k + l] rendezett tömb Nyilván C[1] = min{a[1], B[1]}, pl. A[1], ezt rakjuk át C-be és töröljük A-ból. C[2] = min{a[2], B[1]}, stb.

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18 15, 20, 31 13, 16, 18 12,

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18 15, 20, 31 13, 16, 18 12, 15, 20, 31 16, 18 12, 13

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18 15, 20, 31 13, 16, 18 12, 15, 20, 31 16, 18 12, 13 20, 31 16, 18 12, 13, 15

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18 15, 20, 31 13, 16, 18 12, 15, 20, 31 16, 18 12, 13 20, 31 16, 18 12, 13, 15 20, 31 18 12, 13, 15, 16

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18 15, 20, 31 13, 16, 18 12, 15, 20, 31 16, 18 12, 13 20, 31 16, 18 12, 13, 15 20, 31 18 12, 13, 15, 16 20, 31 12, 13, 15, 16, 18

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18 15, 20, 31 13, 16, 18 12, 15, 20, 31 16, 18 12, 13 20, 31 16, 18 12, 13, 15 20, 31 18 12, 13, 15, 16 20, 31 12, 13, 15, 16, 18 31 12, 13, 15, 16, 18, 20

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18 15, 20, 31 13, 16, 18 12, 15, 20, 31 16, 18 12, 13 20, 31 16, 18 12, 13, 15 20, 31 18 12, 13, 15, 16 20, 31 12, 13, 15, 16, 18 31 12, 13, 15, 16, 18, 20 12, 13, 15, 16, 18, 20, 31

ALGORITMUSELMÉLET 2. ELŐADÁS 6 Példa A B C 12, 15, 20, 31 13, 16, 18 15, 20, 31 13, 16, 18 12, 15, 20, 31 16, 18 12, 13 20, 31 16, 18 12, 13, 15 20, 31 18 12, 13, 15, 16 20, 31 12, 13, 15, 16, 18 31 12, 13, 15, 16, 18, 20 12, 13, 15, 16, 18, 20, 31 összehasonlítások száma: k + l 1, ahol k, l a két tömb hossza

ALGORITMUSELMÉLET 2. ELŐADÁS 7 Összefésüléses rendezés Alapötlet: Rendezzük külön a tömb első felét, majd a második felét, végül fésüljük össze.

ALGORITMUSELMÉLET 2. ELŐADÁS 7 Összefésüléses rendezés Alapötlet: Rendezzük külön a tömb első felét, majd a második felét, végül fésüljük össze. Ezt csináljuk rekurzívan. MSORT(A[1 : n]) := MERGE(MSORT(A[1 : n/2 ]), MSORT(A[ n/2 + 1 : n])). Hogy elvarrjuk a rekurzió alját, legyen MSORT(A[i, i]) az üres utasítás.

ALGORITMUSELMÉLET 2. ELŐADÁS 8 Összehasonlítások száma Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Az egyszerűség kedvéért tegyük fel, hogy n = 2 k.

ALGORITMUSELMÉLET 2. ELŐADÁS 8 Összehasonlítások száma Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Az egyszerűség kedvéért tegyük fel, hogy n = 2 k. T (n) n 1 + 2T (n/2),

ALGORITMUSELMÉLET 2. ELŐADÁS 8 Összehasonlítások száma Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Az egyszerűség kedvéért tegyük fel, hogy n = 2 k. T (n) n 1 + 2T (n/2), T (n) n 1 + 2(n/2 1 + 2T (n/4)) = n 1 + 2(n/2 1) + 4T (n/4).

ALGORITMUSELMÉLET 2. ELŐADÁS 8 Összehasonlítások száma Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Az egyszerűség kedvéért tegyük fel, hogy n = 2 k. T (n) n 1 + 2T (n/2), T (n) n 1 + 2(n/2 1 + 2T (n/4)) = n 1 + 2(n/2 1) + 4T (n/4). T (n) n 1+2(n/2 1)+4(n/4 1)+ +2 k 1 (n/2 k 1 1) n log 2 n. Felhasználva, hogy T (1) = 0.

ALGORITMUSELMÉLET 2. ELŐADÁS 8 Összehasonlítások száma Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Az egyszerűség kedvéért tegyük fel, hogy n = 2 k. T (n) n 1 + 2T (n/2), T (n) n 1 + 2(n/2 1 + 2T (n/4)) = n 1 + 2(n/2 1) + 4T (n/4). T (n) n 1+2(n/2 1)+4(n/4 1)+ +2 k 1 (n/2 k 1 1) n log 2 n. Felhasználva, hogy T (1) = 0. Az összefésüléses rendezés konstans szorzó erejéig optimális.

ALGORITMUSELMÉLET 2. ELŐADÁS 8 Összehasonlítások száma Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Az egyszerűség kedvéért tegyük fel, hogy n = 2 k. T (n) n 1 + 2T (n/2), T (n) n 1 + 2(n/2 1 + 2T (n/4)) = n 1 + 2(n/2 1) + 4T (n/4). T (n) n 1+2(n/2 1)+4(n/4 1)+ +2 k 1 (n/2 k 1 1) n log 2 n. Felhasználva, hogy T (1) = 0. Az összefésüléses rendezés konstans szorzó erejéig optimális. Mozgatások száma: 2n log 2 n

ALGORITMUSELMÉLET 2. ELŐADÁS 8 Összehasonlítások száma Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Az egyszerűség kedvéért tegyük fel, hogy n = 2 k. T (n) n 1 + 2T (n/2), T (n) n 1 + 2(n/2 1 + 2T (n/4)) = n 1 + 2(n/2 1) + 4T (n/4). T (n) n 1+2(n/2 1)+4(n/4 1)+ +2 k 1 (n/2 k 1 1) n log 2 n. Felhasználva, hogy T (1) = 0. Az összefésüléses rendezés konstans szorzó erejéig optimális. Mozgatások száma: 2n log 2 n Tárigény: 2n cella (bonyolultabban megcsinálva elég n + konst.)

ALGORITMUSELMÉLET 2. ELŐADÁS 8 Összehasonlítások száma Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Az egyszerűség kedvéért tegyük fel, hogy n = 2 k. T (n) n 1 + 2T (n/2), T (n) n 1 + 2(n/2 1 + 2T (n/4)) = n 1 + 2(n/2 1) + 4T (n/4). T (n) n 1+2(n/2 1)+4(n/4 1)+ +2 k 1 (n/2 k 1 1) n log 2 n. Felhasználva, hogy T (1) = 0. Az összefésüléses rendezés konstans szorzó erejéig optimális. Mozgatások száma: 2n log 2 n Tárigény: 2n cella (bonyolultabban megcsinálva elég n + konst.) Java animáció: Összefésüléses rendezés

ALGORITMUSELMÉLET 2. ELŐADÁS 9 Kupac adatszerkezet Egy (U, <) rendezett halmaz egy S véges részhalmazát szeretnénk tárolni, hogy a beszúrás és a minimális elem törlése (mintör) hatékony legyen.

ALGORITMUSELMÉLET 2. ELŐADÁS 9 Kupac adatszerkezet Egy (U, <) rendezett halmaz egy S véges részhalmazát szeretnénk tárolni, hogy a beszúrás és a minimális elem törlése (mintör) hatékony legyen. Alkalmazások: Jobok indítása

ALGORITMUSELMÉLET 2. ELŐADÁS 9 Kupac adatszerkezet Egy (U, <) rendezett halmaz egy S véges részhalmazát szeretnénk tárolni, hogy a beszúrás és a minimális elem törlése (mintör) hatékony legyen. Alkalmazások: Jobok indítása Több rendezett halmaz összefésülése

ALGORITMUSELMÉLET 2. ELŐADÁS 9 Kupac adatszerkezet Egy (U, <) rendezett halmaz egy S véges részhalmazát szeretnénk tárolni, hogy a beszúrás és a minimális elem törlése (mintör) hatékony legyen. Alkalmazások: Jobok indítása Több rendezett halmaz összefésülése Gyors rendezési algoritmus

ALGORITMUSELMÉLET 2. ELŐADÁS 9 Kupac adatszerkezet Egy (U, <) rendezett halmaz egy S véges részhalmazát szeretnénk tárolni, hogy a beszúrás és a minimális elem törlése (mintör) hatékony legyen. Alkalmazások: Jobok indítása Több rendezett halmaz összefésülése Gyors rendezési algoritmus Teljes bináris fa: gyökér levelek

ALGORITMUSELMÉLET 2. ELŐADÁS 10 Bináris fa ábrázolása tömbbel A fa csúcsai az A[1 : n] tömb elemei. Az A[i] csúcs bal fia A[2i], a jobb fia pedig A[2i + 1].

ALGORITMUSELMÉLET 2. ELŐADÁS 10 Bináris fa ábrázolása tömbbel A fa csúcsai az A[1 : n] tömb elemei. Az A[i] csúcs bal fia A[2i], a jobb fia pedig A[2i + 1]. = A[j] csúcs apja A[ j/2 ]

ALGORITMUSELMÉLET 2. ELŐADÁS 10 Bináris fa ábrázolása tömbbel A fa csúcsai az A[1 : n] tömb elemei. Az A[i] csúcs bal fia A[2i], a jobb fia pedig A[2i + 1]. = A[j] csúcs apja A[ j/2 ] 8 4 2 5 9 6 6 2 4 6 8 5 9 6

ALGORITMUSELMÉLET 2. ELŐADÁS 10 Bináris fa ábrázolása tömbbel A fa csúcsai az A[1 : n] tömb elemei. Az A[i] csúcs bal fia A[2i], a jobb fia pedig A[2i + 1]. = A[j] csúcs apja A[ j/2 ] 8 4 2 5 9 6 6 2 4 6 8 5 9 6

ALGORITMUSELMÉLET 2. ELŐADÁS 11 Kupac tulajdonság: apa < fia

ALGORITMUSELMÉLET 2. ELŐADÁS 12 Kupacépítés c a b f1 f 2 f 1 és f 2 kupacok

ALGORITMUSELMÉLET 2. ELŐADÁS 12 Kupacépítés a c b felszivárog(f) { Ha min{a, b} < c, akkor min{a, b} és c helyet cserél Ha a c elem a-val cserélt helyet, akkor felszivárog(f 1 ), ha b-vel, akkor felszivárog(f 2 ) } f1 f 2 f 1 és f 2 kupacok

ALGORITMUSELMÉLET 2. ELŐADÁS 12 Kupacépítés a c b felszivárog(f) { Ha min{a, b} < c, akkor min{a, b} és c helyet cserél Ha a c elem a-val cserélt helyet, akkor felszivárog(f 1 ), ha b-vel, akkor felszivárog(f 2 ) } f1 f 2 f 1 és f 2 kupacok c addig megy lefelé, amig sérti a kupac tulajdonságot. Lépésszám: Ha l a fa szintjeinek száma, akkor l 1 csere és 2(l 1) összehasonlítás

ALGORITMUSELMÉLET 2. ELŐADÁS 12 Kupacépítés a c b felszivárog(f) { Ha min{a, b} < c, akkor min{a, b} és c helyet cserél Ha a c elem a-val cserélt helyet, akkor felszivárog(f 1 ), ha b-vel, akkor felszivárog(f 2 ) } f1 f 2 f 1 és f 2 kupacok c addig megy lefelé, amig sérti a kupac tulajdonságot. Lépésszám: Ha l a fa szintjeinek száma, akkor l 1 csere és 2(l 1) összehasonlítás kupacépítés(f) { Az f fa v csúcsaira lentről felfelé, jobbról balra felszivárog(v). }

ALGORITMUSELMÉLET 2. ELŐADÁS 13 Kupacépítés költsége Bináris fában: 1. szint: 1 pont 2. szint: 2 pont 3. szint: 2 2 pont. l-edik szint: > 1 és 2 l 1 pont

ALGORITMUSELMÉLET 2. ELŐADÁS 13 Kupacépítés költsége Bináris fában: 1. szint: 1 pont 2. szint: 2 pont 3. szint: 2 2 pont. l-edik szint: > 1 és 2 l 1 pont = n 1 + l 2 i=0 2i = 2 l 1 = l 1 + log 2 n

ALGORITMUSELMÉLET 2. ELŐADÁS 13 Kupacépítés költsége Bináris fában: 1. szint: 1 pont 2. szint: 2 pont 3. szint: 2 2 pont. l-edik szint: > 1 és 2 l 1 pont = n 1 + l 2 i=0 2i = 2 l 1 = l 1 + log 2 n Az i-edik szinten levő v csúcsra felszivárog(v) költsége legfeljebb l i csere és legfeljebb 2(l i) összehasonlítás.

ALGORITMUSELMÉLET 2. ELŐADÁS 13 Kupacépítés költsége Bináris fában: 1. szint: 1 pont 2. szint: 2 pont 3. szint: 2 2 pont. l-edik szint: > 1 és 2 l 1 pont = n 1 + l 2 i=0 2i = 2 l 1 = l 1 + log 2 n Az i-edik szinten levő v csúcsra felszivárog(v) költsége legfeljebb l i csere és legfeljebb 2(l i) összehasonlítás.

ALGORITMUSELMÉLET 2. ELŐADÁS 14 A cserék száma ezért összesen legfeljebb l i=1 (l i)2i 1. j = l i (azaz i = l j) helyettesítéssel

ALGORITMUSELMÉLET 2. ELŐADÁS 14 A cserék száma ezért összesen legfeljebb l i=1 (l i)2i 1. j = l i (azaz i = l j) helyettesítéssel l 1 j=0 l 1 j2 l j 1 = 2 l 1 j=0 j/2 j < 2 l 2n.

ALGORITMUSELMÉLET 2. ELŐADÁS 14 A cserék száma ezért összesen legfeljebb l i=1 (l i)2i 1. j = l i (azaz i = l j) helyettesítéssel l 1 j=0 l 1 j2 l j 1 = 2 l 1 j=0 j/2 j < 2 l 2n. 1/2 1/4 1/4 1/8. 1/8 1/8 1 1 1 2 l 1 2 l 1 1 2 l 1... 2 l 1 < 1 < 1/2 < 1/4 < 1 2 l 1

ALGORITMUSELMÉLET 2. ELŐADÁS 14 A cserék száma ezért összesen legfeljebb l i=1 (l i)2i 1. j = l i (azaz i = l j) helyettesítéssel l 1 j=0 l 1 j2 l j 1 = 2 l 1 j=0 j/2 j < 2 l 2n. 1/2 1/4 1/4 1/8. 1/8 1/8 1 1 1 2 l 1 2 l 1 1 2 l 1... 2 l 1 < 1 < 1/2 < 1/4 < 1 2 l 1 Tétel. Kupacépítés költsége: O(n)

ALGORITMUSELMÉLET 2. ELŐADÁS 14 A cserék száma ezért összesen legfeljebb l i=1 (l i)2i 1. j = l i (azaz i = l j) helyettesítéssel l 1 j=0 l 1 j2 l j 1 = 2 l 1 j=0 j/2 j < 2 l 2n. 1/2 1/4 1/4 1/8. 1/8 1/8 1 1 1 2 l 1 2 l 1 1 2 l 1... 2 l 1 < 1 < 1/2 < 1/4 < 1 2 l 1 Tétel. Kupacépítés költsége: O(n)

ALGORITMUSELMÉLET 2. ELŐADÁS 15 MINTÖR A minimális elem az f gyökérben van, ezt töröljük.

ALGORITMUSELMÉLET 2. ELŐADÁS 15 MINTÖR A minimális elem az f gyökérben van, ezt töröljük. A f-be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f).

ALGORITMUSELMÉLET 2. ELŐADÁS 15 MINTÖR A minimális elem az f gyökérben van, ezt töröljük. A f-be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f). 8 4 2 5 9 6

ALGORITMUSELMÉLET 2. ELŐADÁS 15 MINTÖR A minimális elem az f gyökérben van, ezt töröljük. A f-be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f). 8 8 4 4 9 5 2 2 5 9 6 6

ALGORITMUSELMÉLET 2. ELŐADÁS 15 MINTÖR A minimális elem az f gyökérben van, ezt töröljük. A f-be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f). 8 8 8 5 4 4 4 9 2 9 5 2 2 5 9 6 6 6

ALGORITMUSELMÉLET 2. ELŐADÁS 15 MINTÖR A minimális elem az f gyökérben van, ezt töröljük. A f-be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f). 8 8 8 5 4 4 4 9 2 9 5 2 2 5 9 6 6 6 Költség: O(l) = O(log 2 n)

ALGORITMUSELMÉLET 2. ELŐADÁS 16 BESZÚR Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet. Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával.

ALGORITMUSELMÉLET 2. ELŐADÁS 16 BESZÚR Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet. Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával. 2 4 6 8 5 9 1

ALGORITMUSELMÉLET 2. ELŐADÁS 16 BESZÚR Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet. Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával. 8 5 9 1 4 6 2 2 4 1 8 5 9 6

ALGORITMUSELMÉLET 2. ELŐADÁS 16 BESZÚR Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet. Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával. 8 5 9 1 4 6 2 2 4 1 8 5 9 6 8 5 9 6 4 2 1

ALGORITMUSELMÉLET 2. ELŐADÁS 16 BESZÚR Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet. Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával. 8 5 9 1 4 6 2 2 4 1 8 5 9 6 8 5 9 6 4 2 1 Költség: O(l) = O(log 2 n)

ALGORITMUSELMÉLET 2. ELŐADÁS 17 A kupacos rendezés Először kupacot építünk, utána n darab MINTÖR adja nem csökkenő sorrendben az elemeket. [J. W. J. Williams és R. W. Floyd, 1964]

ALGORITMUSELMÉLET 2. ELŐADÁS 17 A kupacos rendezés Először kupacot építünk, utána n darab MINTÖR adja nem csökkenő sorrendben az elemeket. [J. W. J. Williams és R. W. Floyd, 1964] Költség: O(n) + O(n log 2 n) = O(n log 2 n)

ALGORITMUSELMÉLET 2. ELŐADÁS 17 A kupacos rendezés Először kupacot építünk, utána n darab MINTÖR adja nem csökkenő sorrendben az elemeket. [J. W. J. Williams és R. W. Floyd, 1964] Költség: O(n) + O(n log 2 n) = O(n log 2 n) Legjobb ismert rendező algoritmus. Pontos implementációval: 2n log 2 n + 3n (összehasonlítások száma) és n log 2 n + 2, 5n (cserék száma).

ALGORITMUSELMÉLET 2. ELŐADÁS 17 A kupacos rendezés Először kupacot építünk, utána n darab MINTÖR adja nem csökkenő sorrendben az elemeket. [J. W. J. Williams és R. W. Floyd, 1964] Költség: O(n) + O(n log 2 n) = O(n log 2 n) Legjobb ismert rendező algoritmus. Pontos implementációval: 2n log 2 n + 3n (összehasonlítások száma) és n log 2 n + 2, 5n (cserék száma). Java animáció: Kupacos rendezés