Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:

Slides:



Advertisements
Hasonló előadás
Nevezetes algoritmusok
Advertisements

MESTERSÉGES INTELLIGENCIA (ARTIFICIAL INTELLIGENCE)
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Függvények Egyenlőre csak valós-valós függvényekkel foglalkozunk.
Készítette: Mester Tamás METRABI.ELTE.  Egy bemeneten kapott szöveg(karakter sorozat) méretét csökkenteni, minél kisebb méretűre minél hatékonyabb algoritmussal.
Matematika II. 4. előadás Geodézia szakmérnöki szak 2010/2011. tanév Műszaki térinformatika ágazat tavaszi félév.
Vektormező szinguláris pontjainak indexe
Illés Tibor – Hálózati folyamok
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
AVL-fa építése.
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Készítette Schlezák Márton
Minimax és problémaredukció, egyszerű példák INCK431 Előadó: Dr. Nagy Benedek Norbert Gyakorlatvezető: Kovács Zita 2011/2012. II. félév A MESTERSÉGES INTELLIGENCIA.
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
1 Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat 1. Bevezetés Miskolc, 2004.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Programozó matematikus szak 2003/2004-es tanév II. félév
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
AVL fák.
Fák, bináris fák INFOÉRA Ez így 60 perc.
Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: d a = ( A, F, E a ); d c = ( C, G, E c ); A = {A 0,..., A n };C = {C 0,...,
Dijkstra algoritmus. Kiválasszuk a legkisebb csúcsot, ez lesz a kezdőcsúcs, amit 0-val címkézünk és megjelöljük sárgaszínnel. Szomszédjai átcímkézése.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Nevezetes algoritmusok Beszúrás Van egy n-1 elemű rendezett tömbünk. Be akarunk szúrni egy n-edik elemet. Egyik lehetőség, hogy végigszaladunk a tömbön,
Készítette: Lakos Péter.  Adott egy élsúlyozott, véges gráf  Negatív élsúlyokat nem tartalmaz  Lehet irányított vagy irányítatlan  Továbbá adott egy.
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Gráfelmélet: Fák.
Hierarchikus adatszerkezetek
Tömbök és programozási tételek
Rendezések és szövegkezelő függvények
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Kötvényárazási hibák intelligens javítóalgoritmusának tervezése és fejlesztése GELLÉN ÁGNES IUFQ58.
Fák.
RADIX bináris számokra ___A___ ___B___ Berakjuk két edénybe, a 0- kat felülről lefelé, az 1- eket alulról felfelé.
Feladat: Adott egy város, benne metrók és állomások. Írjunk algoritmust amely megszámolja hogy mennyi az a legkevesebb átszállás amellyel egy tetszőleges.
A Helyes Zárójelezés Struktogramja
A feladat : Építsünk AVL-fát a következő adatokból:100,170,74,81,136,185,150,122,52,190,144 (Az AVL-fa olyan bináris keresőfa, amelynek minden csúcsára.
Mélységi bejárás Az algoritmus elve: Egy kezdőpontból kiindulva addig megyünk egy él mentén, ameddig el nem jutunk egy olyan csúcsba, amelyből már nem.
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
Algoritmizálás, adatmodellezés tanítása 8. előadás.
Kruskal-algoritmus.
BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör
Példa kettő-három fa felépítésére - törlés művelet Készítette : Krizsai Petra
Gráfok ábrázolása teljesen láncoltan
Alapműveletek (Természetes számok, Egész számok)
Bináris kereső fák Itterátorok.
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Algoritmusok és adatszerkezetek
(Bináris) Kupac (heap) adattípus
BFák Kiegyensúlyozott keresőfák
Algoritmusok és Adatszerkezetek I.
Piros-fekete fák Beszúrás, ill. törléskor a fa elveszítheti az egyensúlyát. A piros-fekete fák: az egyensúly megtartását biztosítják. +1 bit információ.
Algoritmusok és Adatszerkezetek I.
Mesterséges intelligencia
Bináris kereső fák Definíció: A bináris kereső fa egy bináris fa,
Depth First Search Backtracking
Algoritmusok és Adatszerkezetek I.
Gráfalgoritmusok G=(V,E) gráf ábrázolása
Dijkstra algoritmusa: legrövidebb utak
Dijkstra algoritmusa: legrövidebb utak
Gráfok - 1 Definíció: Irányított gráf (digráf) G=(V,E) rendezett pár.
Dijkstra algoritmusa: legrövidebb utak
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Algoritmusok és Adatszerkezetek I.
Előadás másolata:

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő: Imre Mihály, műszaki informatikus hallgató

Treap A csúcspontban: érték, bal, jobb pointer, prioritás. A prioritás random a csúcs létrehozásakor a szabályos beviteli sorrendből eredő degeneráció elkerülésére. A treap egy bináris kereső fa azzal, hogy a csúcs prioritására teljesül a heap sorrend: bármely csúcs prioritása legfeljebb olyan nagy mint a szülőjének a prioritása. Beszúrás: a tételt levélként hozzátesszük, addig forgatjuk felfelé míg a heap feltétel nem teljesül. A forgatások várható értéke kisebb mint 2! Törlés: megkeres, prioritása legyen végtelen, lefelé forgatjuk, a kis prioritású gyerekek felé, ha levél lesz eltávolítjuk. 2

Treap {a nilnode inicializálása, végpont} Procedure Inicializal(var T:treap) Begin If Nilnode = nil then Begin New(Nilnode); Nilnode^.Left = Nilnode; Nilnode^.Right = Nilnode; Nilnode^.Prior = infinity; {max longint} End; T := Nilnode; End; Procedure Insert(Tetel: elemtipus; var T: treap) Begin If T = Nilnode then Begin New(T); T^.elem = tetel; T^.Prior = random; T^.Left := Nilnode; T^.Right = Nilnode; End 3

Treap Else If Tetel < T^.elem then Begin Insert(Tetel, T^.Left) If T^.Left^.Prior < T^.Prior then Forgatbalgyerekkel(T) End Else If Tetel > T^.elem then Begin Insert(Tetel, T^.Right) If T^.Right^.Prior < T^.Prior then Forgatjobbgyerekkel(T); End; {különben duplikátum, semmit sem csinál} End; 4

Treap Példa: értékek: {1, 2, 3, 4, 5, 6, 7}bináris keresőfa szerint generált sorszám: {6, 3, 1, 4, 2, 5, 7}heap szerint

Treap Procedure Torol(Tetel: elemtipus; var T : treap); Begin If T <> Nilnode then Begin If Tetel < T^.elem then Torol(Tetel, T^.Left) Else If Tetel > T^.elem then Torol(Tetel, T^.Right) Else {egyezés} Begin If T^.Left^.Prior < T^.Right^.Prior then Forgatbalgyerekkel(T) Else Forgatjobbgyerekkel(T); If T <> Nilnode then Torol(Tetel, T); {folytatás lefelé} Else 6

Treap Begin {levélen vagyunk} Dispose(T^.Left); T^.Left := Nilnode; End; 7

Red-Black tree Az AVL egy népszerű alternatívája, a műveletek wc: O(log N). Nem rekurzív beszúrás könnyebb, mint az AVL-ben. A RB fa bináris kereső fa az alábbi színezési tulajdonságokkal: 1.mindegyik csomópont vagy piros vagy fekete 2.a gyökér fekete 3.ha egy csúcs piros, akkor a gyerekeinek feketének kell lenniük 4.minden útvonalnak egy csúcsból egy nil pointerig ugyanannyi fekete csúcsot kell tartalmaznia. A RB fa magassága legfeljebb 2log(N+1), így a keresés garantáltan logaritmikus rendű. 8

Red-Black tree Példa: a beszúrás sorrendje: 10, 85, 15, 70, 20, 60, 30, 50, 65, 80, 90, 40, 5,

Red-Black tree A legnehezebb, mint általában a beszúrás. Az új elemet levélként helyezzük el: - ha feketére kenjük, akkor a 4. feltétel sérül, mivel lesz egy fekete-csúcs útvonal, ami hosszabb - ezért pirosra kell kenni o ha a szülője fekete, akkor rendben van o ha a szülője piros, akkor a 3. feltétel sérül, mivel lesz egymás utáni piros csúcs ilyenkor ki kell igazítani a fát, hogy a 3. feltétel fennálljon, anélkül, hogy a 4. feltételt közben megsértenénk. Az alapműveletek: színváltás, faforgatás 10

Red-Black tree Alulról-felfelé beszúrás Pl. a 25 beszúrása sima ügy, mivel a szülője fekete. Több eset lehetséges (tükörképek is) ha a szülő piros: a szülő testvére fekete (a nil legyen fekete) pl. a 3 és 8 beszúrásánál, de pl. a 99-nél nem. Jelölés: az új levél X, szülője: P, nagyszülő G, S (sibling) a szülő testvére (ha van), ekkor csak X és P piros, G nem lehet piros, mert az már a beszúrás előtt sértette volna a 3-at, mint a splaynél X, P, G lehet zig-zig vagy zig-zag lánc (mindkét irányban). A forgatás után az alfa új gyökerét feketére kenjük, és így még ha az eredeti ükszülő piros lett volna, akkor sem lesz egymás után két piros. És G piros lesz. 11

Red-Black tree Zig: 12 B A X P G C S B A X G P C S Színváltás: P, G Az A, B, C-hez vezető utakon így nem változott a fekete csúcsok száma.

Red-Black tree Zig-Zag: 13 A G B1B1 P X C S B2B2 X A P G B1B1 B2B2 C S Színváltás: X, G Az A, B, C-hez vezető utakon így nem változott a fekete csúcsok száma.

Red-Black tree Mi történik, ha a szülő testvére, S piros, pl. 79-nél? 14 B A X P G C S B A X G C P S A C-ig 1 fekete volt, a forgatás után is 1-nek kellene lennie. Ha az ükszülő is piros, akkor felbugyborékoltatjuk a gyökérig, amíg nem lesz két egymás utáni piros vagy ha elértük a gyökeret azt feketére váltjuk.

Felülről-lefelé Red-Black tree A felbugyborékoltatás az útvonal tárolását igényli (stack vagy szülő pointer). A felülről-lefelé már bevált a splay-nél ez alkalmazható az RB-re is, ami garantálja, hogy az S ne legyen piros. Lefelé mentében, ha látunk egy X csúcsot 2 piros gyerekkel akkor az X-et bepírosítjuk, két gyerekét befeketítjük. Ez csak akkor okoz gondot, ha X P szülője piros. 15 C1C1 X C2C2 C2C2 C1C1 X

Felülről-lefelé Red-Black tree Színváltás, utána ha X szülője piros akkor forgatunk. - ha X szülőjének testvére fekete, akkor nincs gond - ha X szülőjének testvére piros, ez az eset nem lehet az eljárás miatt mert, ha Y két gyereke piros, akkor Y unokáinak feketének kell lennie, és Y gyerekét is feketére kell változtatni, így forgatáskor két szinten nem láthatunk pirosat, így ezután amikor X-et nézzük, ha X szülője piros, akkor az X szülőjének testvére nem lehet piros. 16

Felülről-lefelé Red-Black tree Pl. insert 45: lefelé mentében látjuk az 50-t két piros gyerekkel, az 50-et pirosra váltjuk, két gyerekét 40-t és 55-öt feketére, most az 50 és a 60 is piros, egyszerű forgatás 60 és 70 között, így a 30 jobboldali gyökere 60 fekete lesz, a 70 piros lesz, az 50 piros. És így tovább megyünk lefelé, ha elérünk a levélhez a 45-öt piros csúcsként beszúrjuk, mivel a szülője fekete: kész

Felülről-lefelé Red-Black tree Az RB fa nagyon gyakran jól kiegyensúlyozott. Tapasztalatok szerint az RB átlagos mélysége az AVL-ével megegyezik. Előny a viszonylag kis munkaigényű beszúrás és a forgatások viszonylagos ritkasága. A törlést szintén felülről-lefelé hajtjuk végre, hogy egy levelet tudjunk törölni. Kétgyerekes csúcsot úgy törlünk, hogy kicseréljük a jobb alfában lévő legkisebb elemmel, aminek legfeljebb egy gyereke van és töröljük. A csak jobb gyerekes csúcsot ugyanígy töröljük. A csak bal gyerekes csúcsot helyettesítjük a bal alfa legnagyobb elemével és utána töröljük