1. gyakorlat
Default infók
- Gyakvez: Varga Henrik
- Idő: Hétfő 14:15-15:45
- Maximális szorgalmi pont: 20 (egy jegy)
- Minimum 2-es mind két ZH-n
- ~~Nincsenek~~ Vannak (/s?) kötelező heti kvízek :letsfuckinggoooooo:
Online jegyzetek, vizualizációk
Olyan anyagra, amire nem tudja az választ, arra lehet szorgalmi pontot szerezni, ha mi megtaláljuk (algoritmusok és adatszerkezetek 2-vel kapcsolatban).
AVL fa
- A világ legjobb adatszerkezetei a fák (bináris fák, to be exact) (ez egy faktoid, ez benne lesz a ZH-ban)
A bináris fa lehet nem valami szép is. Ha NAGYON nem valami szép, akkor basically egy láncolt lista.
A fánkat rendbe kéne rakni.
- A bináris fa minden művelet után rendeződik
- Azt akarjuk megtartani hogy mindig logaritmikus idő legyen
Az AVL fák magasság szerint kiegyensúlyozott bináris keresőfák
AVL fa feltétele:
- Minden belső csúcs jobb és bal részfájának magassága közötti különbség \(\leq 1\), avagy \(|h(p \rightarrow right)-h(p \rightarrow left)| \leq 1\)
Minden beszúrásnál ellenőrizzük, hogy ez a feltétel teljesül-e.
Minden csúcs egyensúlyát (az előbb kiszámolt \(h(p \rightarrow right)-h(p \rightarrow left)\) értéket) eltároljuk. A követelmény miatt az értéke csak \(-1, 0, 1\) lehet.
\(p \rightarrow b \in \{ -1, 0, 1 \}\)
Forgatási sémák
1-es távolságú eltérések gyakorian előfordulnak, a forgatást előidéző event az első 2-es távolságú eltérés megjelenése, aminek eredményeként vagy egyenlőség, vagy egyes eltérés fog csak maradni a fában
-: A fa magassága balra 1-gyel nagyobb, mint jobbra+: A fa magassága jobbra 1-gyel nagyobb, mint jobbra--: A fa magassága balra 2-vel nagyobb, EZT kell megszüntetni-
++: A fa magassága jobbra 2-vel nagyobb, EZT kell megszüntetni -
\((++,+) (--,-) (++,-) (--,+)\)
- \((++,+)\text{ séma tükörképe a } (--,-)\)
-
\((++,-)\text{ séma tükörképe } (--,+)\)
-
++ +: A fa jobbra húz, és a jobb részfa IS jobbra húz -- -: A fa balra húz, és a bal részfa Is balra húz++ -: A fa jobbra húz, de a jobb részfa balra-- +: A fa balrara húz, de a bal részfa jobbra
Megoldás: Úgy "forgatni" a csúcsokat, hogy az továbbra is rendezőfa maradjon (?), de a ++/-- egyensúlyok eltűnjenek.
Törlés esetén lehetséges egyéb sémák:
(--, =):(--, -)basically(++, =):(++, +)basically
Illetve, itt már lehetséges több forgatás is.
Törlésnél jobb részfa minimumával cserélünk, ha a jelenlegi csúcs nem levél
remMin: like bináris fánál