49
Rekurzív algoritmus kupac építésére Készítette: Krizsai Petra

Rekurzív algoritmus kupac építésére

Embed Size (px)

DESCRIPTION

Rekurzív algoritmus kupac építésére. Készítette: Krizsai Petra. Feladat. Egy majdnem teljes bináris fa szintfolytonosan a következő számokat tartalmazza: 5, 2, 8, 11, 1, 10, 7, 3, 4, 9, 6, 12 - PowerPoint PPT Presentation

Citation preview

Rekurzív algoritmus kupac építésére

Készítette: Krizsai Petra

Feladat

Egy majdnem teljes bináris fa szintfolytonosan a következő számokat tartalmazza: 5, 2, 8, 11, 1, 10, 7, 3, 4, 9, 6, 12Ennek a kiinduló állapotnak a rajza mellett mutassuk meg, hogy hogyan működik az a rekurzív algoritmus, amely az elemek cseréjével kupacot alakít ki!

Az algoritmus

KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

KHeap(jobb(t))

Sülly(t)

Sülly(t)

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=balgy(bal(t))≥gy(jobb(t))

ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP

Csere(gy(t), gy(ir(t)))

Sülly(ir(t))

A fa ábrázolása

5

3 4 9 6 12

11 1 10 7

2 8

Meghívjuk a KHeapet először a gyökér bal gyerekére

5

3 4 9 6 12

11 1 10 7

2 8

Újra meghívjuk a Kheapet a bal gyerekreEbben (pirossal jelölt) részfában már fennáll a kupac tulajdonság

5

3 4 9 6 12

11 1 10 7

2 8

Meghívjuk a Kheapet a jobb részfára is, majd süllyesztünk, a 9-es irányába

5

3 4 9 6 12

11 1 10 7

2 8

A süllyesztés után helyreállt a kupactulajdonság ebben a részfában is

5

3 4 1 6 12

11 9 10 7

2 8

Most újra süllyesztünk, a 2-est

5

3 4 1 6 12

11 9 10 7

2 8

Csere(2, 11) után

5

3 4 1 6 12

2 9 10 7

11 8

Csere(2, 4) után elértük hogy az eredeti fa balgyereke is kupac legyen

5

3 2 1 6 12

4 9 10 7

11 8

Most meghívjuk a Kheapet az eredeti fa jobb gyerekére

5

3 2 1 6 12

4 9 10 7

11 8

A pirossal jelölt részfára újra meghívjuk a Kheap-et, majd süllyesztünk

5

3 2 1 6 12

4 9 10 7

11 8

Elértük a kupactulajdonságot ebben a részfában

5

3 2 1 6 10

4 9 12 7

11 8

A 7-esre meghívjuk a Kheap-et, ennek se bal, se jobb gyereke nincs

5

3 2 1 6 10

4 9 12 7

11 8

Most a részfa gyökerét süllyesszük

5

3 2 1 6 10

4 9 12 7

11 8

Most a részfa gyökerét süllyesszük

5

3 2 1 6 10

4 9 8 7

11 12

Most a részfa gyökerét süllyesszük

5

3 2 1 6 8

4 9 10

11 12

7

Elértük a jobb és bal gyerekekben a kupactulajdonságot, most még süllyeszteni kell a fa gyökerét

5

3 2 1 6 8

4 9 10

11 12

7

Elértük a jobb és bal gyerekekben a kupactulajdonságot, most még süllyeszteni kell a fa gyökerét

5

3 2 1 6 8

4 9 10

11 12

7

Süllyesztés

12

3 2 1 6 8

4 9 10

11 5

7

Süllyesztés

12

3 2 1 6 8

4 9 5

11 10

7

Elértük, hogy a fa kupac legyen

12

3 2 1 6 5

4 9 8

11 10

7

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 9 6 12

11 1 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 9 6 12

11 1 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 9 6 12

11 1 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 9 6 12

11 1 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 9 6 12

11 1 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 9 6 12

11 1 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 9 6 12

11 1 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 9 6 12

11 1 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 1 6 12

11 9 10 7

2 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

5

3 4 1 6 12

2 9 10 7

11 8

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 4 1 6 12

2 9 10 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 12

4 9 10 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 12

4 9 10 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 12

4 9 10 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 12

4 9 10 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 12

4 9 10 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 10

4 9 12 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 10

4 9 12 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 10

4 9 12 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 10

4 9 12 7

11 8

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 10

4 9 8 7

11 12

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

5

3 2 1 6 8

4 9 10 7

11 12

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

12

3 2 1 6 8

4 9 10 7

11 5

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

12

3 2 1 6 8

4 9 5 7

11 10

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Hogyan zajlott le az algoritmus?KHeap(t)

t = Ω

SKIP

KHeap(bal(t))

Sülly(t)

KHeap(jobb(t))

12

3 2 1 6 5

4 9 8 7

11 10

bal(t) = Ω

SKIP

jobb(t) = Ω

ir:=bal gy(bal(t))≥gy(jobb(t))ir:=bal ir := jobb

gy(t) ≥ gy(ir(t))

SKIP Csere(gy(t),gy(ir(t)))Sülly(ir(t))

Sülly(t)

Vége