490 likes | 596 Vues
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
E N D
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 Ennek 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 Sülly(t) KHeap(t) bal(t) = Ω t = Ω S K I P KHeap(bal(t)) S K I P jobb(t) = Ω KHeap(jobb(t)) ir:=bal gy(bal(t))≥gy(jobb(t)) Sülly(t) ir:=bal ir := jobb gy(t) ≥ gy(ir(t)) S K I P Csere(gy(t), gy(ir(t))) Sülly(ir(t))
A fa ábrázolása 5 8 2 11 1 10 7 3 4 9 6 12
Meghívjuk a KHeapet először a gyökér bal gyerekére 5 8 2 11 1 10 7 3 4 9 6 12
Újra meghívjuk a Kheapet a bal gyerekreEbben (pirossal jelölt) részfában már fennáll a kupac tulajdonság 5 8 2 11 1 10 7 3 4 9 6 12
Meghívjuk a Kheapet a jobb részfára is, majd süllyesztünk, a 9-es irányába 5 8 2 11 1 10 7 3 4 9 6 12
A süllyesztés után helyreállt a kupactulajdonság ebben a részfában is 5 8 2 11 9 10 7 3 4 1 6 12
Most újra süllyesztünk, a 2-est 5 8 2 11 9 10 7 3 4 1 6 12
Csere(2, 11) után 5 8 11 2 9 10 7 3 4 1 6 12
Csere(2, 4) után elértük hogy az eredeti fa balgyereke is kupac legyen 5 8 11 4 9 10 7 3 2 1 6 12
Most meghívjuk a Kheapet az eredeti fa jobb gyerekére 5 8 11 4 9 10 7 3 2 1 6 12
A pirossal jelölt részfára újra meghívjuk a Kheap-et, majd süllyesztünk 5 8 11 4 9 10 7 3 2 1 6 12
Elértük a kupactulajdonságot ebben a részfában 5 8 11 4 9 12 7 3 2 1 6 10
A 7-esre meghívjuk a Kheap-et, ennek se bal, se jobb gyereke nincs 5 8 11 4 9 12 7 3 2 1 6 10
Most a részfa gyökerét süllyesszük 5 8 11 4 9 12 7 3 2 1 6 10
Most a részfa gyökerét süllyesszük 5 12 11 4 9 8 7 3 2 1 6 10
Most a részfa gyökerét süllyesszük 5 12 11 4 9 10 7 3 2 1 6 8
Elértük a jobb és bal gyerekekben a kupactulajdonságot, most még süllyeszteni kell a fa gyökerét 5 12 11 4 9 10 7 3 2 1 6 8
Elértük a jobb és bal gyerekekben a kupactulajdonságot, most még süllyeszteni kell a fa gyökerét 5 12 11 4 9 10 7 3 2 1 6 8
Süllyesztés 12 5 11 4 9 10 7 3 2 1 6 8
Süllyesztés 12 10 11 4 9 5 7 3 2 1 6 8
Elértük, hogy a fa kupac legyen 12 10 11 4 9 8 7 3 2 1 6 5
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 1 10 7 bal(t) = Ω 9 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 1 10 7 bal(t) = Ω 9 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 1 10 7 bal(t) = Ω 9 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 1 10 7 bal(t) = Ω 9 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 1 10 7 bal(t) = Ω 9 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 1 10 7 bal(t) = Ω 9 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 1 10 7 bal(t) = Ω 9 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 1 10 7 bal(t) = Ω 9 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 2 8 Sülly(t) 11 9 10 7 bal(t) = Ω 1 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 2 9 10 7 bal(t) = Ω 1 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 2 9 10 7 bal(t) = Ω 1 6 12 3 4 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 10 7 bal(t) = Ω 1 6 12 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 10 7 bal(t) = Ω 1 6 12 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 10 7 bal(t) = Ω 1 6 12 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 10 7 bal(t) = Ω 1 6 12 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 10 7 bal(t) = Ω 1 6 12 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 12 7 bal(t) = Ω 1 6 10 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 12 7 bal(t) = Ω 1 6 10 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 12 7 bal(t) = Ω 1 6 10 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 8 Sülly(t) 4 9 12 7 bal(t) = Ω 1 6 10 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 12 Sülly(t) 4 9 8 7 bal(t) = Ω 1 6 10 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 5 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 12 Sülly(t) 4 9 10 7 bal(t) = Ω 1 6 8 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 12 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 5 Sülly(t) 4 9 10 7 bal(t) = Ω 1 6 8 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 12 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 10 Sülly(t) 4 9 5 7 bal(t) = Ω 1 6 8 3 2 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))
Hogyan zajlott le az algoritmus? KHeap(t) t = Ω 12 S K I P KHeap(bal(t)) KHeap(jobb(t)) Sülly(t) 11 10 Sülly(t) 4 9 8 7 bal(t) = Ω 1 6 5 3 2 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))