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

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

Programozás II. előadás

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

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

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

Kupac adatszerkezet. 1. ábra.

Közismereti informatika I. 4. előadás

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

Fák Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

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

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

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

Számjegyes vagy radix rendezés

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

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

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

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Tartalom. Programozási alapismeretek. 11. előadás

Bináris keresőfa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor

Algoritmusok és adatszerkezetek gyakorlat 07

Egyszerű programozási tételek

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

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

Egyszerű programozási tételek

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

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

Adatszerkezetek I. 4. előadás

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

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

Algoritmusok vektorokkal keresések 1

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

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

Algoritmuselmélet 2. előadás

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

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

Programozási tételek. PPT 2007/2008 tavasz.

Fa (Tree): csomópontok (nodes) halmaza, amelyeket élek (edges) kötnek össze, és teljesülnek az alábbi feltételek:

Önszervező bináris keresőfák

Programozási alapismeretek 11. előadás

Adatszerkezet - műveletek

Információs Technológia

Informatikai tehetséggondozás:

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül.

Hasító táblázatok. Hasító függvények, kulcsütközés kezelése. Programozás II. előadás. Szénási Sándor

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

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

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

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

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

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

PROGRAMOZÁSI TÉTELEK

15. A VERSENYRENDEZÉS

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

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

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

Adatszerkezetek és algoritmusok

Gyakorló feladatok ZH-ra

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

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

Elemi adatszerkezetek

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

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

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

GRÁFOK ÉS ALGORITMUSOK ELMÉLETE VIZSGAKÉRDÉSEK Matematika BSc Elemző szakirány II. év 1. félév

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.

Összetett programozási tételek

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

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

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

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

KUPAC TĺPUSÚ ADATSZERKEZETEK

9. előadás. A táblázat. A táblázatról általában, soros, önátrendező, rendezett és kulcstranszformációs táblázat

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

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.

Láncolt listák Témakörök. Lista alapfogalmak

Adatszerkezetek 2. Dr. Iványi Péter

Láncolt listák. PPT 2007/2008 tavasz.

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

ELEMI 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 1. előadás

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

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

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.

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

Programozási segédlet

Fák 3. előadás. (Horváth Gyula anyagai felhasználásával)

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

Az összetett programozási tételek is egy tőről fakadnak

A PhysioBank adatmegjelenítő szoftvereinek hatékonysága

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

RENDEZÉSEK, TOVÁBBI PROGRAMOZÁSI TÉTELEK

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.

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

Optimalizációs stratégiák 1.

5. A gráf, mint adatstruktúra Gráfelméleti bevezető

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

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

Hierarchikus adatszerkezetek

Eljárások és függvények

Átírás:

Haladó rendezések szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1

Témakörök Alapvető összehasonlító rendezések Shell rendezés Kupacrendezés Leszámláló rendezés Radix rendezés Edényrendezés 2

Rendezés fogalma Alapfeladat: Egy A nevű N elemű sorozat elemeinek nagyság szerinti sorrendbe rendezése Feltételezzük: A sorozat elemei olyanok, amelyekre a <, relációk léteznek. A sorozathoz létezik indexelés művelet A módszerek összehasonlításának alapja: tárigény idő (végrehajtott műveletek száma) (bonyolultság) Általunk tárgyalt típusok összehasonlító rendezések nem összehasonlító rendezések 3

Egyszerű cserés rendezés Eljárás Rendezés(N, A) Ciklus i 1-től N-1-ig Ciklus j i+1-től N-ig Ha A[i] > A[j] akkor A[i] A[j] Elágazás vége Eljárás vége Tárigény: N+1 Lépésszám Hasonlítás: N*(N-1)/2 O(n 2 ) Mozgatás: 0 3*N*(N-1)/2 O(n 2 ) 4

Minimumkiválasztásos rendezés Eljárás Rendezés(N, A) Ciklus i 1-től N-1-ig MIN i Ciklus j i+1-től N-ig Ha A[MIN] > A[j] akkor MIN j A[i] A[MIN] Eljárás vége Tárigény: N+1 Lépésszám Hasonlítás: N*(N-1)/2 O(n 2 ) Mozgatás: 0 3*(N-1) O(n) 5

Buborékos rendezés Eljárás Rendezés(N, A) Ciklus i N-től 2-ig Ciklus j 1-től i-1-ig Ha A[j] > A[j+1] akkor A[j] A[j+1] Elágazás vége Eljárás vége Tárigény: N+1 Lépésszám Hasonlítás: N*(N-1)/2 O(n 2 ) Mozgatás: 0 3*N*(N-1)/2 O(n 2 ) 6

Javított buborékos rendezés Eljárás Rendezés(N, A) i N Ciklus amíg i 2 CS 0 Ciklus j 1-től i-1-ig Ha A[j] > A[j+1] akkor A[j] A[j+1] CS j Elágazás vége i CS Eljárás vége Tárigény: N+1 Hasonlítás: O(n 2 ) Mozgatás: O(n 2 ) 7

Beillesztéses rendezés Eljárás Rendezés(N, A) Ciklus i 2-től N-ig j i-1 Ciklus amíg (j 0) és (A[j] > A[j+1]) A[j] A[j+1] j j - 1 Eljárás vége Tárigény: N+1 Hasonlítás: O(n 2 ) Mozgatás: O(n 2 ) 8

Javított beillesztéses rendezés Eljárás Rendezés(N, A) Ciklus i 2-től N-ig j i-1 Y A[i] Ciklus amíg (j 0) és (A[j] > Y) A[j+1] A[j] j j - 1 A[j+1] Y Eljárás vége Tárigény: N+1 Hasonlítás: O(n 2 ) Mozgatás: O(n 2 ) 9

Témakörök Alapvető összehasonlító rendezések Shell rendezés Kupacrendezés Leszámláló rendezés Radix rendezés Edényrendezés 10

Shell rendezés Eljárás Rendezés(N, A, L0) L L0 Ciklus amíg L 1 Ciklus k L+1-től 2*L-ig Ciklus i k-tól N-ig L-esével j i L; y A[i] Ciklus amíg (j > 0) és (A[j] > y) A[j + L] A[j]; j j L A[j + L] y L Következő_L(L) Elágazás vége Lépésszám: O(n*log 2 n) 11

Témakörök Alapvető összehasonlító rendezések Shell rendezés Kupacrendezés Leszámláló rendezés Radix rendezés Edényrendezés 12

Kupac adatszerkezet Bináris kupac: Egy majdnem teljes bináris fa egy tömbben ábrázolva A tömb mérete = kupac mérete = N 1 2 3 1 2 3 4 5 4 5 Fa kupac megfeleltetés Szülő(i) : i / 2 Bal(i) : 2 * i Jobb(i) : 2 * i + 1 13

Kupac tulajdonság Kupac tulajdonság: A kupac minden i, gyökértől különböző eleme esetén: A[Szülő(i)] A[i] Tehát egy olyan bináris fát képvisel, amelyre igaz, hogy minden csúcs bal és jobb oldali részfájában csak kisebb vagy egyenlő értékek találhatók. Ez nem azonos a tanult bináris keresőfa adatszerkezettel! 20 18 14 8 16 14

Kupactulajdonság fenntartása Kupacol: Eljárás Kupacol(A, i, N) b Bal(i); j Jobb(i) Ha b N és A[b] > A[i] akkor MAX b különben MAX i Ha j N és A[j] > A[MAX] akkor MAX j Ha MAX i akkor A[i] A[MAX] Kupacol(A, MAX, N) Elágazás vége Eljárás vége Feltételezzük, hogy a bal és jobb oldali részfák kupac szerkezetűek. Ha A[i] kisebb valamelyik gyerekénél, akkor megsérti a kupactulajdonságot. 15

Kupac építése Kupacot-épít: Eljárás Kupacot-épít(A) N Tömb_méret(A) Ciklus i N/2 -től 1-ig Kupacol(A, i, N) Eljárás vége Az A tömböt alulról felfelé haladva kupaccá alakítjuk Az N/2 -től N-ig terjedő index elemek levelek, tehát egy elemű (a kupactulajdonságot teljesítő) fáknak tekinthetőek, így csak a többi csúcsot kell ellenőrizni A feldolgozás sorrendje garantálja a Kupacol eljárás előfeltételét 16

A kupacrendezés Kupacrendezés: Eljárás Kupacrendezés(A) Kupacot-épít(A) Ciklus i N-től 2-ig A[1] A[i] N N 1 Kupacol(A, 1, N) Eljárás vége A kupacban a gyökérelem biztosan a legnagyobb Ötlet: ezt helyezzük a tömb végére, zárjuk ki a kupacból, majd a maradék elemekből építsünk újra kupacot 17

Kupacba beszúrás Kupacba-beszúr: Eljárás Kupacba-beszúr(A, kulcs) N N + 1 i N Ciklus amíg (i > 1) és (A[Szülő(i)] < kulcs) A[i] A[Szülő(i)] i Szülő(i) A[i] kulcs Eljárás vége A kupac kibővítése után beszúró rendezésnél látott módon megkeresi az új kulcs helyét a kupacban 18

Kupacrendezés elemzése A kupacrendezés futási ideje: O(n*lgn) Összehasonlító rendezés Műveletei: Beszúrás Maximum Kivesz-maximum Kupacba-beszúr Gyakorlati alkalmazása: elsőbbségi sorok 19

Témakörök Alapvető összehasonlító rendezések Shell rendezés Kupacrendezés Leszámláló rendezés Radix rendezés Edényrendezés 20

Szétosztó rendezés Feltételezzük, hogy a kulcsok 1 és N közötti egész számok, és nincs két azonos kulcsú rekord Eljárás Szétosztó-rendezés(A, B, N) Ciklus i 1-től N-ig B[A[i].kulcs] A[i] Eljárás vége Lépésszám: O(n) Ha a kulcsok nem fedik le teljesen az 1.. N intervallumot, akkor kezelni kell az üres helyeket az eredményben 21

Leszámláló rendezés Eljárás Leszámláló-rendezés(A, B, N, K) C[] 0 Ciklus i 1-től N-ig C[A[i].kulcs] C[A[i].kulcs] + 1 Ciklus i 2-től K-ig C[i] C[i] + C[i-1] Ciklus i N-től 1-ig B[C[A[i].kulcs]] A[i] C[A[i].kulcs] C[A[i].kulcs] 1 Eljárás vége Lépésszám: O(n) 22

Leszámláló rendezés - bemenet A 2 Peti 3 Kati 1 Feri 4 Mari 1 Mici 5 Laci 1 Móni 1 Pali 4 Béni 5 Sanyi 2 Tóni 3 Teri C B 23

Leszámláló rendezés 1. lépés A 2 Peti 3 Kati 1 Feri 4 Mari 1 Mici 5 Laci 1 Móni 1 Pali 4 Béni 5 Sanyi 2 Tóni 3 Teri C 4 2 2 2 2 B 24

Leszámláló rendezés 2. lépés A 2 Peti 3 Kati 1 Feri 4 Mari 1 Mici 5 Laci 1 Móni 1 Pali 4 Béni 5 Sanyi 2 Tóni 3 Teri C 4 6 8 10 12 B 25

Leszámláló rendezés 3. lépés A 2 Peti 3 Kati 1 Feri 4 Mari 1 Mici 5 Laci 1 Móni 1 Pali 4 Béni 5 Sanyi 2 Tóni 3 Teri C 4 6 7 10 12 B 3 Teri 26

Leszámláló rendezés 3-2. lépés A 2 Peti 3 Kati 1 Feri 4 Mari 1 Mici 5 Laci 1 Móni 1 Pali 4 Béni 5 Sanyi 2 Tóni 3 Teri C 4 5 7 10 12 B 2 Tóni 3 Teri 27

Leszámláló rendezés 3-N. lépés A 2 Peti 3 Kati 1 Feri 4 Mari 1 Mici 5 Laci 1 Móni 1 Pali 4 Béni 5 Sanyi 2 Tóni 3 Teri C 0 4 6 8 10 B 1 Feri 1 Mici 1 Móni 1 Pali 2 Peti 2 Tóni 3 Kati 3 Teri 4 Mari 4 Béna 5 Laci 5 Sanyi Stabil: megtartja az azonos kulcsú elemek sorrendjét! 28

Témakörök Alapvető összehasonlító rendezések Shell rendezés Kupacrendezés Leszámláló rendezés Radix rendezés Edényrendezés 29

Radix (számjegyes) rendezés Radix rendezés Eljárás Radix-rendezés(A, D) Ciklus j 1-től D-ig Paraméterei {Stabil rendezés az i. számjegyen } Eljárás vége A rendezendő számokat tartalmazó tömb D számjegyek darabszáma Azonos hosszúságú számok, szövegek, struktúrák esetén használható Lépésszám: O(n) 30

Radix rendezés menete Eredeti 1. lépés 2. lépés 3. lépés 412 657 542 211 457 554 154 551 151 154 134 382 211 551 151 412 542 382 554 154 154 134 657 457 211 412 134 542 551 151 554 154 154 657 457 382 134 151 154 154 211 382 412 457 542 551 554 657 31

Radix rendezés a gyakorlatban Gyakorlati megvalósítások: Régen lyukkártyák Számjegyenkénti rendezés Szövegek rendezése Dátumok rendezése (év-hó-nap) Ha nem azonos hosszúságú minden szó, a rövidebbek elejét ki kell egészíteni! 32

Témakörök Alapvető összehasonlító rendezések Shell rendezés Kupacrendezés Leszámláló rendezés Radix rendezés Edényrendezés 33

Edényrendezés Edényrendezés Eljárás Edény-rendezés(A, N) Ciklus i 1-től N-ig Listába_beszúrás(B[f(A[i])], A[i]) Ciklus i 1-től M ig Lista_rendezés(B[i]) Ciklus i 1-től M ig Lista_összefűzés(C, B[i]) Eljárás vége 34

Edényrendezés a gyakorlatban Akkor alkalmazható hatékonyan, ha a bemenet elemei egy megfelelő hasító függvény segítségével egyenletesen oszthatók el egy 1..M intervallumon Ideális esetben M = N Amennyiben az elosztás egyenletes, az egyes elemekben található láncolt listák elemtartalma kicsi lesz, így azok rendezése gyorsan végrehajtható 35

Javasolt/felhasznált irodalom Cormen, Leiserson, Rivest: Algoritmusok Műszaki Könyvkiadó, 1997 Pap, Szlávi, Zsakó: µlógia34 Módszeres programozás ELTE TTK, 2002 Knuth: A számítógép programozás művészete 3. Műszaki Könyvkiadó, 1988 36