22
5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf (digráf) A ( ) E V G , = rendezett párt irányított gráfnak (digráfnak) nevezzük. A rendezett pár elemeire tett kikötések: V véges halmaz, a G-beli csúcsok halmaza. E bináris reláció a V halmazon, az élek halmaza ( ) { V V V v V u pár rendezett v u E × = , , } ) . Hurkok megengedettek. Hurok az él. ( a a, Definíció: Az irányítatlan gráf A ( ) E V G , = rendezett párt irányítatlan gráfnak nevezzük. A rendezett pár elemeire tett kikötések: V véges halmaz, a G-beli csúcsok halmaza. E bináris reláció a V halmazon, az élek halmaza ( ) { } V V V v V u pár en rendezettl v u E × = , , . Hurok nem megengedett. Definíció: Az u csúcsból kiinduló és a v csúcsba mutató él digráfban Az él. ( v u, ) Definíció: Az u csúcsból kiinduló és a v csúcsba mutató él irányítatlan gráfban Az él. ( v u, ) Definíció: Az u csúcs szomszédja Legyen él egy ( v u, ) ( ) E V G , = gráfban. Ekkor a v csúcsot az u csúcs szomszédjának nevezzük A szomszédság reláció irányítatlan gráfban szimmetrikus, digráfban nem. Definíció: Csúcs fokszáma irányítatlan gráfban A csúcs fokszáma a belőle kiinduló élek száma. Definíció: Csúcs fokszáma digráfban Kimenő fokszám (kifok): a csúcsból kimenő élek száma Bemenő fokszám (befok): a csúcsba bemenő élek száma Csúcs fokszáma: kifok+befok Definíció: Ionizált csúcs Csúcs, melynek fokszáma zérus. Definíció: Az u csúcsot az u’ csúccsal összekötő k hosszúságú út Csúcsok véges sorozata: , k v v v , , , 1 0 K ahol k v u v u = = ' , 0 és ( ) k i E v v i i , , 1 , , 1 K = . Definíció: Egyszerű út Út, melyben a benne szereplő csúcsok páronként különbözőek.

5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

5. A gráf, mint adatstruktúra

5.1. Gráfelméleti bevezető

Definíció: Az irányított gráf (digráf) A ( )EVG ,= rendezett párt irányított gráfnak (digráfnak) nevezzük. A rendezett

pár elemeire tett kikötések: V véges halmaz, a G-beli csúcsok halmaza. E bináris reláció a V halmazon, az élek halmaza ( ){ VVVvVupárrendezettvuE ×⊂∈∈= ,, }

). Hurkok megengedettek.

Hurok az él. ( aa, Definíció: Az irányítatlan gráf A ( )EVG ,= rendezett párt irányítatlan gráfnak nevezzük. A rendezett pár

elemeire tett kikötések: V véges halmaz, a G-beli csúcsok halmaza. E bináris reláció a V halmazon, az élek halmaza ( ){ } VVVvVupárenrendezettlvuE ×⊂∈∈= ,, . Hurok nem megengedett.

Definíció: Az u csúcsból kiinduló és a v csúcsba mutató él digráfban Az él. ( vu, ) Definíció: Az u csúcsból kiinduló és a v csúcsba mutató él irányítatlan gráfban Az él. ( vu, ) Definíció: Az u csúcs szomszédja Legyen él egy ( vu, ) ( )EVG ,= gráfban. Ekkor a v csúcsot az u csúcs

szomszédjának nevezzük A szomszédság reláció irányítatlan gráfban szimmetrikus, digráfban nem. Definíció: Csúcs fokszáma irányítatlan gráfban A csúcs fokszáma a belőle kiinduló élek száma. Definíció: Csúcs fokszáma digráfban Kimenő fokszám (kifok): a csúcsból kimenő élek száma

Bemenő fokszám (befok): a csúcsba bemenő élek száma Csúcs fokszáma: kifok+befok

Definíció: Ionizált csúcs Csúcs, melynek fokszáma zérus. Definíció: Az u csúcsot az u’ csúccsal összekötő k hosszúságú út Csúcsok véges sorozata: , kvvv ,,, 10 K

ahol kvuvu == ',0 és ( ) kiEvv ii ,,1,,1 K=∈− . Definíció: Egyszerű út Út, melyben a benne szereplő csúcsok páronként különbözőek.

Page 2: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 2 -

ahol kvuvu == ',0 és ( ) kiEvv ii ,,1,,1 K=∈− . Definíció: Út része Legyen út. Az út része , ahol kvvv ,,, 10 K jii vvv ,,, 1 K+ kji ≤≤≤0 . Definíció: Az u’ csúcs elérhető az u csúcsból Azt mondjuk, hogy az u’ csúcs elérhető az u csúcsból (jelölésben 'uu P⎯→⎯ ), ha

van olyan út, amely az u csúcsot az u’ csúccsal összeköti. Definíció: Kör digráfban Út, melyre v és az út tartalmaz legalább egy élt. kv=0

Definíció: Egyszerű kör Kör, melynek csúcsai mind különbözőek. Definíció: Hurok 1 hosszúságú kör. Definíció: Egyszerű gráf Hurok nélküli digráf Definíció: Kör gráfban Egyszerű kör és , 3≥k kvv =0 . Definíció: Körmentes gráf Gráf, amely nem tartalmaz kört.. Definíció: Összefüggő gráf Ha bármely két csúcsa összeköthető úttal. Definíció: Összefüggő komponens Csúcsok alkotta ekvivalencia-osztály, ahol az ekvivalencia reláció a csúcsok

közötti elérhetőség. Definíció: Digráf erősen összefüggő Tetszőleges két csúcs esetén mindegyik elérhető a másikból. Definíció: Izomorf gráfok A ( )EVG ,= és a ( )','' EVG = gráfok izomorfak, ha létezik olyan

bijekció, hogy ( )': VVf →

( ) ( )( ) ',, EvfufEvu ∈⇔∈ . Definíció: A ( )EVG ,= gráf részgráfja ( ','' EVG = ) gráf, melyre és VV ⊂' EE ⊂' . Definíció: A G gráf V’ által meghatározott részgráfja ( )','' EVG = , ahol ( ){ }',,,' VvuEvuE ∈∈= .

Page 3: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 3 -

Definíció: A ( )EVG ,= gráfhoz tartozó digráf Az a digráf, melyre ( ','' EVG = ) ( ) ( ) EvuEvu ∈⇔∈ ,', , azaz az éleket két

irányított éllel helyettesítjük). Definíció: A ( )EVG ,= digráfhoz tartozó irányítatlan gráf Az a gráf, melyre ( ','' EVG = ) ( ) ( ) EvuvuEvu ∈≠⇔∈ ,,', azaz elhagyjuk a

hurkokat és az irányítást. Definíció: Teljes gráf Irányítatlan gráf, melyben bármely két csúcs szomszédos. (Minden lehetséges él

benne van.) Definíció: Páros gráf Irányítatlan gráf, melynél V felbontható V1, V2 diszjunkt unióra úgy, hogy

esetén vagy ( ) Evu ∈, 1Vu∈ és 2Vv∈ , vagy pedig 2Vu∈ és . (Azaz V1Vv∈ 1-ben és V2-ben nincs belső él.)

Definíció: Erdő Körmentes, irányítatlan gráf. Definíció: (Nyílt) fagráf Összefüggő, körmentes, irányítatlan gráf. Tétel: A nyílt fák tulajdonságai Legyen irányítatlan gráf. Az alábbiak ekvivalensek. ( EVG ,= )

1. G nyílt fa 2. G bármely két csúcsához egyértelműen létezik egy őket összekötő

egyszerű út. 3. G összefüggő, de tetszőleges élének elhagyása után a visszamaradó gráf

már nem összefüggő 4. G összefüggő és 1−= VE ⎜

5. G körmentes és 1−= VE 6. G körmentes, de akár egyetlen éllel is bővítve E-t a kapott gráf már

tartalmaz kört. Bizonyítás 1.⇒2. bizonyítása

G fa ⇒ G összefüggő. ⇒ G bármely csúcspárja között van út. Be kell látni, hogy csak egy van. Ha több lenne, akkor kettőből már kör alakítható ki, ami ellentmondás. 2.⇒3. bizonyítása G bármely két csúcsa egyértelműen köthető össze úttal. ⇒ G összefüggő. ⇒ ⇒ Tetszőleges (u,v) élt választva az él az u és v csúcsokat köti össze egyelemű útként. Ő az egyetlen út u és v között. Ha elhagyom, akkor nem lesz ott út, tehát a gráf nem lesz összefüggő. 3.⇒4. bizonyítása

Page 4: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 4 -

G (3) miatt összefüggő, tehát ezt nem kell bizonyítani. Másrészt ebből adódóan automatikusan ⎜E ⎜ ≥ ⎜V ⎜ - 1. Teljes indukcióval látjuk be, hogy ⎜E ⎜ ≤ ⎜V ⎜ - 1. Legyen n= ⎜V ⎜. Ha n=1 vagy 2, akkor ez igaz, mert a gráfnak n-1 éle van. Legyen most n ≥3 és minden kevesebb csúcsú gráfra teljesüljön (3). Hagyjuk el tetszőleges élét. Ezáltal k darab összefüggő komponens keletkezik, ahol k≥2. Minden komponens (3) tulajdonságú. Az élek száma legfeljebb n-k≤n-2. Az elvett élt is hozzávéve az élek száma legfeljebb n-1. 4.⇒5. bizonyítása Indirekt módon bizonyítunk. Tegyük fel, hogy van kör. Erre a körre, mint részgráfra igaz, hogy éleinek és csúcsainak száma megegyezik. Legyen ez k. Ha k< ⎜V ⎜, akkor van még csúcs a körön kívül, mely szomszédos a kör valamely csúcsával G összefüggősége miatt. Vegyük hozzá a körhöz ezt a csúcsot és az élt. Az így kapott részgráfban is a csúcsok száma és az élek száma azonos (k+1). Újabb és újabb csúcsok és élek hozzávételével az összes csúcspontot felhasználjuk. Ekkor G-re azt kapjuk, hogy ⎜E ⎜ ≥ ⎜V ⎜, ami ellentmondás 5.⇒6. bizonyítása Legyen G összefüggő komponenseinek száma k. Minden komponens fa és (1) ⇒ (5). Ezért G komponenseiben ⎜V ⎜ - k él van. ⎜E ⎜ = ⎜V ⎜ - 1 miatt k=1 és így G fa. Ekkor viszont bármely két G-beli csúcs összeköthető egyszerű úttal. Hozzávéve egy új élt a két csúcs között, az az úttal együtt kört alkot 6.⇒1. bizonyítása Azt kell belátni, hogy G összefüggő. Legyen u,v két tetszőleges csúcs. Ha szomszédosak, akkor van közöttük út. Ha nem szomszédosak, akkor vegyük fel az u,v élt. Ekkor kör keletkezik (6) miatt, A kör élei az (u,v) él kivételével G-hez tartoznak.és így utat alkotnak u és v között. Tehát G összefüggő, tehát fa.

5.2. Gyökeres fák Definíció: Gyökeres fa T fagráf, amely egyik csúcsának kitüntetett a szerepe a többihez képest. Ez a

csúcs a gyökér vagy gyökércsúcs (r). Definíció: Az x csúcs megelőzője A gyökérből x-be vezető úton fekvő bármely csúcs. (x is a saját megelőzője.) Definíció: y valódi megelőzője x-nek ha megelőzője x-nek, de y ≠ x. Definíció: x az y rákövetkezője ha y x-nek megelőzője. (x is a saját rákövetkezője.)

Page 5: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 5 -

Definíció: x valódi rákövetkezője y-nak ha megelőzője y-nak, de y ≠ x. Definíció: x-ben gyökerező részfa Az x és a rákövetkezőiből álló részgráf (fa). Definíció: x szülője y ha az xr P⎯→⎯ úton (y,x) az utolsó él. (A gyökérnek nincs szülője T-ben.) Definíció: x az y gyereke ha y az x szülője. Definíció: Testvérek azok a csúcsok, amelyeknek ugyanaz a csúcs a szülője. Definíció: Külső csúcs vagy levél az a csúcs, amelynek nincs gyereke. Definíció: Belső csúcs az a csúcs, amely nem levél. Definíció: x fokszáma gyökeres fában az x gyerekeinek száma. (A szülő nem számít bele a fokszámba!) Definíció: x szintje az xr P⎯→⎯ út hossza. Definíció: T magassága a T-beli csúcsok szintjei közül a legnagyobb. Definíció: Rendezett gyökeres fa minden csúcs gyerekei rendezettek. (Azaz van első, második,…, k-adik) Definíció: Bináris fa Rendezett fa, melyben minden csúcs fokszáma legfeljebb kettő. (Beszélhetünk

bal gyerekről és jobb gyerekről.) Definíció: Null fa Üres bináris fa. Definíció: Teljes bináris fa Bináris fa, melyben a csúcsok fokszáma kettő, kivéve a leveleket, melyeké 0,

valamint az összes levél azonos szinten helyezkedik el. Definíció: Súlyozott fa A csúcsok gyerekeit különböző pozitív, egész számmal indexeljük. (1,2,3,…) Definíció: csúcs i-dik gyereke hiányzó nincs i indexű gyereke. Definíció: k-adrendű fa Súlyozott fa, ahol minden csúcsnál a k-nál nagyobb indexű gyerekek hiányoznak.

Page 6: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 6 -

(A bináris fa másodrendű.) Definíció: k-adrendű teljes fa k-adrendű fa, melyben a levelek ugyanazon szintűek és az összes belső csúcs

fokszáma k. A h magasságú teljes k-adrendű fának kh számú levele van. Ha a levelek száma n, akkor a teljes k-adrendű fa magassága logk n. A h magasságú teljes k-adrendű fa belső csúcsainak a száma:

111

1

0

12

−−

==++++ ∑−

=

kkkkkk

hh

i

ihK .

Teljes bináris fa belső csúcsainak száma: 12 −h

A gyökeres fa adatstruktúra. A fa minden csúcsa egy objektum. Az objektumok tartalmaznak kulcs mezőt és mutatókat. A T fa attribútuma: gyökér[T] egy mutató, mely a fa gyökerére mutat. Ha gyökér[T]=NIL, akkor a fa üres. Bináris fa esetén az x csúcs ábrázolható az alábbi sémával:

Szülőmutató

Kulcs

Bal gyerek mutató

Jobb gyerek mutató

Csúcsattribútumok: szülő[x], kulcs[x], bal[x], jobb[x] Ha szülő[x]=NIL, akkor x gyökér. Ha bal[x]=NIL, vagy jobb[x]=NIL, akkor amelyik NIL, az a gyerek nincs. Ha mindkettő NIL, akkor x levél. A bináris fa mintájára k-adrendű fa esetén használható, bár memória pazarló az x csúcs ábrázolására az alábbi séma:

Szülő mutató Kulcs 1. gyerek mutató 2. gyerek mutató … k. gyerek mutató

Helyette javasolható az úgynevezett bal gyerek – jobb testvér séma, melynek memóriaigénye:

. ( )nΟ

Szülőmutató

Kulcs

Bal gyerek mutató

Jobb testvér mutató

Page 7: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 7 -

NIL

NIL

5.2.1. Bináris kupac, kupacrendezés Definíció: A bináris kupac (heap) 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 (a szint balra tömörített) továbbá teljesül a kupac tulajdonság, mely szerint a gyökércsúcsot kivéve minden x mutatójú csúcsra fenn kell álljon, hogy Kulcs(Szülő(x)) ≥ Kulcs(x), ha maximumkupacról beszélünk, illetve Kulcs(Szülő(x)) ≤ Kulcs(x) minimumkupac esetén,

A következőkben a maximumkupacról fogunk beszélni. Kupac attribútumok (feltételezve, hogy a kupac reprezentálása egy egyindexes A tömbbel történik, amelyben a kupacot tároljuk és amelynek indexelése 1-gyel kezdődik) a következők:

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 gyökér[T] ) A1

Az i indexű elem esetén az attribútumok: Szülő(i), Bal(i), Jobb(i) Kupac magasság = a fa magassága = ( )nh logΘ= Példa kupacra és tömbös realizációjára:

NIL NIL

NIL NIL

NIL

NIL NIL

NIL NIL

Page 8: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 8 -

16

14 10

8 9 7 3

2 4

16 14 10 8 7 9 3 2 4 1 1 2 3 4 5 6 7 8 9 10

5.2.1.1. algoritmus 5.2.1.2. algoritmus 5.2.1.3. algoritmus Szülő Bal gyerek Jobb gyerek // ( ) ( )1Θ=nT // ( ) ( )1Θ=nT // ( ) ( )1Θ=nT

1 SZÜLŐ( i, x ) BAL( i, x ) JOBB( i, x ) 2 // Input paraméter:

i a vizsgált index // Input paraméter: i a vizsgált index

// Input paraméter: i a vizsgált index

3 // Output paraméter: x – a szülő indexe

// Output paraméter: x – a bal gyerek indexe

// Output paraméter: x – a jobb gyerek indexe

4 5

⎥⎦⎥

⎢⎣⎢←2ix ix 2← 12 +← ix

6 RETURN( x⎦ ) RETURN( x⎦ ) RETURN( x⎦ )

5.2.1.4. algoritmus Kupacol

( Eljárás a kupac tulajdonság fenntartására ) // ( ) ( )nnT logΘ=

1 KUPACOL ( A, i ) 2 // Input paraméter: A - a kupacot tároló tömb 3 // i - a vizsgálandó elem indexe 4 // Output paraméter: A - a kupacot tároló tömb 5 // Akkor használjuk, ha az i baloldali és jobboldali részfái

ugyan kupacok, de i-ben sérülhet a kupac tulajdonság 6 BAL( i, b ) 7 JOBB( i, j ) 8 IF b ≤ Kupac_méret[A] és Ab>Ai9 THEN legnagyobb ← b

10 ELSE legnagyobb ← i 11 IF j ≤ Kupac_méret[A] és Aj>Alegnagyobb

1

Page 9: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 9 -

12 THEN legnagyobb ← j 13 IF legnagyobb ≠i 14 THEN csere Ai ↔ Alegnagyobb15 KUPACOL( A, legnagyobb ) 16 RETURN (A)

5.2.1.5. algoritmus Kupacot épít

(Eljárás, mely tetszőleges adatokból kupacot épít ) // ( ) (nnT )Θ=

1 KUPACOT_ÉPÍT( A ) 2 // Input paraméter: A - a kiinduló kulcsok tömbje 4 // Output paraméter: A – az elkészült kupac tömbje 5 6 Kupac_méret[A] ←hossz[A]

7 FOR [ ]

⎥⎦⎥

⎢⎣⎢←

2Ahosszi DOWNTO 1 DO

8 KUPACOL( A, i ) 9 RETURN ( A )

5.2.1.6. algoritmus Kupacrendezés

(Eljárás, mely helyben rendez ) // ( ) ( )nnnT logΘ=

1 KUPACRENDEZÉS( A ) 2 // Input paraméter: A - a rendezendő kupac tömbje 3 // Output paraméter: A – a rendezett kulcsok tömbje 4 5 KUPACOT_ÉPÍT( A )

6 FOR i ← hossz[A] DOWNTO 2 DO 7 csere A1 ↔Ai8 DEC ( Kupac_méret[A] ) 9 KUPACOL( A, 1 )

10 RETURN ( A )

5.2.1.7. algoritmus Kupacba beszúrás // ( ) ( )nnT logΘ=

1 KUPACBA_BESZÚR( A, kulcs ) 2 // Input paraméter: A - a kupac tömbje 3 // kulcs – a beszárandó kulcs 4 // Output paraméter: A – a kupac a beszúrt kulccsal 5 6 INC( Kupac_méret[ A ] ) 7 i ← Kupac_méret [A] ) 8 SZÜLŐ( i, x )

Page 10: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 10 -

9 WHILE i>1 és Ax<kulcs 10 Ai ←Ax11 i ← x 12 SZÜLŐ( i, x ) 13 Ai ←kulcs 14 RETURN ( A )

5.2.1.8. algoritmus Kupacban maximális kulcs lekérdezése // ( ) (1Θ )=nT

1 KUPACBAN_MAX( A, max, hiba ) 2 // Input paraméter: A - a kupac tömbje 3 // Output paraméter: max – a maximális kulcs 4 // hiba – jelzi a művelet sikerességét 5 6 IF Kupac_méret[A]<1 7 THEN hiba ← „kupac alulcsordulás” 8 RETURN ( hiba ) 9 max ← A1

10 hiba ← „sikeres művelet” 11 RETURN ( max, hiba )

5.2.1.9. algoritmus Kupacból a maximális kulcs lekérdezése eltávolítással // ( ) ( nnT logΘ= )

1 KUPACBÓL_KIVESZ_MAX ( A, max, hiba ) 2 // Input paraméter: A - a kupac tömbje 3 // Output paraméter: max – a maximális kulcs 4 // hiba – jelzi a művelet sikerességét 5 6 IF Kupac_méret[A]<1 7 THEN hiba ← „kupac alulcsordulás” 8 RETURN ( hiba ) 9 max ← A1

10 A1 ←AKupac_méret[A]11 DEC( Kupac_méret[A] ) 12 KUPACOL( A, 1 ) 13 hiba ← „sikeres művelet” 14 RETURN ( max, hiba )

5.2.2. Az elsőbbségi sor

Definíció: Az elsőbbségi sor (priority queue) Az elsőbbségi sor (priority queue) olyan S halmaz, amelynek minden eleméhez

egy kulcs értéket rendelünk. A kulcs egy elsőbbségi értéket, prioritási értéket szimbolizál. Szolgáltatást igénybevevők sorbanállási sorában a sorrakerülő elem az lesz, amelynek a prioritása a legnagyobb (maximum prioritásos sor), vagy amelyiké a legkisebb (minimum prioritásos sor).

Page 11: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 11 -

BESZÚR(S,x): egy elemet hozzáadunk S-hez. S ←S ∪ {x} MAXIMUM(S): S legnagyobb kulcsú elemének meghatározásaKIVESZ_MAX(S): megadja és törli a maximális kulcsú elemet. Az elsőbbségi sor célszerű realizációja a kupac.

5.2.3. A Huffman kód, a mohó algoritmus A Huffman kód egy adattömörítési célokat szolgáló eljárás. A probléma megfogalmazása: Legyen adott egy adatfile, amelyben ismert az egyes adatelemek (pl.: byte-ok) gyakorisága. A feladat olyan kódot találni az adatelemekre, amely révén a kódolt file hossza rövidebb lesz (a lehető legrövidebb), mint az eredeti hossz volt. Definíció: Kódszó Kódszónak nevezzük az üzenet ábécé betűjéhez hozzárendelt jelek nemüres

sorozatát, amelyben a kódábécé betűi szerepelhetnek. Definíció: Kód Kódnak nevezzük az üzenet ábécé betűit és a hozzájuk rendelt kódszavak

táblázatát. (Kódtábla, kódszótár). Definíció: Kódolás Kódolásnak nevezzük az üzenet betűinek a helyettesítését a betűnek

megfeleltetett kódszóval. A kódolás eredménye a kódolt üzenet. 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ú vagy lehet változó hosszúságú. A kódot egy kódfával ábrázolhatjuk, amely egy bináris fa, amelynek levelei a kódszavak. A kódszó a levélhez vezető útból olvasható ki a gyökértől indulva balra lépéskor 0, jobbra lépéskor 1 hozzáírásával a kódszóhoz. Definíció: Dekódolás Dekódolásnak nevezzük a kódolt üzenet kódszavakra bontását. A kódnak dekódolhatónak kell lennie, ha azt akarjuk, hogy a dekódoláskor az eredeti üzenetet kapjuk vissza. Definíció: Dekódolható kód Dekódolhatónak nevezzük a kódot, ha minden kódolt üzenet csak

egyféleképpen bontható kódszavakra. Definíció: Prefix kód 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. Definíció: Dekódolható kódok ekvivalenciája Két dekódolható kódot ekvivalensnek nevezünk, ha a megfelelő kódszavaik

Page 12: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 12 -

hossza megegyezik. Bizonyítható, hogy minden dekódolható kódhoz létezik vele ekvivalens prefix kód. Példa:

Fix hossz Változó hosszBetű Gyakoriságc f(c) KódszóHosszKódszóHosszA 45 000 3 0 1

B 13 001 3 101 3

C 12 010 3 100 3

D 16 011 3 111 3

E 9 100 3 1101 4

F 5 101 3 1100 4

Megadjuk a két kód kódfáját. A téglalapok a fa levelei, a kódolandó ábécé betűi a gyakoriságokkal. A belső csúcsok körök, bennük a csúcs gyerekeinek gyakoriságösszege szerepel.

Definíció: A fa költsége A fa költségének nevezzük a: ( ) ( ) ( )∑

⋅=Cc

cdcfTB számot, ahol c a C ábécé

betűje, f(c) a betű gyakorisága és d(c) a betű mélysége a fában (kódszóhossz). A fa költségét leosztva a file-t alkotó betűk számával az egy betűre jutó átlagköltséget kapjuk, ami úgy is értelmezhető, mint az átlagos kódszóhossz. Ha ez kisebb, mint egy, akkor tömörítésről beszélünk. Definíció: Optimális kód Optimális a kód, ha a fa költsége minimális.

100

86 14

58 28 14

55

100

14

25 30

A:45 B:13 C:12 D:16 E:9

0 1

F:5

0

0 0 0

01

1 1 1

A:45

C:12 B:13 D:16

F:5

0 1

0 1

0 1 0 1

0

E:9

1

Page 13: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 13 -

Az optimális kód bináris fája mindig teljes. A Huffman-kód optimális kód.

A Huffman-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 Huffman kód szerkesztési algoritmusának pszeudokódja kiindul egy prioritási sorból, amelyben a betűk a gyakoriságaik szerint vannak kulcsolva. Ezután n-1 lépésben mindig a két éppen akkor 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. Egy algoritmustervezési startégia a mohó algoritmus tervezése. Ezt a heurisztikát általában optimalizálásra használják. A mohó stratégia elve szerint az adott pillanatban mindig az ott legjobbnak tűnő lehetőséget választjuk a részprobléma megoldására, azaz a pillanatnyi lokális optimumot választjuk. Ez a választás 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 globális optimumra. A Huffman kód szerkesztési algoritmusa 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.

5.2.3.1. algoritmus Huffman kód készítése // ( ) ( )nnnT logΘ=

1 HUFFMAN( C, T ) 2 // Input paraméter: C - a kódolandó abécé a gyakoriságokkal 3 // Output paraméter: T – a kódfa 4 // 5 // Jelölje ⎢C⎥ az ábécé betűinek a számát 6 // Létrehozunk egy Q minimum prioritási sort az ábécé betűiből

a gyakoriságot használva prioritásnak. A sor elemei fák lesznek, kezdetben minden fát egyetlen betű alkot.

7 Q ← C 8 FOR i ← 1 TO 1−C DO 9 PONTOT_LÉTESÍT(z) //Egy új z csomópontot hoz létre, melyet később a Q

sorba be fogunk szúrni. Egy új fa gyökere lesz.

10 x ← Bal[z] ← KIVESZ_MIN(Q) //Kivesszük a Q sorból legkisebb elemet és az új z csomópont bal gyerekének nyílvánítjuk valamint elnevezzük x-nek átmenetileg

11 y ← Jobb[z] ← KIVESZ_MIN(Q) //Kivesszük a Q sorból a következő legkisebb elemet és az új z csomópont jobb gyerekének nyílvánítjuk valamint elnevezzük y-nak átmenetileg

12 f[z] ← f[x]+f[y] // Az új csomópontra meghatározzuk a gyakoriság értéket (prioritás)

13 BESZÚR(Q,z) // Az új z csomópontot beszúrjuk a Q sorba 14 KIVESZ_MIN( Q, T ) // A Q sor egyetlen elemét, mint eredményt

Kivesszük a sorból

Page 14: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 14 -

15 RETURN( T ) Példa:

E:9 C:12 B:13 D:16 A:45

14 C:12 B:13 D:16 A:45

F:5 E:9

A:45

D:16

E:9 F:5

14 B:13 C:12

25 30

55

A:45

D:16

E:9 F:5

14 B:13 C:12

25 30

A:45 D:16

E:9 F:5

14 25

C:12 B:13

F:5

Page 15: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 15 -

5.2.4. Diszjunkt halmazok adatstruktúra Definíció: Diszjunkt halmazok adatstruktúra A diszjunkt halmazok adatszerkezet dinamikus halmazok S=(S1,S2,…,Sk)

együttese. A halmazok elemei objektumok. Mindegyik halmazt egy képviselője azonosít, mely eleme a halmaznak. Általában lényegtelen, hogy melyik ez az elem.

Műveletei: 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.

Egy alkalmazás diszjunkt halmazokra: megkeressük egy gráf összefüggő komponenseit

5.2.4.1. algoritmus Gráf összefüggő komponenseinek megkeresése // ( ) ( EVnT +Θ= )

1 ÖSSZEFÜGGŐ_KOMPONENSEK( G ) 2 // Input paraméter: G - a gráf 3 // Output paraméter: G – a gráf a komponens információkkal 4 // 5 FOR ∀ v ∈V[G] csúcsra DO 6 HALMAZT_KÉSZÍT( v ) 7 FOR ∀ (u,v) ∈E[G] élre DO

55

14

25 30

100

A:45

C:12 B:13 D:16

F:5 E:9

Page 16: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 16 -

8 IF HALMAZT_KERES( u ) ≠ HALMAZT_KERES( v ) 9 THEN EGYESÍT( u, v )

10 RETURN( G ) Két kézenfekvő módszer kínálkozik a diszjunkt halmazok adatstruktúra realizálására:

1. a listás realizáció és a 2. gyökeres fákból álló erdős realizáció.

A listás realizáció esetén mindegyik halmaz egy önálló lista. A lista első elemét kinevezzük képviselőnek. Mindegyik listaelemnek van egy mutatója, amely a lista következő elemére mutat és van egy, amely a képviselőre. A képviselő is visszamutat saját magára. Az EGYESÍT eljárás ilyenkor a két lista összekapcsolását jelenti, ahol a második listában minden elemnek a képviselő mutatót le kell cserélni az első lista képviselőjére mutató mutatóra. Példa: Két halmaz, az egyik az {a,b,c,d} elemekből áll, képviselőjük az a elem. A másik az {e,f,g} elemekből áll, képviselőjük az e elem.

Az összekapcsolás eredménye: EGYESÍT( a, e ) Ugyanezen halmazoknak a gyökeres fás erdős realizációja lehet az alábbi. Az ábrán az egyesítés műveletének az eredménye is látható.

a gyökér

b d

c

e gyökér

f

g

gyökér e

f

g

a

b d

c

fej a

b

c

d

e

f

g

fej a

b

c

d

fej e

f

g

Page 17: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 17 -

Diszjunkt halmaz erdőkre a pszeudokód az alábbi lehet. Megadjuk az összekapcsolás algoritmusát is, amely egy rang fogalmat használ. Minden elemhez hozzárendelünk egy nemnegatív rang számértéket. Ez kezdetben zérus, majd növekedhet. Az összekapcsolásnál a nagyobb rangú képviselő lesz az új képviselő, egyenlőség esetén a másodiknak megadott, melynek a rangját eggyel megnöveljük. Szülő[ x ] az x által mutatott elemnek a szülőjére mutató mutató, Rang[ x ] pedig az elem rang mezeje.

5.2.4.2. algoritmus Elemből halmaz készítése // ( ) ( )1Θ=nT

1 HALMAZT_KÉSZÍT ( x ) 2 // Input paraméter: x – mutató az elemre 3 // Output: az x mutatójú elem kiegészítve halmazinformációkkal 4 // 5 Szülő[ x ] ←x 6 Rang[ x ] ←0 7 RETURN

5.2.4.3. algoritmus Két diszjunkt halmaz uniója (összekapcsolása) // ( ) ( )1Θ=nT

1 ÖSSZEKAPCSOL( x, y ) 2 // Input paraméter: x – mutató az első halmaz képviselőjére // y - mutató a második halmaz képviselőjére

3 // Output: az összekapcsolt halmaz 4 // 5 IF Rang[ x ] > Rang[ y ] 6 THEN Szülő[ x ] ← x 7 ELSE Szülő[ x ] ← y 8 IF Rang[ x ] = Rang[ y ] 9 THEN INC (Rang[ y ])

10 RETURN

5.2.4.4. algoritmus Halmaz keresése // ( ) ( )hnT Θ= , h a fa magassága

1 HALMAZT_KERES( x, y ) 2 // Input paraméter: x – elem mutatója 3 // Output paraméter: y – x halmaza képviselőjének mutatója 4 // 5 y ← x 6 IF y ≠ Szülő[ y ] 7 THEN HALMAZT_KERES( Szülő[ y ], y) 8 RETURN ( y )

5.2.4.5. algoritmus Két diszjunkt halmaz egyesítése

Page 18: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 18 -

// ( ) ( )hnT Θ= , h a magasabb fa magassága

1 EGYESÍT( x, y ) 2 // Input paraméter: x – az egyik elem mutatója 3 // y – a másik elem mutatója 4 // Output: a két elem halmaza egyesítve 5 // 6 HALMAZT_KERES( x, u ) // u az x képviselője 7 HALMAZT_KERES( y, v ) // v az y képviselője 8 ÖSSZEKAPCSOL( u, v ) 9 RETURN

5.2.5. Binomiális fák és binomiális kupac

Definíció: A binomiális fa A Bk binomiális fa egy rekurzív módon rendezett fa. B0 egyetlen csúcsból áll, Bk

pedig két összekapcsolt Bk-1 binomiális fából (k=1,2,3,…), ahol az egyik fa gyökércsúcsa a másik gyökerének legbaloldalibb gyereke.

Alább szemléltetjük a B0, B1, B2, B3 binomiális fákat.

B1 B2B0 B3

Tétel: A Binomiális fák tulajdonságai Ha Bk binomiális fa, akkor

1. 2k csúcsa van 2. A magassága k

3. Az i-dik szinten (mélységben) pontosan (i = 0,1,2,…,k) számú csúcs

van.

⎟⎟⎠

⎞⎜⎜⎝

⎛ik

4. A gyökércsúcs fokszáma k, ami nagyobb, mint bármely más csúcs fokszáma; továbbá ha a gyökércsúcs gyerekeit balról jobbra megszámozzuk k-1, k-2,…,1,0-val, akkor az i. gyerek egy Bi részfa gyökércsúcsa.

Következmény: Egy n csúcsú binomiális fa minden csúcsának fokszáma legfeljebb log2 n. Definíció: A binomiális kupac Egy H binomiális kupac binomiális fák olyan halmaza, mely rendelkezik az

alábbi úgynevezett binomiális-kupac tulajdonságokkal:

Page 19: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 19 -

1. H minden binomiális fája kupac-rendezett, azaz minden csúcs kulcsa

nlő, mint a szülőjének a kulcsa. 2. feljebb egy olyan binomiális fa

egjegyzés: Egy n elemű binomiális kupac legfeljebb ⎣log2 n⎦+1 binomiális fából áll. Ha

binomiális kupac műveletei:

INOMIÁLIS_KUPACOT_KÉSZÍT(H) Egy új üres H kupacot készít és ad vissza

nagyobb vagy egyeBármilyen fokszámot tekintünk, H-ban legvan, amelyikben a gyökércsúcs fokszáma a tekintett fokszám.

Mfelírjuk n kettes számrendszerbeli alakját, akkor a binomiális kupacban azok a binomiális fák szerepelnek, amelyeknek az indexe éppen megegyezik a szám alakjában a szereplő kettő hatvány kitevőjével. Például, ha 11 csúcs van a binomiális kupacban, akkor 11=10112, ezért a kupac három fából áll és ezek a B3, B1, B0 fák. A BBESZÚR( H, x ) A H kupacba beszúr egy olyan x csúcsot,

amelynek a kulcsmezője már ki van töltve BINOMIÁLIS_KUPACBAN_MIN( H, min ) Visszaad egy olyan mutatót, amely a H

kupacnak a minimális kulcsú csúcsára mutat

KIVESZ_MIN( H, min ) kupacból kiveszi azt a csúcsot, A H amelynek a kulcsa minimális, és visszaad egy erre a csúcsra mutató pointert

EGYESÍT( H1, H2, H ) ad vissza, Egy olyan új H kupacot készít és amelyik a H1 és H2 minden csúcsát tartalmazza. H1 és H2 megsemmisül

KULCSOT_CSÖKKENT( H, x, k ) -értéket A H kupac x csúcsához az új k kulcsrendeli hozzá, feltéve, hogy ez az érték nem nagyobb, mint az eredeti.

TÖRÖL( H, x ) törli. A H kupacból az x csúcsot A binomiális kupac ábrázolásakor a kupacban szereplő fákat a gyökércsúcs fokszáma szerinti

Szülő mutató

növekedő sorrendnek megfelelően soroljuk fel. A gyökércsúcsokat egy listára fűzzük fel, melynek a kezdetére egy fejelem mutató mutat.

Kirészletezzük az egyes csúcspontok mezőit is. Minden csúcspontban az alábbi kísérő információkat tároljuk.

Kulcs Fokszám

10 1

25 12

18

6

29 14

38

8

17 11

27

Fejelem[H]

Page 20: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 20 -

Bal gyerekmutató

Jobb testvérmutató

z előző ábra ezen információkkal kirészletezve:

szeudokódok a műveletekre.

5.2.5.1. algoritmus

A P

Bino ése miális kupac készít // ( ) (1)Θ=nT

1 INOMIÁLIS_KUPACOT_KÉSZÍT( H ) B2 // Output paraméter: H az üres új binomiális kupac 3 // 4 fejelem[H] ← NIL 5 RETURN ( H )

5.2.5.2. algoritmus Binomiáli mkeresés s kupacban minimu // ( ) ( )nnT logΘ=

1 INOMIÁLIS_KUPACBAN_MIN( H, min ) B2 // Input paraméter: H – a binomiális kupac 3 // Output paraméter: min – mutató a minimális elemre

Fejelem[H] nil

0

10

nil

2

1

nil

1

12

nil

0

25

nil nil

0

18

nil

6

3

nil

nil nil

0

29

1

14

nil nil

38

2

8

nil nil

0 0

17

1

11

nil nil

0

27

Page 21: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 21 -

4 // 5 min ← NIL 6 x ← fejelem[H] 7 minkulcs ← ∞ 8 WHILE x ≠ NIL DO 9 IF kulcs[ x ] < minkulcs

1 kulcs[ x ] 0 THEN minkulcs ←11 min ← x 12 x ← testvér[ x ] 13 14 RETURN ( min )

5.2.5.3. algoritmus

Binom olása iális fák összekapcs// ( ) (1Θ=n ) T

1 INOMIÁLIS_ÖSSZEKAPCSOLÁS ( y, z ) B2 // Két Bk-1 y és z gyökércsúcsú fát összekapcsol 3 // Input paraméter: y – az első fa gyökérmutatója 4 // z – a második fa gyökérmutatója 5 // Output paraméter: z – az eredményfa gyökérmutatója 6 // 7 szülő[ y ] ← z 8 testvér[ y ] ← gyerek[ z ] 9 gyerek[ z ] ← y

1 ] ) 0 INC ( fokszám[ z11 RETURN ( z )

5.2.5.4. algoritmus Binomiális kupacok egyesítése // ( ) ( )nnT logΘ=

1 INOMIÁLIS_KUPACOKAT_EGYESIT ( H1, H2, H ) B3 // Input paraméter: H1 – az első kupac 4 // H2 – a második kupac 5 // Output paraméter: H – az eredmény kupac 6 // 7 // A kupacok gyökércsúcsainak listáit összefésüli növekvő fokszám szerint. Minden

fokszámhoz legfeljebb két gyökércsúcs tartozhat. Ezután az azonos fokszámúakat összekapcsolja egy magasabb fokszámúvá. Átmenetileg előfordulhat, hogy azonos fokszámmal három gyökércsúcs is rendelkezik. Ilyenkor az összekapcsolást az utolsó kettőre kell elvégezni.

8 RETURN ( H ) 5.2.5.5. algoritmus Binom úrás iális kupacba besz // ( ) ( )nnT logΘ=

1 INOMIÁLIS_KUPACBA_BESZÚR ( H, x ) B

Page 22: 5. A gráf, mint adatstruktúra - University of Miskolcmatnf/adatst/ea/ea6.pdf · 5. A gráf, mint adatstruktúra 5.1. Gráfelméleti bevezető Definíció: Az irányított gráf

Adatstruktúrák, algoritmusok - 22 -

3 // Input paraméter: H1 – a kupac 4 // x – beszúrandó elem mutatöja 5 // Output paraméter: H – a megváltozott kupac 6 // 7 // Létrehozunk egy egy csúcsból álló új binomiális kupacot, amely a beszúrandó csúcsot

tartalmazza. Az új és a régi kupacot egyesítjük. (5.2.5.4. algoritmussal.) 8 RETURN ( H ) 5.2.5.6. algoritmus Binomiális kivágása kupacból minimum // ( ) ( )nnT logΘ=

1 INOMIÁLIS_KUPACBÓL_MINIMUMOT_KIVÁG ( H ) B2 // Input paraméter: H – a kupac 3 // Output paraméter: H – a megváltozott kupac 4 // 5 // Megkeressük a gyökérlánc minimális elemét. A minimális elem fáját a gyökérlistából

kiláncoljuk. A minimális elem gyerekeinek listáját megfordítjuk és létrehozunk egy binomiális kupacot, amelynek ez lesz a gyökérlistája. A két kupacot egyesítjük.

6 RETURN ( H ) 5.2.5.7. algoritmus Binomiális kupacban kulcsérték csökkentése // ( ) ( )nnT logΘ=

1 INOMIÁLIS_KUPACBAN_KULCSOT_CSÖKKENT ( H, x, k ) B2 // Input paraméter: H – a kupac 3 // x – mutató a csökkentendő kulcsú elemre 4 // k – az új kulcsérték 5 // Output paraméter: H – a megváltozott kupac 6 // 7 // A csökkentett kulccsal az elemet a fájában mindaddig felfelé buborékoltatjuk cserékkel,

amíg a kupac tulajdonság nem teljesül. Az elem eljuthat akár a gyökérlistáig is. 8 RETURN ( H )

5.2.5.7. algoritmus Binomiális kupacból törlés // ( ) ( nnT logΘ= )

1 INOMIÁLIS_KUPACBÓL_TÖRÖL ( H, x ) B2 // Input paraméter: H – a kupac 3 // x – mutató a törlendő elemre 4 // Output paraméter: H – a megváltozott kupac 5 // 6 BINOMIÁLIS_KUPACBAN_KULCSOT_CSÖKKENT( H, x, - ∞ ) 7 BINOMIÁLIS_KUPACBÓL_MINIMUMOT_KIVÁG( H ) 7 RETURN ( H )