Algoritmusok és adatszerkezetek II.

Hasonló dokumentumok
Algoritmusok és adatszerkezetek II.

Algoritmusok és Adatszerkezetek II. előadás

Algoritmusok és Adatszerkezetek II.

Példa 30 14, 22 55,

Rendezettminta-fa [2] [2]

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Tuesday, March 6, 12. Hasító táblázatok

Adatszerkezet - műveletek

7 7, ,22 13,22 13, ,28

Elemi adatszerkezetek

Önszervező bináris keresőfák

Algoritmusok és adatszerkezetek II.

Algoritmusok és adatszerkezetek gyakorlat 07

Algoritmusok és adatszerkezetek II.

Adatszerkezetek 7a. Dr. IványiPéter

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Elemi algoritmusok ismerete

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Algoritmusok és adatszerkezetek II.

ÖNSZERVEZŐ BINÁRIS KERESŐFÁK HATÉKONYSÁGA

10. előadás Speciális többágú fák

6. előadás. Kiegyensúlyozottság, AVL-fa, piros-fekete fa. Adatszerkezetek és algoritmusok előadás március 6.

Fák Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

Hierarchikus adatszerkezetek

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Adatszerkezetek és algoritmusok

Adatszerkezetek 1. előadás

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Számláló rendezés. Példa

Kupac adatszerkezet. 1. ábra.

Egyesíthető prioritási sor

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Feladatok kijelentéseinek megértése

Haladó rendezések. PPT 2007/2008 tavasz.

Amortizációs költségelemzés

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

file:///d:/apa/okt/ad/jegyzet/ad1/b+fa.html

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

Approximációs algoritmusok

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Programozási technológia

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Generikus osztályok, gyűjtemények és algoritmusok

Egyesíthető prioritási sor

A kurzus teljesítésének feltételei. Az I404 kódú kurzus teljesítéséhez meg kell oldani egy otthoni feladatot, határidő április 30.

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

Adatszerkezetek és algoritmusok

Collections. Összetett adatstruktúrák

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

.Net adatstruktúrák. Készítette: Major Péter

Körkörös listák. fej. utolsó. utolsó. fej

Programozási nyelvek Java

Rekurzió. Horváth Gyula.

Rendezések. Összehasonlító rendezések

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül.

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

Információs Technológia

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

Bináris keresőfa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor

Keresőfák és nevezetes algoritmusaikat szemléltető program

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozás II. előadás

10. Gráf absztrakt adattípus, gráfok ábrázolása

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

C# feladatok gyűjteménye

Generikus Típusok, Kollekciók

Bináris keresőfák. Adat : M Elemtip és Elemtip-on értelmezett egy lineáris rendezési reláció,

Geometriai algoritmusok

INFORMATIKAI ALAPISMERETEK

Programozás alapjai II. (7. ea) C++

Fa (Tree): csomópontok (nodes) halmaza, amelyeket élek (edges) kötnek össze, és teljesülnek az alábbi feltételek:

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Java és web programozás

Programozás alapjai. 10. előadás

Információs Technológia

Objektumorientált Programozás VI.

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

III. Adatszerkezetek és algoritmusok

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

OOP: Java 8.Gy: Abstract osztályok, interfészek

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

ISA szimulátor objektum-orientált modell (C++)

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Átírás:

Algoritmusok és adatszerkezetek II. előadás I404e-1 H[10-11:30] BE-002-3 minden héten Szegedi Tudományegyetem - Természettudományi és Informatikai Kar - Informatikai Tanszékcsoport - Számítógépes Algoritmusok és Mesterséges Intelligencia Tanszék - Németh Tamás

Szegedi Tudományegyetem - Természettudományi és Informatikai Kar - Informatikai Tanszékcsoport Felelős tanszék: Számítógépes algoritmusok és mesterséges intelligencia tanszék Nappali tagozaton:! Gyakorlat: heti 1 óra / 1 kredit. Teljesítés módja: Gyakorlati jegy Előadás: heti 2 óra / 3 kredit. Teljesítés módja: Kollokvium

Tematika bevezetés, absztrakt adatszerkezetek és műveleteik, statikus és dinamikus memóriakezelés, verem és sor megvalósítása, bináris keresőfák (definíciók, keresés, beszúrás, törlés, tárolási módok), rendezett-minta fa, intervallumvák bináris keresőfa magassága, véletlen építésű bináris keresőfa, optimális binnáris keresőfa építése önkiegyensúlyozó keresőfák: AVL fák (pont egyensúlyfaktora, forgatások, beszúrás utáni javítás, törlés utáni javítás, rendezettminta-fa tulajdonság fentartása) általános keresőfák, keresés általános keresőfában. B-fák (beszúrás, törlés) 2-3 fák, piros-fekete fák (definíció, beszúrás utáni javítás, törlés utáni javítás) amortizációs költségelemzés, önszervező bináris keresőfák (vágás, beszúrás, törlés, egyesítés) binomiális és Fibonacci kupacok (vág, egyesít, beszúr, töröl műveletek) halmazerdő, hasítótáblázatok, ugrólisták geometriai algoritmusok (alapfogalmak, forgásirány, metszés eldöntése, pont helyzetének meghatározása, pontok összekötése zárt nem metsző poligonná, konvex burok meghatározása, legtávolabbi pontpár meghatározása) geometriai algoritmusok (legközelebbi pontpár meghatározása, szakaszhalmazban metsző szakaszpár keresése, Delanuey háromszöglefedés, Voronoi diagramm, raszteres képek problémái, négyesfa modell), Mintaillesztés (mintaillesztés automatával, Knuth Morris Pratt algoritmus, Rabin- Karp algoritmus) számelméleti algoritmusok, nyilvános kulcsú titkosítás, RSA algoritmus, véletlenített algoritmusok megoldás szisztematikus keresése visszalépéssel, megoldás szisztematikus keresése elágazáskorlátozással;korlátozás-szétválasztás elve online algoritmusok, adatszerkezetek tervezése és használata

Ajánlott irodalom: [1] T. H. Cormen, C. E. Leiserson, R.L. Rivest: Algoritmusok, Műszaki Könyvkiadó, 2003. [2] T. H. Cormen, C. E. Leiserson, R.L. Rivest, C. Stein: Új algoritmusok, Scolar Kiadó, 2003. [3] T. Ottman, P. Widmayer: Algoritmen und Datenstrukturen, Wissenschaftsverlag, 1990 [4] E. Knuth: A számitógépprogramozás művészete, 3. Kötet, Műszaki Könyvkiadó, 1990. [5] A. V. Aho, J. E. Hopcroft, J. D. Ullman: Számítógép-algoritmusok tervezése és analízise,műszaki Könyvkiadó, 1982. [6] G. Gonnet, R. Baeza-Yates: Handbook of algorithms and data structures. In Pascal and C., Addison-Wesley. 1991. [7] R. Sedgewick: Algoritms in C++, Addison-Wesley. 1991. [8] E. Horowitz, S. Shani: Fundamentals of Computer Algorithms, Computer Science Press, 1998. [9] Adonyi Róbert: Adatstruktúrák és algoritmusok (letölthető jegyzet) [10] J. Hromkovic: Algoritmic Adventures From Knowledge to Magic, Springer

A kurzus teljesítésének feltételei: Előfeltétel: gyakorlati jegy Kollokvium: írásbeli vagy szóbeli, elérhető maximális pontszám: 100. Az írásbeli kollokvium 3 részből áll: A. 4 kérdés a kurzus anyagát lefedő témakörökből. Elérhető maximális pontszám: 40 Teljesítendő minimális pontszám: 15 B. Teljesen kidolgozandó tétel. Elérhető maximális pontszám: 30 Teljesítendő minimális pontszám: 10 C. Gyakorlati feladatok megoldása. Elérhető maximális pontszám: 30 Teljesítendő minimális pontszám: 15 A+B+C Elérhető maximális pontszám: 100 Teljesítendő minimális pontszám: 50 A szóbeli kollokvium egy részből áll: A szóbeli kollokviumon a hallgatóknak kérdésekre kell válaszolnia a tananyaggal kapcsolatban, várhatóan 15-30 percig, felkészülési idő nincs, viszont bármilyen papír alapú segédanyag használható. A szóbeli felelet értékelése a teljesítés %- ában mérve történik, az elért % a kollokvium pontszáma.

Érdemjegy: 50-től elégséges (2) 60-tól közepes (3) 72-től jó (4) 85-től jeles (5)

Optimalizálás a szoftverfejlesztésben futási idő" tárigény" továbbított adatmennyiség" SQL lekérdezések erőforrásigénye" egyéb felhasznált erőforrások (energia )

Statikus adatszerkezetek Feltétel: tudjuk előre az elemszámot! Tömb Rekord Rekord elemű tömb...

Dinamikus Adatszerkezetek Pointerek, dinamikus memóriafoglalás, objektumok Absztrakt adatszerkezetek Verem, Sor Halmaz, Függvény, Rendezett minta Prioritási sor, Egyesíthető prioritási sor Egyedi adatszerkezetek (pl. halmazerdő)

Alapműveletek adatot felvesz az adatszerkezetbe! adatot kulcs alapján keres! adatot kivesz/töröl az adatszerkezetből! 2 adatszerkezetet egyesít (unió, metszet)! adatszerkezetet adott kulcs mentén kettévág

Statikus és dinamikus adatszerkezetek a program futtatása előtt le kell foglalni a szükséges memóriát tipikus megvalósítás: tömb a program futása közben folyamatosan tudunk memóriát foglalni és felszabadítani tipikus megvalósítás: pointerek alkalmazásával

Verem, sor megvalósítása Alapműveletek: pop, push verem push sor push eleje verem pop semmi (null) sor pop

Verem (Stack) példa eleje null 7 12 5 null push(5) push(12) push(7) pop() pop() pop()

public static void main (String args[]) { verem v=new verem() ; v.betesz(5) ; v.betesz(8) ; v.betesz(12) ; System.out.println(v.kivesz()); System.out.println(v.kivesz()); System.out.println(v.kivesz()); public class verem { int elemszam ; struct elem { int ertek; elem kovetkezo ; elem semmi, eleje ; verem() { elem q=new elem() ; semmi=q ; eleje=q ; elemszam=0 ; void betesz(int x) { elem q=new elem() ; q.kovetkezo=eleje ; q.ertek=x ; eleje=q ; elemszam++ ; int kivesz() { if (eleje!=semmi) { int visszateresi_ertek ; visszateresi_ertek=eleje.ertek ; eleje=eleje.kovetkezo ; elemszam-- ; return visszateresi_ertek; else return 0 ;

Sor (Queue) példa 5 null 12 7 push(5) push(12) push(7) pop() pop() pop()

public static void main (String args[]) { sor s=new sor() ; s.betesz(5) ; s.betesz(8) ; s.betesz(12) ; System.out.println(s.kivesz()); System.out.println(s.kivesz()); System.out.println(s.kivesz()); public class sor { int elemszam ; class elem { int ertek; elem kovetkezo ; elem semmi, eleje ; sor() { elem q=new elem() ; semmi=q ; eleje=q ; elemszam=0 ; void betesz(int x) { elem q=new elem() ; semmi.kovetkezo=q ; semmi.ertek=x ; semmi=q ; elemszam++ ; int kivesz() { if (eleje!=semmi) { int visszateresi_ertek ; visszateresi_ertek=eleje.ertek ; eleje=eleje.kovetkezo ; elemszam-- ; return visszateresi_ertek; else return 0 ;

Halmaz, Asszociatív tömb C++ Map Java Treemap, Hashmap PHP Array

Bináris keresőfa x p q fázunk... [2] 232-241

Bináris keresőfa 21 9 29 4 17 24 37 1 6 13 20 22 27 31 43

Bináris keresőfa 21 9 29 4 17 24 37 1 6 13 20 22 27 31 43 (-,1) (1,4) (4,6) (6,9) (9,13) (13,17) (17,20) (20,21) (21,22) (22,24) (24,27) (27,29) (29,31) (31,37) (37,43) (43, )

Fapont tárolása első megközelítés, a gyakorlatban nem így tároljuk! struct fapont{!!!int key, value ;!!!fapont bal, jobb, apa ;! apa key balfiu value jobbfiu

Bináris fa tárolása első megközelítés, a gyakorlatban nem így van! public class fa {!! int elemszam ;!! struct fapont{!!! int key, value ;!!! fapont bal, jobb, apa ;!!!! fapont nil, gyoker ;!! void fa() {!!! fapont q = new fapont() ;!!! nil=q ;!!! gyoker=q ;!!! elemszam=0 ;!!!! boolean beszur(int x, int v) {!...!!...! nil nil gyoker k v beszur(5, 8) 5 8 k v gyoker

Keresés keresőfában 21 27 9 29 4 17 24 37 1 6 13 20 22 27 31 43 (-,1) (1,4) (4,6) (6,9) (9,13) (13,17) (17,20) (20,21) (21,22) (22,24) (24,27) (27,29) (29,31) (31,37) (37,43) (43, )

Keresés keresőfában 21 26 9 29 4 17 24 37 1 6 13 20 22 27 31 43 (-,1) (1,4) (4,6) (6,9) (9,13) (13,17) (17,20) (20,21) (21,22) (22,24) (24,27) (27,29) (29,31) (31,37) (37,43) (43, )

fapont keres(int x) {!!! fapont p=gyoker ;!!! nil.key=x ;!!! while (p.key!=x) p=x<p.key?p.bal:p.jobb ;!!! return p;! gyökér 21 [3] 254 q=keres(26) ; 9 29 4 17 24 37 1 6 13 20 22 27 31 43 nil 26

nil 5 A

nil 5 A

5 A 3 A nil

boolean beszur(int x, int v) {!!! fapont p,papa ;!!! p=gyoker ;!!! papa=nil ;!!! while (p!=nil && p.key!=x) {!!!! papa=p ;!!!! if (x<p.key) p=p.bal;!!!! else p=p.jobb;!!!!!! if (p==nil) {!!!! fapont ujpont = new fapont();!!!! if (gyoker==p) gyoker=ujpont ;! nil!!! ujpont.key=x ;!!!! ujpont.value=v ;!!!! ujpont.bal=nil;!!!! ujpont.jobb=nil;!!!! ujpont.apa=papa;!!!! if (papa!=nil) {!!!!! if (x>papa.key) papa.jobb=ujpont;!!!!! else papa.bal=ujpont;!!!!!!!!! elemszam++ ;!!!! return true ;!!! else {!!!! p.value=v ;! beszur(3,9) ;!!! return false ;!!!!!!! nil 3 9 5 8????? 5 8????? gyoker

Bináris fák tárolása csúcsonkét 2 pointer és egy bit, mely azt jelöli, hogy bal, vagy jobb gyerek 1. pointer bal gyerek, ha létezik jobb gyerek, ha csak az létezik. nil: ha egyáltalán nincs gyereke. 2. pointer ha ő maga bal gyerek, akkor a testvérre mutat, ha az létezik, különben a szülőre. ha jobb gyerek: a szülőre mutat. gyökérben nil

Fapont tárolása struct fapont<k,v>{!!!<k> key ;!!!<V> value ;!!!fapont fiu, tespa ;!!!boolean bal ;!

Műveletek és futási idő igények: bool beszúr(<k> key, <V> value) fapont keres(<k> x) bool töröl(fapont p) fapont rákövetkező(fapont p) mindetkiir(fapont p) mindenttöröl(fapont p) int elemszám(fapont p) int elemszám() O(h) O(h) O(h) O(h) O(n) O(n) O(h) O(1)

Bináris keresőfák jellemzői p gyökerű részfa belső pontjainak száma int s(fapont p) {!! if (p==nil) return 0 ;!! return 1+s(p.bal)+s(p.jobb) ;! p gyökerű részfa magassága int h(fapont p) {!! if (p==nil) return 0 ;!! return 1+Math.max(h(p.bal),h(p.jobb)) ;! O(n) O(n)

Bináris fa inorder bejárása function bejar(p){!!!if (p.bal!=nil) bejar(p.bal) ;!!!muvelet(p) ;!!!if (p.jobb!=nil) bejar(p.jobb) ;! O(n)

5 function bejar(p){!!! if (p.bal!=nil) bejar(p.bal) ;!!! muvelet(p) ;!!! if (p.jobb!=nil) bejar(p.jobb) ;! 3 7 function bejar(p){!!! if (p.bal!=nil) bejar(p.bal) ;!!! muvelet(p) ;!!! if (p.jobb!=nil) bejar(p.jobb) ;! 5 3 7 1 4 6 146 function bejar(p){!!! if (p.bal!=nil) bejar(p.bal) ;!!! muvelet(p) ;!!! if (p.jobb!=nil) bejar(p.jobb) ;! 1 3 4 5 6 7

Preorder - Inorder - Postorder bejárás function bejar(p){ //preorder!!! muvelet(p) ;!!! if (p.bal!=nil) bejar(p.bal) ;!!! if (p.jobb!=nil) bejar(p.jobb) ;! function bejar(p){ //inorder!!! if (p.bal!=nil) bejar(p.bal) ;!!! muvelet(p) ;!!! if (p.jobb!=nil) bejar(p.jobb) ;! function bejar(p){ //postorder!!! if (p.bal!=nil) bejar(p.bal) ;!!! if (p.jobb!=nil) bejar(p.jobb) ;!!! muvelet(p) ;! O(n)

Bejárás - csökkenő sorrendben function bejar(p){ //inorder rev. if (p.jobb!=nil) bejar(p.jobb) ; muvelet(p) ; if (p.bal!=nil) bejar(p.bal) ;