Adatszerkezetek I. 4. előadás

Hasonló dokumentumok
Algoritmusok és adatszerkezetek I. 3. 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

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

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

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

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

Algoritmusok és adatszerkezetek I. 4. 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

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

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

Multihalmaz, intervallumhalmaz

Adatszerkezetek II. 1. előadás

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

Adatszerkezetek I. 6. előadás

Adatszerkezetek 1. Dr. Iványi Péter

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

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

Algoritmuselmélet 2. előadás

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

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

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

Struktúra nélküli adatszerkezetek

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

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

Adatszerkezetek 1. előadás

Adatszerkezetek I. 9. előadás

Halmaz típus Értékhalmaz:

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

Programozás II. előadás

Visszalépéses keresés

Ö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 és adatszerkezetek I. 2. előadás

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

Gyakorló feladatok ZH-ra

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

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

Egyirányban láncolt lista

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

Programozási alapismeretek 3. előadás

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

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

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

Adatszerkezetek 2. Dr. Iványi Péter

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

Önszervező bináris keresőfák

Adatszerkezetek II. 10. előadás

Egyszerű programozási tételek

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

Verem Verem mutató 01

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

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

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

Adatszerkezetek I. 1. előadás

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

Adatszerkezetek 7a. Dr. IványiPéter

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

ADATBÁZIS-KEZELÉS ALAPOK I.

15. A VERSENYRENDEZÉS

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

Összetett programozási tételek

Adatszerkezetek és algoritmusok

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

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

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

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

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

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszé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

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

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 SELECT működése. Ttanar tábla: Tdiak tábla:

Érdekes informatika feladatok

PROGRAMOZÁSI TÉTELEK

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

A gráffogalom fejlődése

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

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

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.

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

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

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

Térinformatikai adatszerkezetek

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

21. Adatszerkezetek Az adattípus absztrakciós szintjei Absztrakt adattípus (ADT) Absztrakt adatszerkezet (ADS) Egyszerű adattípusok Tömbök

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

Felvételi tematika INFORMATIKA

Kombinatorikai algoritmusok

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

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Objektum Orientált Programozás VII.

Algoritmizálás + kódolás C++ nyelven és Pascalban

Programozási segédlet

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

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

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

Átírás:

Adatszerkezetek I. 4. 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. Ezek következménye, hogy ábrázolható folytonosan is, tömbben. 5 1 2 6 3 4 7 8 Szlávi Péter, Zsakó László: Adatszerkezetek I. 2014.09.30. 2/34

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. 2014.09.30. 3/34

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. 2014.09.30. 4/34

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. 2014.09.30. 5/34

Kupac Elem berakás: Kupacba([1,3,6,5,4,7,8],2) [1,2,6,3,4,7,8,5] 1 3 6 5 4 7 8 Elemberakás 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. 2014.09.30. 6/34

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. 2014.09.30. 7/34

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. 2014.09.30. 8/34

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. 2014.09.30. 9/34

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. 2014.09.30. 10/34

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. 2014.09.30. 11/34

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. 2014.09.30. 12/34

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. 2014.09.30. 13/34

Prioritási sor: speciális sorozat Mindig a legfontosabb (minimális vagy maximális) lép ki belőle. Emlékeztető: 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. 2014.09.30. 14/34

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. 2014.09.30. 15/34

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. 2014.09.30. 16/34

Műveletek megvalósítása: Üres(P): P.N:=0 üres?(p): üres?:=(p.n=0) Függvény vége. első(k): első:=p.t(1) Függvény vége. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2014.09.30. 17/34

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. 2014.09.30. 18/34

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. 2014.09.30. 19/34

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. 2014.09.30. 20/34

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. 2014.09.30. 21/34

Műveletek megvalósítása: Üres(P): P.N:=0 üres?(p): üres?:=(p.n=0) Függvény vége. első(k): első:=p.t(1) Függvény vége. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2014.09.30. 22/34

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. 2014.09.30. 23/34

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. 2014.09.30. 24/34

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. 2014.09.30. 25/34

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. 2014.09.30. 26/34

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. 2014.09.30. 27/34

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. 2014.09.30. 28/34

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. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2014.09.30. 29/34

Műveletek megvalósítása: Üres(P): P.N:=0 üres?(p): üres?:=(p.n=0) Függvény vége. első(k): első:=p.t(1) Függvény vége. Szlávi Péter, Zsakó László: Adatszerkezetek I. 2014.09.30. 30/34

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. 2014.09.30. 31/34

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. 2014.09.30. 32/34

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. 2014.09.30. 33/34

Adatszerkezetek I. 4. előadás vége