A (bináris) kupac adatstruktúra

Slides:



Advertisements
Hasonló előadás
Számítógépes alapismeretek Kommunikáció Információs és Kommunikációs Technológiák (IKT)
Advertisements

Beruházási és finanszírozási döntések kölcsönhatásai 1.
Különadók 2011, Ágazati különadók 2010.december 4-től hatályos 2010.december 4-től hatályos Adókötelezettséggel érintett tevékenység kör: Adókötelezettséggel.
Informatikai rendszerek általános jellemzői 1.Hierarchikus felépítés Rendszer → alrendszer->... → egyedi komponens 2.Az elemi komponensek halmaza absztrakciófüggő.
A vállalatok marketingtevékenysége és a Magyar Marketing Szövetség megítélése Kutatási eredmények az MMSZ részére (2008. július)
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
BEST-INVEST Független Biztosításközvetítő Kft.. Összes biztosítási díjbevétel 2004 (600 Mrd Ft)
Gazdasági jog IV. Előadás Egyes társasági formák Közkeresleti társaság, betéti társaság.
Rendezésen alapuló kétmenetes algoritmusok
Fájlkezelés.
Számítógépes szimuláció
TÁJÉKOZTATÓ ÉS INDÍTÓ BESZÉLGETÉS A LABORVEZETŐKNEK ÉS MINŐSÉGÜGYI MEGBÍZOTTJAIKNAK SZÓLÓ TANFOLYAM TÉMÁIRÓL, SZERVEZÉSÉRŐL EŐZMÉNYEK Korábbi laborvezetői.
Adatbázis normalizálás
Becslés gyakorlat november 3.
Beck Róbert Fizikus PhD hallgató
Montázs készítése.
Scilab programozás alapjai
A KINOVEA mozgáselemző rendszer használata
Kockázat és megbízhatóság
Mesterséges intelligencia
Algoritmusok és Adatszerkezetek I.
Tömörítés.
T.R. Adatbázis-kezelés - Alapfogalmak Adatbázis:
Algoritmusok és Adatszerkezetek I.
Hipotézisvizsgálat.
Munka és Energia Műszaki fizika alapjai Dr. Giczi Ferenc
Számításelmélet 1.
Kijelentéslogikai igazság (tautológia):
Tartalékolás 1.
Pontrendszerek mechanikája
Adatbázis-kezelés (PL/SQL)
Algebrai specifikációk
KINEMATIKA (MOZGÁSTAN).
Szerkezetek Dinamikája
Számítógépek felépítése 6. előadás virtuális tárkezelés
Business Mathematics
Grosz imre f. doc. Kombinációs hálózatok /43 kép
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
„Mindegy, hogy képességeid mekkorák, fő, hogy a tőled telhető legjobbat formáld belőlük és általuk.” (Weöres Sándor)
STRUKTURÁLT SERVEZETEK: funkció, teljesítmény és megbízhatóság
AVL fák.
Informatikai gyakorlatok 11. évfolyam
Minimális feszítőfák Definíció: Egy irányítatlan gráf feszítőfája a gráfnak az a részgráfja, amely fagráf és tartalmazza a gráf összes cúcspontját. Definíció:
3. előadás.
A Microsoft SharePoint testreszabása Online webhely
Szerzője Konzulens neve
Bináris kereső fák Definíció: A bináris kereső fa egy bináris fa,
A Lineáris Keresés Buktatói
Algoritmusok és Adatszerkezetek I.
További rendező és kereső algoritmusok
I. HELYZETFELMÉRÉSI SZINT FOLYAMATA 3. FEJLESZTÉSI FÁZIS 10. előadás
Matematika 11.évf. 1-2.alkalom
Műveletek, függvények és tulajdonságaik Mátrix struktúrák:
SQL jogosultság-kezelés
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus
Munkagazdaságtani feladatok
TITKOSÍTÓ ALGORITMUSOK
Körmentes irányított gráfban legrövidebb utak
Szöveges adatok tárolása
Edényrendezés - RADIX „vissza” - bináris számokra
Vektorok © Vidra Gábor,
A geometriai transzformációk
Mesterséges intelligencia
Háttértárak Merevlemezek.
Algoritmusok.
Háttértárak Merevlemezek.
Név: Pókó Róbert Neptun: OYJPVP
Előadás másolata:

A (bináris) kupac adatstruktúra A bináris kupac (heap) egy bináris gyökeres fa, amely minden szintjén kitöltött, kivéve esetleg az utolsó szintet, ahol balról jobbra haladva vannak a levelek kihagyás nélkül továbbá teljesül a kupac tulajdonság. Kupac attribútumok (feltételezve, hogy a reprezentálás egy egyindexes A tömbbel történik, amelyben a kupacot tároljuk.) hossz[A] = a tömb fizikai maximális mérete (elemszám a tömbben). kupac_méret[A] = a kupacelemek (csúcsok) száma A fa gyökere A[1] ( =gyökér[T] ) Az i indexű elem esetén az attribútumok: Szülő(i), Bal(i), Jobb(i) 2019.09.08. 12:22:55 ADAT-06

A kupac tulajdonság Kupac tulajdonság: A[Szülő(i)]  A[i] Kupac magasság = a fa magassága = (log n) Példa kupacra és tömbös realizációjára: 16 14 10 8 7 9 3 2 4 1 16 14 10 8 7 9 3 2 4 1 5 6 2019.09.08. 12:22:55 ADAT-06

Kupac műveletek - 1 Szülő(i) 1 RETURN( i/2 ) Bal(i) 1 RETURN( 2i ) Jobb(i) 1 RETURN( 2i+1) (l) KUPACOL Eljárás a kupac tulajdonság fenntartására (log n) KUPACOT_ÉPÍT Eljárás, mely tetszőleges adatokból kupacot épít O(n) KUPACRENDEZÉS Eljárás, mely helyben rendez O(n log n) 2019.09.08. 12:22:55 ADAT-06

Kupac műveletek - 2 KUPACOL(A,i) Akkor használjuk, ha az i baloldali és jobboldali részfái ugyan  kupacok, de i-ben sérülhet a kupac tulajdonság b Bal(i) j Jobb(i) IF b  Kupac_méret[A] és A[b]>A[i] THEN legnagyobb  b ELSE legnagyobb  i IF j  Kupac_méret[A] és A[j]>A[legnagyobb] THEN legnagyobb  j IF legnagyobb i THEN csere A[i]  A[legnagyobb] KUPACOL(A,legnagyobb) 2019.09.08. 12:22:55 ADAT-06

Kupac műveletek - 3 KUPACOT_ÉPÍT(A) 1 Most hossz[A] legyen azonos az elemek számával (n) Kupac_méret[A] hossz[A] FOR i  hossz[A]/2 DOWNTO 1 DO KUPACOL(A, i) KUPACRENDEZÉS(A) FOR i  hossz[A] DOWNTO 2 DO csere A[1] A[i] Kupac_méret[A]  Kupac_méret[A] –1 KUPACOL(A,1) 2019.09.08. 12:22:55 ADAT-06

Kupac műveletek - 4 KUPACBA_BESZÚR(A,kulcs) INC(Kupac_méret[A]) i  Kupac_méret[A] WHILE i>1 és A[Szülő(i)]<kulcs DO A[i] A[Szülő(i)] i Szülő(i) A[i] kulcs O(log n) KUPACBAN_MAX(A) RETURN( A[1] ) (1) 2019.09.08. 12:22:55 ADAT-06

Kupac műveletek - 5 KUPACBÓL_KIVESZ_MAX(A) IF Kupac_méret[A]<1 THEN hiba „kupac alulcsordulás” max A[1] A[1] A[Kupac_méret[A]] DEC(Kupac_méret[A]) KUPACOL(A,1) RETURN(max) O(log n) 2019.09.08. 12:22:55 ADAT-06

Az elsőbbségi sor Az elsőbbségi sor (priority queue) olyan S halmaz, amelynek minden eleméhez egy kulcs értéket rendelünk. Műveletei: BESZÚR(S,x): egy elemet hozzáadunk S-hez. S S  {x} MAXIMUM(S): S legnagyobb kulcsú elemének meghatározása KIVESZ_MAX(S): megadja és törli a maximális kulcsú elemet. Az elsőbbségi sor célszerű realizációja a kupac. 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 1 Huffmann-kód: Adattömörítési célokat szolgáló eljárás A probléma: Legyen adott egy adatfile, amelyben ismert az egyes adatelemek (pl.: byte-ok) gyakorisága. A feladat olyan kódot találni az adat- elemekre, amely révén a kódolt file hossza rövidebb lesz (a lehető legrövidebb), mint az eredeti hossz volt. Az egyszerűség kedvéért a kódoláshoz használjunk két jelet, a 0 és az 1 jeleket. Az adatelemek kódja lehet fix hosszúságú és változó hosszúságú. A kódot egy kódfával ábrázolhatjuk, amely egy bináris fa, levelei a kódszavak és a kódszó a levélhez vezető útból olvasható ki. Ha balra lépünk, akkor 0, ha jobbra lépünk, akkor 1 íródik a kódszóhoz. A kódnak dekódolhatónak kell lennie. 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 2 Definíció: Prefix kódnak nevezzük a kódot, ha egyik kódszó sem eleje semelyik másik kódszónak. (Semelyik kódszót sem lehet valamely másikból kódjelek hozzáírásával megkapni.) A prefix kód dekódolható kód. Két dekódolható kód ekvivalens, ha a megfelelő kódszavaik hossza megegyezik. Bizonyítható, hogy minden dekódolható kódhoz létezik vele ekvivalens prefix kód. 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 3 Betű Gyakoriság f(c) Kódszó Fix hossz Változó hossz 45 000 B 13 001 101 C 12 010 100 D 16 011 111 E 9 1101 F 5 1100 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 4 100 100 1 1 86 14 55 A:45 1 1 58 28 14 30 25 1 1 1 1 A:45 B:13 C:12 D:16 E:9 F:5 1 C:12 B:13 14 D:16 1 F:5 E:9 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 5 A fa költsége:B(T)= f(c)d(c) c C ahol d(c) a betú mélysége a fában (kódszóhossz) Definíció: Optimális a kód, ha a fa költsége minimális. Az optimális kód bináris fája mindig teljes. A Huffmann-kód optimális. A Huffmann-kód szerkesztése: Jelölje a kódolandó ábécé betűinek halmazát C és legyen a betűk száma n. A pszeudokód kiindul egy prioritási sorból, amelyben a betűk a gyakoriságaik szerint vannak kulcsolva. Ezután n-1 lépésben a két legkisebb gyakoriságú elemet összevonva felépít egy optimális kódfát. Az optimum nem egyértelmű, mert az optimális fában bármely csúcs bal és jobb gyerekét felcserélve újra optimális fát kapunk. 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 6 Az algoritmus mohó algoritmus, mivel minden lépésben úgy von össze, hogy a költség a legkisebb mértékben növekedjen. A teljes fa költsége megegyezik az összevonási lépések költségének összegével. (A mohó stratégia elemei: Az adott pillanatban mindig az ott legjobbnak tűnő lehetőséget választjuk a részprobléma megoldására. Ez függhet az előző választásoktól, de nem függ a későbbiektől. A mohó stratégia nem mindig vezet optimumra.) 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 7 HUFFMANN( C ) n  C Q  C FOR i  1 TO n-1 DO z PONTOT_LÉTESÍT() x  Bal[z]  KIVESZ_MIN(Q) y  Jobb[z]  KIVESZ_MIN(Q) f[z]  f[x]+f[y] BESZÚR(Q,z) RETURN( KIVESZ_MIN(Q) ) O(n log n) 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 8 F:5 E:9 C:12 B:13 D:16 A:45 C:12 B:13 14 D:16 A:45 25 A:45 F:5 E:9 C:12 B:13 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód - 9 25 30 A:45 C:12 B:13 14 D:16 F:5 E:9 55 A:45 25 30 2019.09.08. 12:22:55 ADAT-06

A Huffmann-kód – 10 100 A:45 55 25 30 C:12 B:13 14 D:16 F:5 E:9 2019.09.08. 12:22:55 ADAT-06

Diszjunkt halmazok A diszjunkt halmazok adatszerkezet dinamikus halmazok S=(S1,S2,…,Sk) együttese. Mindegyik halmazt egy képviselője azonosít, mely eleme a halmaznak. Általában lényegtelen, hogy melyik ez az elem. A halmazok elemei objektumok. Műveletek: HALMAZT_KÉSZÍT(x): Egy új halmazt hoz létre, melynek ez az egy x eleme lesz, amely egyúttal képviselője is. EGYESÍT(x,y): Az x-et tartalmazó Sx és az y-t tartalmazó Sy halmazokat egyesíti a két halmaz uniójává. Az eredmény az eredeti két halmaz helyére lép, azok megsemmisülnek. A közös képviselő az unió tetszőleges eleme lehet HALMAZT_KERES(x): visszaad egy mutatót, amely x halmazának a képviselőjére mutat. 2019.09.08. 12:22:55 ADAT-06

Diszjunkt halmazok alkalmazása Megkeressük egy gráf összefüggő komponenseit. ÖSSZEFÜGGŐ_KOMPONENSEK(G) FOR v V[G] csúcsra DO HALMAZT_KÉSZÍT(v) FOR  (u,v) E[G] élre DO IF HALMAZT_KERES(u)  HALMAZT_KERES(v) THEN EGYESÍT(u,v) UGYANAZ_A_KOMPONENS(u,v) IF HALMAZT_KERES(u) = HALMAZT_KERES(v) THEN RETURN(IGAZ) ELSE RETURN(HAMIS) 2019.09.08. 12:22:55 ADAT-06

Diszjunkt halmazok realizálása - 1 Láncolt listás realizálás a b c d e f g fej fej a b c d e f g fej EGYESIT(a,e) 2019.09.08. 12:22:55 ADAT-06

Diszjunkt halmazok realizálása - 2 Diszjunkt halmaz erdő (gyökeres fákkal) Gyökér a e Gyökér Gyökér e b d f a f c g b d g c EGYESIT(c,f) 2019.09.08. 12:22:55 ADAT-06

Programok diszjunkt halmaz erdőkre - 1 HALMAZT_KÉSZÍT(x) Szülő[x] x Rang[x] 0 ÖSSZEKAPCSOL(x,y) IF Rang[x]>Rang[y] THEN Szülő[x] x ELSE Szülő[x] y IF Rang[x]=Rang[y] THEN Rang[y]  Rang[y] +1 2019.09.08. 12:22:55 ADAT-06

Programok diszjunkt halmaz erdőkre - 2 HALMAZT_KERES(x) IF x  Szülő[x] THEN Szülő[x] HALMAZT_KERES(Szülő[x]) RETURN(Szülő[x]) EGYESÍT(x,y) ÖSSZEKAPCSOL( HALMAZT_KERES(x), HALMAZT_KERES(y) ) 2019.09.08. 12:22:55 ADAT-06