Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Algoritmusok és Adatszerkezetek I.

Hasonló előadás


Az előadások a következő témára: "Algoritmusok és Adatszerkezetek I."— Előadás másolata:

1 Algoritmusok és Adatszerkezetek I.
Keresőfák 2018. október 9.

2 Leszállópálya nyilvántartási probléma
Repterünknek egyetlen kifutópályája van. A landolási időket nyilvántartó rendszert fejlesztünk. Minden repülő elküld egy t időpillanatot amikor le szeretne szállni Ha biztonságos a leszállás, azaz ±3 percen belül nincs ütemezett leszállás akkor rögzítsük a kérést Akik már leszálltak azokat távolítsuk el a nyilvántartásból Feladat:

3 Leszállópálya nyilvántartási probléma
kérés: 43 kérés: 37 idő most 35 37 39 43 47 KERESsük meg a legnagyobb elemet R-ben ami nem kisebb, mint a t kérés Ha ez 3 távolságon belül van t-től return nil egyébként keressük meg a RÁKÖVETKEZŐ elemet is Ha a rákövetkező elem 3 távolságon belül van t-től return nil egyébként BESZÚRjuk t-t R-be Másik use-case: 1. Ha most>min(R) akkor TÖRÖLjük min(R)-et KERES, BESZÚR, TÖRÖL, RÁKÖVETKEZŐ legyen O(log|R|) idejű!

4 Milyen adatszerekzetet használjunk?
n=|R| T(BESZUR)=T(TORLES) rendezetlen lista: KERES O(n), BESZÚR O(1), KÖVETKEZŐ O(n) rendezett tömb (bináris keresés): KERES O(logn), BESZÚR O(n), KÖVETKEZŐ O(1) kupac: KERES O(n), BESZÚR O(logn), KÖVETKEZŐ O(n)

5 Fa Fa = összefüggő, körmentes gráf
Bármely két csúcsát pontosan egy út köti össze A fa elsőfokú csúcsait levélnek hívjuk. Egy nem levél csúcs a fában belső csúcs.

6 Bináris fa Gyökeres fa: van egy kitűntetett csúcsa, a gyökér Bináris fa: minden csúcsnak legfeljebb két gyereke van 1 2 4 1 gyerek szülő/apa 3 1 2 5 3 4 4 magasság (h) 6 2 5 3 5 6 6

7 Fák reprezentációja csúcsokat és éleiket reprezentáljuk
maga a fa egy mutató a gyökérre gyerek éllista első fiú, apa, testvér bináris fa szülő apa szülő testvér gyerekk gyerek1 első fiú bal jobb class Node{ Object key; Node parent; Node first_child; Node brother; } class Node{ Object key; Node parent; Node left; Node right; } class Node{ Object key; Node parent; List<Node> children; }

8 Bináris keresőfa

9 Inorder fabejárás if x≠NIL then FABEJÁRÁS(bal[x]) muvelet(kulcs[x]) FABEJÁRÁS(jobb[x]) 2 3 5 5 7 8 2 3 5 5 7 8

10 KERES KERES(19) KERES(13) hibás a könyv! O(h) és

11 MIN/MAX MAX() MIN() O(h)

12 KÖVETKEZŐ/ELÖZŐ ELÖZŐ(9) KÖVETKEZŐ(13) KÖVETKEZŐ(15) ELÖZŐ(6) O(h)

13 BESZÚR O(h)

14 TÖRÖL Ha törlendő csúcs levél TÖRÖL(13)

15 TÖRÖL Ha törlendő csúcsnak egy gyereke van TÖRÖL(16)

16 TÖRÖL Ha törlendő csúcsnak két gyereke van TÖRÖL(5)

17 TÖRÖL O(h)

18 Keresőfa vs Kupac Kupac Kereső fa KERES() O(n) O(h) MAX() O(1)
BESZÚR() TÖRÖL() KÖVETKEZŐ()

19 Leszállópálya nyilvántartási algoritmus
y ← nil x ← gyökér[T] while x ≠ nil do y ← x if kulcs[z] < kulcs[x] then x ← bal[x] else x ←jobb[x] if ABS(kulcs[z] - kulcs[y]) < 3 then return NIL if kulcs[z] < kulcs[y] then if kulcs[z] - ELÖZŐ(kulcs[y]) < 3 else bal[y] ← z else if KÖVETKEZŐ(kulcs[y]) - kulcs[z] < 3 else jobb[y] ← z O(h)

20 Leszállópálya nyilvántartási algoritmus
másik use-case: TÖRÖL(MIN(R)) A minimális elemnek legfeljebb egy gyereke van, így a harmadik esetet nem is kell implementálni O(h)

21 Fa magassága (h) Általános bináris keresőfa esetén semmi sem biztosítja, hogy h=Θ(logn) Pl szúrjuk be sorban: 2,3,5,5,7,8 A kupac egy teljes bináris fa, azaz legfeljebb egy belső csúcsa van aminek csak egy gyereke van. Egy teljes bináris fa magassága ⌈log2(n+1)⌉ A keresőfák nem teljesek!

22 Fa magassága (h) Legrosszabb esetben a kereső fa magassága n
Ugyanazokat az elemeket számtalan keresőfában tárolhatjuk Kiegyensúlyozott keresőfa: törekszünk arra, hogy a keresőfa magassága a lehető legkisebb maradjon, de műveletek továbbra is a magasság függvénye legyen

23 Piros-fekete fák Egy fajta kiegyensúlyozott keresőfa

24 Piros-fekete fák Minden csúcs színe vagy piros, vagy fekete.
A gyökércsúcs színe fekete. Minden levél (NIL) színe fekete. Minden piros csúcsnak mindkét gyereke fekete. Bármely csúcsból bármely levélig vezető úton ugyanannyi fekete csúcs van.

25 Piros-fekete fák Bármely n belső csúcsot tartalmazó piros-fekete fa magassága legfeljebb 2log2(n+1). → megközelítőleg kiegyensúlyozott Bizonyítás: minden x gyökerű részfa legalább 2fm(x) −1 belső csúcsot tartalmaz 4. tulajdonság → fm(gyökér) ≥ h/2 n ≥ 2h/2 −1

26 Piros-fekete fák KERES, MIN/MAX, KÖVETKEZŐ/ ELÖZŐ sima keresőfa műveletek Módosító műveleteknél (BESZÚR, TÖRÖL) fent kell tartani az 5 piros-fekete tulajdonságot! A tulajdonságok helyreállítása is megvalósítható O(logn) időben

27 Törlés piros-fekete fából

28 Keresőfa Javában Set<Object> s = new TreeSet<>();

29 Java TreeSet

30 Keresőfák Implementációk általában piros-fekete fát valósítanak meg: C++ std::set C# TreeSet Scala collection.immutable.TreeSet

31

32 Összegzés Keresőfák a fa magasságában lineáris időben valósítják meg a keresést, módosítást és következő/elöző műveleteket Leszállópálya nyilvántartási probléma Keresőfák magassága kontrolállható több módon, egy példa: piros-fekete fák (Java TreeSet)


Letölteni ppt "Algoritmusok és Adatszerkezetek I."

Hasonló előadás


Google Hirdetések