Adatszerkezetek�2022.10.18
Ismétlés
Kereső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
Bináris kereső fa felépítése
Bináris kereső fa felbejárása
https://visualgo.net/en/bst
Elem törlése a BST-ből
Törlés a fából
Hasító táblázatok
Hasító táblázatok
Hasító táblázatok
Hasító táblázatok
Hasító táblázatok
Hasító táblázatok
Hasító táblázatok
Hasító táblázatok
Hasító táblázatok
Hasító táblázatok
?
Hasító táblázatok
?
Hasító táblázatok
Tárolandó elemek
Tárolási hely
Hasító táblázatok
Tárolandó elemek
Tárolási hely
Hasító táblázatok
Tárolandó elemek
Tárolási hely
Hasító táblázatok
Tárolandó elemek
One-One
H(x) = x
Hasító táblázatok
Tárolandó elemek
Tárolási hely
Hasító táblázatok
Hash tábla mérete
Hasító táblázatok
Hasító táblázatok
Many-One
H(x) = x%size
Hasító függvények
• A hash táblák alapja a „megfelelően” megválasztott hash függvény.
- Irodalom tartalmaz jót és rosszat is
- Nincs univerzális megegyezés arról mi tekinthető jónak
- Rosszul választott függvény kulcs ütközéshez
(collision) vezet
Hasító függvények
• Kulcsok csoportosulása (clustering): Ebben az esetben annak a valószínűsége hogy több kulcs ugyanazt az indexet adja meg jóval nagyobb mintha egy véletlen szám generátor függvényt használtunk volna.
Hasító függvények
Függvény minősége:
„Avalanche” effektus
Hasító táblázatok
Ütközésfeloldásra a következő megoldásokat használjuk:
Hasító táblázatok
Ütközésfeloldásra a következő megoldásokat használjuk:
Hasító táblázatok
Ütközésfeloldásra a következő megoldásokat használjuk:
Ha a kitöltési tényező kb. 0.7-re növekszik, mindegyik módszer meglassul.
Láncolás (chaining)
Láncolás (chaining)
Láncolás (chaining)
Láncolás (chaining)
Láncolás (chaining)
Láncolás (chaining)
Láncolás (chaining)
Láncolás (chaining)
Lineáris kipróbálás
Lineáris kipróbálás
Lineáris kipróbálás
Lineáris kipróbálás
ÜTKÖZÉS
Lineáris kipróbálás
Lineáris kipróbálás
Lineáris kipróbálás
Lineáris kipróbálás
Elértünk egy üres helyig, tehát nincs a táblában
Lineáris kipróbálás
Clustering problem
Lineáris kipróbálás
Működés feltételei:
Négyzetes kipróbálás
Négyzetes kipróbálás
Négyzetes kipróbálás
Négyzetes kipróbálás
ÜTKÖZÉS
ÜTKÖZÉS
Négyzetes kipróbálás
Dupla hasítás
Dupla hasítás
h(k, j) = (h'(k) + jh''(k)) mod m,
ahol h' és h'' kisegítő hasítófüggvények (dupla hasítás).
Dupla hasítás
Dupla hasítás
Dupla hasítás
Dupla hasítás
h(k, j) = (h'(k) + jh''(k)) mod m,
Dupla hasítás
h(k, j) = (h'(k) + jh''(k)) mod m,
Dupla hasítás
h(k, j) = (h'(k) + jh''(k)) mod m,
Dupla hasítás
ÜTKÖZÉS
h(k, j) = (h'(k) + jh''(k)) mod m,
Dupla hasítás
h(k, j) = (h'(k) + jh''(k)) mod m,
Dupla hasítás
Lineáris próba, törlés
Lineáris próba, törlés
Lineáris próba, törlés
A nyílt címzéses hasító táblázatokból való törlés kissé nehezebb.
Amikor töröljük az i-edik résben lévő kulcsot, nem elegendő a nil beírásával jelezni annak ürességét
Lineáris próba, törlés
Ha csak ezt tennénk, akkor lehetetlen lenne minden olyan kulcs visszakeresése, melynek beszúrása során az i-edik rést kipróbáltuk és foglaltnak találtuk.
Egy lehetséges megoldás az, hogy a töröltség jelölésére a nil helyett egy másik speciális értéket, a törölt-et használjuk.
Lineáris próba, törlés
Feladatok
Adott egy nyílt címzéses, m = 11 hosszúságú (üres) hasító táblázat a h (k) = k mod m elsődleges hasító függvénnyel, s tekintsük a beszúrandó 10, 22, 31, 4, 15, 28, 17, 88, 59 kulcsokat.
Szemléltessük a beszúrás eredményét akkor, ha a lineáris kipróbálást, a c1 = 1 és c2 = 3 állandókat használó négyzetes kipróbálást, illetve a h2(k) = 1 + (k mod (m − 1)) másodlagos hasító függvényű dupla hasítási módszert alkalmazzuk.
Feladatok
Feladatok
Feladatok
Feladatok
Feladatok
Feladatok
„Csomósodás”
Feladatok
Feladatok
Feladatok
Feladatok
Feladatok