Algoritmusok és adatszerkezetek gyakorlat 07

Hasonló dokumentumok
Kupac adatszerkezet. 1. ábra.

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

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

7 7, ,22 13,22 13, ,28

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Rendezettminta-fa [2] [2]

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

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

Példa 30 14, 22 55,

Hierarchikus adatszerkezetek

10. előadás Speciális többágú fák

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

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

Adatszerkezetek és algoritmusok

Adatszerkezetek 7a. Dr. IványiPéter

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

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül.

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

Algoritmusok és adatszerkezetek II.

Elemi adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

file:///d:/apa/okt/ad/jegyzet/ad1/b+fa.html

Algoritmusok és adatszerkezetek II.

Algoritmuselmélet 2. előadás

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

Egyesíthető prioritási sor

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

Fák Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

Adatszerkezet - műveletek

Keresőfák és nevezetes algoritmusaikat szemléltető program

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Önszervező bináris keresőfák

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

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

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

15. A VERSENYRENDEZÉS

Fa (Tree): csomópontok (nodes) halmaza, amelyeket élek (edges) kötnek össze, és teljesülnek az alábbi feltételek:

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

6. előadás. Kiegyensúlyozottság, AVL-fa, piros-fekete fa. Adatszerkezetek és algoritmusok előadás március 6.

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

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

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

Adatszerkezetek 2. Dr. Iványi Péter

Bináris keresőfák. Adat : M Elemtip és Elemtip-on értelmezett egy lineáris rendezési reláció,

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Térinformatikai adatszerkezetek

Fájlszervezés. Adatbázisok tervezése, megvalósítása és menedzselése

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 6.

Tuesday, March 6, 12. Hasító táblázatok

Hierarchikus adatszerkezetek

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

ÖNSZERVEZŐ BINÁRIS KERESŐFÁK HATÉKONYSÁGA

Algoritmusok és Adatszerkezetek II.

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

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

Programozás I. C nyelv

Táblázatok fontosabb műveletei 1

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 7.

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

Gyakorló feladatok ZH-ra

Adatszerkezetek 1. előadás

INFORMATIKA javítókulcs 2016

16. Az AVL-fa. (Adelszon-Velszkij és Landisz, 1962) Definíció: t kiegyensúlyozott (AVL-tulajdonságú) t minden x csúcsára: Pl.:

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

GRÁFOK ÉS ALGORITMUSOK ELMÉLETE VIZSGAKÉRDÉSEK Matematika BSc Elemző szakirány II. év 1. félév

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

Algoritmusok és adatszerkezetek II.

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

Információs Technológia

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

R ++ -tree: an efficient spatial access method for highly redundant point data - Martin Šumák, Peter Gurský

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Algoritmusok bonyolultsága

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Adatszerkezetek 2. Dr. Iványi Péter

Általános algoritmustervezési módszerek

KUPAC TĺPUSÚ ADATSZERKEZETEK

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Algoritmusok és Adatszerkezetek II. előadás

Programozási segédlet

Számjegyes vagy radix rendezés

Egyirányban láncolt lista

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

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Elsőbbségi (prioritásos) sor

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

2018, Diszkrét matematika

Egyesíthető prioritási sor

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Átírás:

Algoritmusok és adatszerkezetek gyakorlat 0 Keresőfák Fák Fa: összefüggő, körmentes gráf, melyre igaz, hogy: - (Általában) egy gyökér csúcsa van, melynek 0 vagy több részfája van - Pontosan egy út vezet bármely két csúcsa között - A gyökéren kívül minden csúcsnak pontosan egy szülője van Szülő(i): az a csúcs, amely közvetlenül az i felett van Gyerek(i): az i csúcs alatt közvetlen lévő csúcsok Testvérek: ugyanannak a csúcsnak a gyerekei Gyökér: az egyetlen csúcs, aminek nincsen szülője Levél: olyan csúcs, amelynek nincs gyereke Magasság: a gyökértől bármely levélbe vezető leghosszabb út Részfa(n): az a fa, amelynek a gyökere az n Ős(n): minden csúcs az n-től a gyökérig vezető úton Leszármazott(n): minden csúcs, amely az n gyökerű részfában van Gyökér Magasság= 3 Szülő(z) Testvérek Ős(x) z x Levél Részfa Gyerek(z) Leszármazott(x) Bináris fák Bináris fa: minden csúcsnak legfeljebb 2 gyereke van Teljes (full) bináris fa: olyan bináris fa, ahol minden szint teljesen ki van töltve Majdnem teljes (complete) bináris fa: olyan bináris fa, ahol maximum a legalsó szint nincs teljesen kitöltve, csak balról jobbra haladva kitöltött néhány elemig Kiegyensúlyozott bináris fa: olyan fa, ahol minden csúcs gyerekeinek részfáinak magassága maximum eggyel tér el. 1 Gelle Kitti

1. Feladat Döntsük el a következő fákról, hogy mely tulajdonság igaz rájuk a következők közül: fa, bináris fa, teljes bináris fa, majdnem teljes bináris fa, kiegyensúlyozott bináris fa! (a) (b) (c) (d) (e) (f) (a) fa (b) fa, bináris fa (c) fa, bináris fa, majdnem teljes bináris fa, teljes bináris fa, kiegyensúlyozott bináris fa (d) fa, bináris fa, kiegyensúlyozott bináris fa (e) fa, bináris fa, majdnem teljes bináris fa, kiegyensúlyozott bináris fa (f) egyik sem, mert sérti a,,minden csúcsnak csak egy szülője van feltételt Bináris keresőfák (BST) A bináris keresőfa egy olyan adatszerkezet, amely olyan elemeket tárol, melyeknek kulcsa egy tejesen rendezett univerzumból való (pl. egészek). Feltesszük, hogy minden elem kulcsa egyedi. Egy bináris keresőfa a következő műveleteket támogatja: search(i): visszaadja azt az elemet, aminek a kulcsa i insert(i): beszúrja az i kulcsú elemet a fába (ha még nem volt benne) delete(i): törli az i kulcsú elemet a fából, ha az létezik A bináris keresőfa legfontosabb tulajdonsága, hogy minden x csúcsra a bal részfájában lévő összes elem kisebb, mint az x kulcsa, míg a jobb részfájában lévő összes elem nagyobb, mint az x kulcsa. 2 Gelle Kitti

Keresés bináris keresőfában search ( x, i ){ i f ( key ( x ) == i ) return x else i f ( i < key ( x ) ) i f ( l e f t ( x ) == NIL) return x else return search ( l e f t ( x ), i ) else i f ( i > key ( x ) ) i f ( r i g h t ( x ) == NIL) return x else return search ( r i g h t ( x ), i )} Keressük az x gyökerű részfában az i kulcsú elemet. 1. Ha a gyökér az, adjuk vissza 2. Ha a i kisebb, mint a gyökér kulcsa, keressük a bal részfájában, ha van neki 3. Ha a i nagyobb, mint a gyökér kulcsa, keressük a jobb részfájában, ha van neki 4. Ha a részfa, amire lépnénk x-ről, nem létezik, adjuk vissza az x-et 2. Feladat Keressük meg a következő keresőfában az alábbi elemeket:,,. (a) search() (b) search() (c) search() 3 Gelle Kitti

Beszúrás bináris keresőfába i n s e r t ( i ){ x = search ( i ) i f ( key ( x)==i ) return y = new node ( ) key ( y ) = i l e f t ( y)= NIL r i g h t ( y)= NIL p( y)= x i f ( i < key ( x ) ) l e f t ( x ) = y ; else r i g h t ( x ) = y} Az i csúcs beszúrásának lépései (továbbra is feltesszük, hogy a fában a kulcsok egyediek, így nem szúrhatjuk be kétszer) Keressünk rá az i-re, ez ha még nincs benne a fában, vissza fogja adni azt a csúcsot, ami alá be kell szúrni az i-t (ő lesz a szülője). Hozzunk létre egy új csúcsot (y) és szúrjuk be: - Ha i kisebb, mint az x kulcsa, akkor bal gyereknek - Ha i nagyobb, mint az x kulcsa, akkor jobb gyereknek 3. Feladat Szúrjuk be az előző feladatban látott keresőfába az és 22 értékeket. (a) search() 11 (b) new node() 11 11 22 (c) search(22) (d) new node() 4 Gelle Kitti

Törlés bináris keresőfából Három esetet különböztetünk meg az x csúcs törlésekor: 1. Ha x-nek nincs gyereke, töröljük, a szülő rá mutató pointerét NIL-re cseréljük. 2. Ha x-nek pontosan egy gyereke van c, mindegy, hogy bal vagy jobb gyerek volt, felemeljük az x helyére (x szülőjének gyereke c, c szülője az x szülője lesz). 3. Ha az x-nek két gyereke van (c 1 bal és c 2 jobb gyerek), megkeressük az x közvetlen rákövetkezőjét z-t, és őt tesszük x helyére a fában. Ebben az esetben jegyezzük meg, hogy mivel z a c 2 gyökerű részfában van így egyszerűen rákereshetünk (search(c2, key(x))). Viszont mivel z az x rákövetkezője, így biztosan nincs bal gyereke, viszont jobb gyereke még lehet. Ha van jobb gyereke, állítsuk rá z szülőjének pointerét (és z gyerekének szülője legyen z szülője). Cseréljük ki x-et z-vel és állítsuk be a megfelelő pointereket, majd töröljük x-et, mint az 1. esetben. (Egy másik megoldás, hogy x közvetlen megelőzőjét keressük meg és a fentieket tükrözve hajtjuk végre a cseréket.) 4. Feladat Töröljük az előző feladatban beszúrások után kapott fából a 11, és elmeket. A 11-nek nincsen gyereke: 1. eset. Simán kitörölhetjük. 11 22 4. Ábra.: delete(11) Gelle Kitti

A -nek egy gyereke van: 2. eset. Rakjuk a helyére az -öt. 22 22. Ábra.: delete() A -nek két gyereke van: 3. eset. Keressük meg a rákövetkezőjét. megelőző rákövetkező 22 (a) search(, ) 22 (b) helyére tegyük a 22-t, helyére a -at 6. Ábra.: delete() Megjegyzés: Egy helyes megoldás lett volna az is, ha a -et a -tal cseréljük ki. Futásidő Keresés: maximum annyit megyünk lefelé, amilyen magas a fa, tehát O(magassag). Beszúrás és törlés: mindkettőben használjuk a keresést, a többi művelet (pointerek átállítása) konstans időben végezhető, így ez is O(magassag) 6 Gelle Kitti

. Feladat Határozzuk meg mi a minimum és maximum lehetséges magassága egy n elemű fának. Ehhez szúrjuk be egy fába a következő sorrendben a 2, 18, 4,,, 32, 6 elemeket és egy másikba, 18,, 2, 32, 4, 6 sorrendben. 2 18 4 18 32 6 2 32 4 6 (a) A 2, 18, 4,,, 32, 6 sorrend fája (b) A, 18,, 2, 32, 4, 6 sorrend fája Tehát egy bináris fa mérete akkor a legalacsonyabb, ha (majdnem) teljes a fa. Egy n-csúcsú teljes fa magassága pedig log n, így egy keresés időigénye O(log n). Legrosszabb esetben, ha például egy n elemű növekvő, vagy csökkenő sorozatot kell eltárolnunk egy bináris fában, akkor egy n hosszú láncot kapunk. Ekkor a keresés O(n) ideig tart. Megjegyzés: tehát érdekünk a fa magasságát minél alacsonyabban tartani, minél közelebb egy teljes bináris fáéhoz. Ezt a gyakorlatban lokális forgatásokkal oldják meg különböző technikák és feltételek alapján. Például kiegyensúlyozott bináris keresőfák az AVL fák, Piros-fekete fák vagy Splay fák. Gelle Kitti

6. Feladat Írjunk algoritmust, ami egy elsőfiú-testvér ábrázolású fának megállapítja a magasságát! (6.1) Az algoritmus azon rekurzív összefüggés alapján számítja ki a fa magasságát, hogy minden csúcs magassága a gyerekei magasságának a maximuma +1. (A levelek magassága 0.) magassag ( f ) max = 1 g = f. e l s o f i u while ( g!=nil) m = magassag ( g ) i f (m > max) max = m g = g. t e s t v e r return max + 1. Feladat Írjunk olyan rekurzív algoritmust, ami egy elsőfiú-testvér ábrázolású fának megadja a levelei számát! (6.8) Az algoritmus azon rekurzív összefüggés alapján számítja ki a fa leveleinek számát, hogy minden csúcs alatt található levelek száma a csúcs gyerekei alatt található gyerekek számának összege. (A leveleken ez a szám 1.) l e v e l e k ( f ) i f ( f. e l s o f i u = NIL) return 1 sum = 0 g = f. e l s o f i u while ( g!= NIL) sum = sum + l e v e l e k ( g ) g = g. t e s t v e r return sum 8 Gelle Kitti

8. Feladat Írjunk olyan rekurzív algoritmust, ami egy elsőfiú-testvér ábrázolású fában megadja adott k paraméterre, hogy a fának hány csúcsa van a k szinten! (6.) Az algoritmus azon rekurzív összefüggés alapján számítja ki a k. szinten lévő csúcsok számát, hogy az első szinten a gyökér van, így az alapeset 1. A k. szinten annyi elem van, ahány részfa kezdődik azon a szinten. KSzint ( f, k ) i f ( k = 1) return 1 i f ( f. e l s o f i u = NIL) return 0 sum = 0 g = f. e l s o f i u while ( g!= NIL) sum = sum + KSzint ( g, k 1) g = g. t e s t v e r return sum 9 Gelle Kitti