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

Hasonló dokumentumok
Adatszerkezetek I. 4. előadás

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

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

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

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

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

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

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

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

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

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

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

Kupac adatszerkezet. 1. ábra.

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

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Adatszerkezetek II. 1. előadás

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

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

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

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

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

Multihalmaz, intervallumhalmaz

Adatszerkezetek I. 6. előadás

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

Gyakorló feladatok ZH-ra

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

15. A VERSENYRENDEZÉS

Egyirányban láncolt lista

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

Visszalépéses keresés

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

Adatszerkezetek 1. előadás

Struktúra nélküli adatszerkezetek

Adatszerkezetek 1. Dr. Iványi Péter

Algoritmuselmélet 2. előadás

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

Adatszerkezetek I. 1. előadás

Programozási alapismeretek 3. előadás

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

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

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

Algoritmizálás és adatmodellezés 2. előadás

Az absztrakt adattípus egy (E,M) párral adható meg, ahol E az értékhalmaz, M a műveletek halmaza. Fő tulajdonságok. Verem

Adatszerkezetek és algoritmusok

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

Programozás II. előadás

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

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

Halmaz típus Értékhalmaz:

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

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 2. Dr. Iványi Péter

Egyszerű programozási tételek

Adatszerkezetek 2. Dr. Iványi Péter

Önszervező bináris keresőfák

Adatszerkezetek I. 9. előadás

Adatszerkezetek 7a. Dr. IványiPéter

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

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

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

A gráffogalom fejlődése

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

Adatbázis rendszerek Gy: Az adattárolás fejlődése

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

Egyszerű programozási tételek

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

Programozási segédlet

Adatszerkezetek II. 10. előadás

Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

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

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.

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

Regresszió. Csorba János. Nagyméretű adathalmazok kezelése március 31.

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Verem Verem mutató 01

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

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

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.

Érdekes informatika feladatok

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

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

21. Adatszerkezetek Az adattípus absztrakciós szintjei Absztrakt adattípus (ADT) Absztrakt adatszerkezet (ADS) Egyszerű adattípusok Tömbö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.

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

ADATBÁZIS-KEZELÉS ALAPOK I.

Összetett programozási tételek

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

Hierarchikus adatszerkezetek

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

Visszalépéses kiválogatás

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

Adatbázis és szoftverfejlesztés elmélet. 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.

ELEMI PROGRAMOZÁSI TÉTELEK

Számjegyes vagy radix rendezés

Rendezettminta-fa [2] [2]

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

Átírás:

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

Kupac A kupac olyan véges elemsokaság, amely rendelkezik az alábbi tulajdonságokkal: 1. Minden elemnek legfeljebb két rákövetkezője (leszármazottja) lehet. Azaz bináris fának tekinthető. 2. Minden eleme kisebb (vagy egyenlő) a közvetlen leszármazottainál. 3. A kupac balról folytonos, azaz ha nem teljes a fa, akkor csak a legutolsó szintből hiányozhatnak elemek, de azok is csak a szint jobb széléről. 5 1 2 6 3 4 7 8 Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 2/36

Kupac A kupac ábrázolható folytonosan, tömbben: Az elhelyezésre a következő szabályok érvényesek: Az i. elem baloldali rákövetkezője a 2*i. elem. Az i. elem jobboldali rákövetkezője a 2*i+1. elem. Az i. elem előzője az i div 2. elem. 5 1 2 6 3 4 7 8 Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 3/36

Kupac Műveletei: Üres, üres?, első, Felcsúsztat, Lecsúsztat, Kupacba, Kupacból Üres: Kupac üres?(kupac): Logikai első(kupac): Elem {NemDef} Kupacba(Kupac,Elem): Kupac {NemDef} Kupacból(Kupac,Elem): (Kupac Elem) {NemDef} Felcsúsztat(Kupac,Index): Kupac Lecsúsztat(Kupac,Index): Kupac Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 4/36

Kupac A műveletek specifikációja Üres(K): ef:, uf: K=() üres?(k): ef:, uf: üres?=k=() Kupacba(K,e): ef: K=W és kupac(k), uf: K=(W e) és kupac(k) Kupacból(K,e): ef: K=(f,W) és kupac(k), uf: K=W és e=f és kupac(k) első(k): ef: K=(f,W), uf: K=(f,W) és első=f Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 5/36

Kupac Kupac ábrázolása: Rekord(N: Egész; t: Tömb(1..MaxN:Elemtípus), hiba: Logikai) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 6/36

Kupac Műveletek megvalósítása: Üres(K): K.N:=0 üres?(k): üres?:=(k.n=0) Függvény vége. első(k): első:=k.t(1) Függvény vége. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 7/36

Kupac Elem berakása: Kupacba([1,3,6,5,4,7,8],2) [1,2,6,3,4,7,8,5] 1 3 6 5 4 7 8 Elem berakása Felcsúsztatás: 2 1 3 6 5 4 7 8 5 1 3 6 2 4 7 8 5 1 2 6 3 4 7 8 Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 8/36

Kupac Kupacba(K,e): K.N:=K.N+1; K.t(K.N):=e; Felcsúsztat(K,K.N) Felcsúsztat(K,i): Ha i>1 akkor Ha K.t(i)<K.t(i div 2) akkor Csere(K.t(i),K.t(i div 2)) Felcsúsztat(k,i div 2) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 9/36

Kupac Felcsúsztat(K,i): Ciklus amíg i>1 és K.t(i)<K.t(i div 2) Csere(K.t(i),K.t(i div 2)) i:=i div 2 Ciklus vége Kupacból(K,e): e:=k.t(1); K.t(1):=K.t(K.N); K.N:=K.N-1 Lecsúsztat(K,1) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 10/36

Kupac Elemkivétel: Kupacból([1,2,6,3,4,7,8,5]) (1,[2,3,6,5,4,7,8]) 5 1 2 6 3 4 7 Előrehozás + lecsúsztatás: 8 Elemkiolvasás Utolsó előre fuss! 5 2 6 3 4 7 8 2 5 6 3 4 7 8 2 3 6 5 4 7 8 Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 11/36

Kupac Lecsúsztat(K,i): Ha i K.N div 2 akkor j:=kisebb(2*i,2*i+1) Ha K.t(i)>K.t(j) akkor Csere(K.t(i),K.t(j)) Lecsúsztat(K,j) kisebb(j,k): Ha k>k.n vagy K.t(j) K.t(k) akkor kisebb:=j különben kisebb:=k 3 6 5 7 8 Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 12/36

Kupac Lecsúsztat(K,i): j:=kisebb(2*i,2*i+1) Ciklus amíg i K.N div 2 és K.t(i)>K.t(j) Csere(K.t(i),K.t(j)) i:=j; j:=kisebb(2*i,2*i+1) Ciklus vége Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 13/36

Kupac Műveletigény: Lecsúsztat = Kupacból: O(log 2 (N)) Felcsúsztat = Kupacba: O(log 2 (N)) Használjuk a kupacot rendezésre! Rendezési idő: O(N*log 2 (N)) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 14/36

Kupacrendezés Rendez(X): Üres(K) Ciklus i=1-től N-ig Kupacba(K,X(i)) Ciklus vége Ciklus i=1-től N-ig Kupacból(K,X(i)) Ciklus vége Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 15/36

Prioritási sor: speciális sor Mindig a legfontosabb (minimális vagy maximális) lép ki belőle. Műveletei: Üres, üres?, PrSorba, PrSorból, első. Emlékeztető (ciklikus tömb megvalósítás esetén): időrendbeli tárolás (kb.) Sorba végére O(1), Sorból minimumkiválasztás, majd az utolsó a minimum helyére O(N) nagyság szerinti tárolás Sorba beillesztés a helyére O(N), Sorból elejéről O(1) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 16/36

Prioritási sor megvalósítása kupaccal Ötletek: A prioritási sor speciális kupac, ahol elemek sorszámát tároljuk, egy prioritás tömbben pedig a prioritásukat. (Ha egyéb jellemzőjük lenne, azt is külön tárolnánk.) A prioritási sor speciális kupac, ahol az elemek rekordok, és az egyik mezőjük a prioritás. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 17/36

Prioritási sor ábrázolása (kupac+prioritás tömb): Rekord(N: egész, t: Tömb(1..MaxN: Egész), pr: Tömb(1..MaxN:Egész)) Műveletei: Üres, üres?, PrSorba, PrSorból, első Megoldás: újraírjuk a kupac műveleteit. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 18/36

Műveletek megvalósítása: Üres(P): P.N:=0 üres?(p): üres?:=(p.n=0) Függvény vége. első(p): első:=p.t(1) Függvény vége. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 19/36

PrSorba(P,e,pr): P.N:=P.N+1; P.t(P.N):=e; P.pr(e):=pr Felcsúsztat(P,P.N) PrSorból(P,e,pr): e:=p.t(1); pr:=p.pr(e); P.t(1):=P.t(P.N) P.N:=P.N-1; Lecsúsztat(P,1) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 20/36

Felcsúsztat(P,i): Ha i>1 akkor Ha P.pr(P.t(i))<P.pr(P.t(i div 2)) akkor Csere(P.t(i),P.t(i div 2)) Felcsúsztat(k,i div 2) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 21/36

Lecsúsztat(P,i): Ha i P.N div 2 akkor j:=kisebb(2*i,2*i+1) Ha P.pr(P.t(i))>P.pr(P.t(j)) akkor Csere(P.t(i),P.t(j)) Lecsúsztat(P,j) kisebb(j,k): Ha k>p.n vagy P.pr(P.t(j)) P.pr(P.t(k)) akkor kisebb:=j különben kisebb:=k Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 22/36

Prioritási sor ábrázolása (kupac rekord elemekkel): Rekord(N: egész, t: Tömb(1..MaxN: Elemtípus)) Elemtípus=Rekord(pr: Egész, egyéb: Egyébtípus) Műveletei: Üres, üres?, PrSorba, PrSorból, első Megoldás: újraírjuk a kupac műveleteit. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 23/36

Műveletek megvalósítása: Üres(P): P.N:=0 üres?(p): üres?:=(p.n=0) Függvény vége. első(p): első:=p.t(1) Függvény vége. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 24/36

PrSorba(P,e): P.N:=P.N+1; P.t(P.N):=e Felcsúsztat(P,P.N) PrSorból(P,e): e:=p.t(1); P.t(1):=P.t(P.N); P.N:=P.N-1 Lecsúsztat(P,1) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 25/36

Felcsúsztat(P,i): Ha i>1 akkor Ha P.t(i).pr<P.t(i div 2).pr akkor Csere(P.t(i),P.t(i div 2)) Felcsúsztat(P,i div 2) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 26/36

Lecsúsztat(P,i): Ha i P.N div 2 akkor j:=kisebb(2*i,2*i+1) Ha P.t(i).pr>P.t(j).pr akkor Csere(P.t(i),P.t(j)) Lecsúsztat(P,j) kisebb(j,k): Ha k>p.n vagy P.t(j).pr P.t(k).pr akkor kisebb:=j különben kisebb:=k Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 27/36

Prioritási sor megvalósítása kupaccal értékelés A prioritási sor speciális kupac, ahol elemek sorszámát tároljuk, egy prioritás tömbben pedig a prioritásukat. Csak akkor alkalmazható, ha az elemek sorszámozhatók. Gazdaságos az elemek kupacban való mozgatása miatt. A prioritási sor speciális kupac, ahol az elemek rekordok, s az egyik mezőjük a prioritás. Egyszerűbb megvalósítás, nem sorszámozható elemekre is. Lassú lehet hosszú elemek mozgatása a kupacban. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 28/36

Módosítható prioritási sor ábrázolása (kupac + volt tömb), ha csak felfelé mozgás van: Rekord(N: egész, t: Tömb(1..MaxN: Elemtípus), volt: Tömb(1..MaxN: Logikai)) Műveletei: Üres, üres?, PrSorba, PrSorból, első A már sorban levő elemeket prioritásuk megváltozása esetén újra felvesszük, a már kivetteket kivételkor lépjük át. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 29/36

Ha egy elemet már kivettünk a sorból (a megnőtt prioritással), akkor újabb kivétel esetén eldobjuk. PrSorból(P,e): Ciklus e:=p.t(1); P.t(1):=P.t(P.N); P.N:=P.N-1 Lecsúsztat(P,1) amíg P.volt(e.index) Ciklus vége P.volt(e.index):=igaz Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 30/36

Módosítható prioritási sor ábrázolása (kupac + prioritás tömb + index tömb): Rekord(N: egész, t: Tömb(1..MaxN: Elemtípus), pr: Tömb(1..MaxN: Egész), index: Tömb(1..MaxN: Egész)) Műveletei: Üres, üres?, PrSorba, PrSorból, első, Fel, Le A már sorban levő elemeket prioritásuk megváltozása esetén mozgatni kell, azaz tudnunk kell, hol voltak. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 31/36

Műveletek megvalósítása: Üres(P): P.N:=0 üres?(p): üres?:=(p.n=0) Függvény vége. első(p): első:=p.t(1) Függvény vége. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 32/36

PrSorba(P,e,pr): P.N:=P.N+1; P.t(P.N):=e; P.pr(e):=pr P.index(e):=P.N; Felcsúsztat(P,P.N) PrSorból(P,e,pr): e:=p.t(1); pr:=p.pr(e); P.t(1):=P.t(P.N) P.N:=P.N-1; P.index(P.t(1)):=1; Lecsúsztat(P,1) Le(P,i): Lecsúsztat(P,P.index(i)) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 33/36

Lecsúsztat(P,i): Ha i P.N div 2 akkor j:=kisebb(2*i,2*i+1) Ha P.pr(P.t(i))>P.pr(P.t(j)) akkor Csere(P.t(i),P.t(j)) P.index(P.t(i)):=i P.index(P.t(j)):=j Lecsúsztat(P,j) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 34/36

Fel(P,i): Felcsúsztat(P,P.index(i)) Felcsúsztat(P,i): Ha i>1 akkor Ha P.pr(P.t(i))<P.pr(P.t(i div 2)) akkor Csere(P.t(i),P.t(i div 2)) P.index(P.t(i)):=i P.index(P.t(i div 2)):=i div 2 Felcsúsztat(P,i div 2) Szlávi Péter, Zsakó László: Adatszerkezetek I. 2018. 03. 05. 14:27 35/36

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