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
Sor láncolt ábrázolással
Advertisements

Nevezetes algoritmusok
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
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ő:
Gyakorló feladatsor eljárásokra Készítette: Rummel Szabolcs Elérhetősé:
Illés Tibor – Hálózati folyamok
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Minimális költségű feszítőfák
Az összehasonlító rendezések
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Programozás II. 3. Gyakorlat C++ alapok.
Ág és korlát algoritmus
3. LOGIKAI ADATSZERKEZETEK
Nat Pedellus Informatika 8. osztály óra.
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ő:
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,...,
Számoljuk meg rekurzív függvénnyel egy bináris fa leveleit!
Prím algoritmus.
Dinamikus fák és utak Készítette: Kovács Péter
Egyszerű típusok csoportosítása
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ő:
Fixpontos, lebegőpontos
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,
Gráfelmélet: Fák.
Listák, Vermek és Várakozási Sorok. Vermek Def: Egy sajátos lista amelyben minden beszúrási illetve törlési művelet csak a lista egyik végén történik.
Adatszerkezetek 1. előadás
Összetett adattípusok
Fák.
Rekordok Dinamikus tárkezelés és pointerek Dinamikusan láncolt listák
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Készítette: Hanics Anikó. Az algoritmus elve: Kezdetben legyen n db kék fa, azaz a gráf minden csúcsa egy-egy (egy pontból álló) kék fa, és legyen minden.
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.
Objektum orientált programozás
Algoritmizálás, adatmodellezés tanítása 8. előadás.
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
Nat Pedellus Free Pascal Elágazások..
Horváth Bettina VZSRA6.  Célja: Az eljárás célja egy véges gráf összes csúcsának bejárása a kezdőcsúcstól való távolságuk szerinti növekvő sorrendben.
Algoritmizálás, adatmodellezés
Bináris kereső fák Itterátorok.
Horváth Bettina VZSRA6 Feladat: Szemléltesse az edényrendezést.
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
KÉSZÍTETTE: KOVÁCSICS KRISZTIÁN
BFák Kiegyensúlyozott keresőfák
Mediánok és rendezett mintá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.
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
Gráfok - 1 Definíció: Irányított gráf (digráf) G=(V,E) rendezett pár.
Gráfalgoritmusok G=(V,E) gráf ábrázolása
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Algoritmusok és Adatszerkezetek I.
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ó

Binomiális várakozósor A binomiális várakozósor nem egy heap-ordered fa, hanem egy heap-ordered fák gyűjteménye, azaz erdő. 2 B 0 B 1 B 2 B 3 B 4 Minden magassághoz egy binomiális fa tartozik. A B k úgy keletkezik, hogy egy B k-1 binomiális fát egy másik B k-1 binomiális fa gyökeréhez illesztünk. A B k áll egy gyökérből és a hozzá illesztett B 0, B 1,..., B k-1 gyerekekből.

Binomiális várakozósor A k magasságúnak pontosan 2 k csúcsa van, és a d mélységben csúcspont található. B k magassága k, gyökerének k gyereke van. Ha előírjuk a heap sorrendet a binomiális fára és bármely magasságra egyetlen binomiális fát engedünk meg, akkor bármely méretű várakozó sort egyértelműen tudunk ábrázolni egy binomiális fa gyűjteménnyel. Pl. egy 13 méretű priority queue ábrázolható a B 3, B 2, B 0 erdővel. Amit írhatunk 1101, ami nemcsak a 13 bináris reprezentációja, de kifejezi azt a tényt is, hogy a B 3, B 2, B 0 jelen van, a B 1 pedig nincs. 3

Binomiális várakozósor Pl. egy 6 elemű priority queue:

Binomiális várakozósor műveletek A minimum elemet az összes fa gyökerének megvizsgálásával kereshetjük meg. Mivel legfeljebb log N különböző fa van, a minimumot O(log N) idővel találhatjuk meg. De meg is jegyezhetjük a minimumot, ha más műveletek során aktualizáljuk. 5

Binomiális várakozósor műveletek Két binomiális fa összefésülése (merge) Mivel két binomiális fa összefésülése konstans időt igényel, és O(log N) binomiális fa van, a legrosszabb esetben is O(log N) idejű. A műveletet hatékonyabbá tehetjük, ha a fákat magasságuk szerint sorrendbe tesszük.

Binomiális várakozósor műveletek Az insert az összefésülés speciális esete. Létrehozunk egy egy csúcspontú fát és összefésülünk. wc: O(log N) Pl. 1, 2, 3,...,

Binomiális várakozósor műveletek DeleteMin: megkeressük a minimum gyökerű fát: B k, az eredeti: H. Kivesszük a H erdőből B k fát  H’. Eltávolítjuk a B k gyökerét:  B 0, B 1,..., B k-1 : H’’. Merge: H’ és H’’. Pl.: H3 :H3 :

Binomiális várakozósor műveletek A 12 minimális elem eltávolítása: H’ :H’’ : Merge: H’,H’’ : Megkeresés, kettévágás O(log N), merge O(log N) :  O(log N)

A binomiális várakozósor implementációja A DeleteMin-hez a gyökér összes alfájának gyors megkeresése kell. Minden csúcs gyerekeit láncolt listában tároljuk és minden csúcsnak lesz pointere az első gyerekére (ha van). A gyerekeket az alfáik magassága szerint sorrendbe rakjuk. Két fa könnyű összefésülését is biztosítani kell. Csak akkor fésülhető össze két binomiális fa, ha azonos a méretük. A fa méretét a gyökérben tárolni kell. Az összefésülésnél az egyik a másik gyereke lesz. Mivel ez az új fa az utolsó gyerek lesz (hiszen ez a legnagyobb alfa), ezért minden csúcs utolsó gyerekét is tárolnunk kell. 10

A binomiális várakozósor implementációja Az egyik megoldás a körkörös (circular) duplán láncolt lista. Ebben a listában az első gyerek bal testvére az utolsó testvér. Az utolsó gyerek jobb testvére lehetne az első gyerek, de könnyebb azt nil-nek definiálni. Így könnyebb kitalálni, hogy ez a gyerek az utolsó-e. Tehát egy binomiális fa minden csúcsa tartalmazza az adatot, az első gyereket, a bal és a jobb testvért és a gyerekek számát (amit Rank -nak hívunk). Mivel a binomiális queue fák listája, az adatszerkezetre hivatkozhatunk a legkisebb fára mutató pointerrel. 11

A binomiális várakozósor implementációja Pl.: H

A binomiális várakozósor implementációja Típus deklaráció: Type TreePtr = ^TreeNode; TreeNode = Record Elem : Elemtipus; Baltestver : TreePtr; Jobbtestver : TreePtr; Elsogyerek : TreePtr; Rank: integer; end; PQ := TreePtr; 13

A binomiális várakozósor implementációja Két azonos méretű binomiális fa összefésülése:

A binomiális várakozósor implementációja Function MergeTree(T1, T2 : PQ) : PQ; Begin If T1^.elem > T2^.elem Then Swap(T1, T2); If T1^.Rank= 0 Then T1^.elsogyerek := T2 Else Begin T2^.baltestver := T1^.elsogyerek^.baltestver; T2^.baltestver^.jobbtestver : = T2; T1^.elsogyerek^.baltestver : = T2; End; T1^.Rank : = T1^.Rank + 1; MergeTree := T1; End; 15

A binomiális várakozósor implementációja Két binomiális queue összefésülése (merge) rekurzívan: Az Extract(T,H) eltávolítja a H első fáját és azt a T-be teszi. Feltesszük, hogy a legkisebb binomiális fa a H 1 –ben és nem a H 2 –ben van. Eltávolítjuk a H 1 első fáját és ehhez hozzáadjuk a maradék H 1 és H 2 összefésülésének az eredményét. 16

A binomiális várakozósor implementációja Function Merge(H1, H2 :PQ) : PQ; Var H3, T1, T2, T3 : PQ; Begin If H1 = nil Then Merge = H2 Else If H2 = nil Then Merge = H1 Else If H1^.Rank < H2^.Rank Then Begin Extract(T1, H1); H3 = Merge(H1, H2); T1^.baltestver = H3^.baltestver; H3^.baltestver^.jobbtestver = nil; T1^.jobbtestver = H3; H3^.baltestver = T1; Merge = T1; End 17

A binomiális várakozósor implementációja Else If H2^.Rank < H1^.Rank Then Merge = Merge(H2, H1) Else Begin Extract(T1, H1); Extract(T2, H2); H3 = Merge(H1, H2); T3 = MergeTree(T1, T2); Merge = Merge(H3, T3); End End; DecreaseKey: felbugyborékoltatás, szülő pointer Delete: DecreaseKey + DeleteMin 18