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
Elemi algoritmusok Páll Boglárka.
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ő:
Adatszerkezetek Az adatokat két fő csoportra oszthatjuk: egyszerű és összetett adatok.  Az egyszerű adatot egy érték jellemez, tovább nem bontható. (szám,
4. Helyes zárójelezés algoritmusa
JavaScript.
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Programozás II. 3. Gyakorlat C++ alapok.
A verem működése fpga-n
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:
3. LOGIKAI ADATSZERKEZETEK
A C++ programozási nyelvSoós Sándor 1/14 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
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ő:
16. Verem műveletei Kaszab Gábor.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
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ő:
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
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,
Előrendezéses edényrendezés – RADIX „vissza”
Utórendezéses edényrendezés – RADIX „előre”
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.
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.
Listák, Vermek és Várakozási Sorok
Listák, Vermek és Várakozási Sorok. Listák Pl: Kirándulók listája Bevásárló lista Alma Kenyér Krumpli Szappan Mosópor Bevásárló lista.
Adatszerkezetek 1. előadás
Egyirányban láncolt lista
Speciális Listák: Sor A sor adatszerkezet olyan speciális lista, amelyet a műveletei definiálnak. 1. ACCESS HEAD 3. POP itt GET-nek nevezzük 5. INJECT.
Rendezések és szövegkezelő függvények
AAO Csink László november.
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.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Fák.
Rekordok Dinamikus tárkezelés és pointerek Dinamikusan láncolt listák
A Helyes Zárójelezés Struktogramja
Egyenesvonalú (lineáris) adatszerkezetek
Objektum orientált programozás
BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör
Gráfok ábrázolása teljesen láncoltan
Nemrekurzív programozás ÜA LISP tartalmaz nemrekurzív eszközöket is, mivel azonban funkcionális nyelv, ezeket is függvényként használhatjuk. ÜSokszor a.
Bináris kereső fák Itterátorok.
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
Bucket sort avagy lineáris idejű rendezés. Pszeudo kód n hosszú L listára for i = 1..n If B[L[i]] != üres Akkor [L[i] Beszúrásos rendezéssel B[L[i]]-be.
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
1 Függvények használata – az első függvénynél a formulát háromszor be kell írni, rendre az x, x+h, x-h argumentumokkal, – a második függvénynél az új (feltételes.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
A verem. A verem (stack) homogén adatelemek olyan sorozata, amelyen két művelet értelmezett: –Új elem elhelyezése a verem tetejére (push) –Elem kivétele.
A verem és a sor adatszerkezet
Dinamikus adatszerkezetek
Script nyelvek előadás
BFák Kiegyensúlyozott keresőfák
Algoritmusok és Adatszerkezetek I.
Dinamikus adatszerkezetek
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.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
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ó

Scan line Adatok: 31, -42, 59, 26, -53, 58, 97, -93, -103, 84, 80

Scan line metakód Function maxsum(X,N) sm=0; bm=0; For i=1 To N If (sm+X[i] > 0) sm=sm+X[i]; Else sm=0; End bm= maximum (bm,sm); End Return bm End

Max. részletösszeg hatékonyság

Listák Logikailag összetartozó elemek véges, rendezett sorozata. L= : a felsorolt elemeket tartalmazó lista : üres lista L[1], L[2], …, L[n] : a lista 1., 2., …, n. eleme L[i].kulcs A listákhoz, mint minden adatstruktúrához speciális műveleteket értelmezhetünk (Abstract Data Type): init(L), olvas(p, L), beszúr(x, p, L), töröl(p, L), keres(x, L) Megvalósítása szekvenciális listával (tömbbel), vagy láncolt listával, pointerek segítségével.

Szekvenciális lista Statikus adatszerkezet: beszúrás, törlés több lépésben. Keresés a1a1 a2a2 anan FUNCTION kereses1(L,N,E) i=1 WHILE ( i E ) i = i + 1 END IF i > N return Ø ELSE return i END

Szekvenciális lista Keresés javított változata FUNCTION kereses2(L,N,E) L[N+1].kulcs = E i = 1 WHILE ( L[i].kulcs <> E ) i=i+1 END IF i > N return Ø ELSE return i END

Szekvenciális lista Beszúrás: a pozícióra ugrás, majd a hátralévő elemek eltolása előre, végül új elem beírása. A beszúrás hatékonysága átlagosan O(N), ha a lista végére szúrjuk az új elemet akkor O(1). FUNCTION beszur(L,N,E,I) FOR j = N DOWNTO I L[j+1] = L[j] END L[I] = E N = N +1 {ellenőrzés!} END

Szekvenciális lista Törlés : pozícióra ugrás, majd a hátralévő elemek előre tolása: FUNCTION torol(L,N,I) FOR j = I TO N-1 L[j] = L[j+1] END N = N – 1 END A törlés hatékonysága átlagosan O(N) Speciális szekvenciális listák: verem, várakozó sor

Verem (stack) LIFO (Last In First Out) Csak a lista utolsó eleme érhető el, műveletek: - elem a verem tetejére: push - elem a verem tetejéről: pop ← push pop →

Verem műveletek FUNCTION pop_st(L) IF (st_p > 0) RETURN L(st_p) st_p = st_p –1 ELSE error ( ) END FUNCTION push_st(L, X) IF (st_p < st_p_max) st_p = st_p + 1 L(st_p) = X ELSE error ( ) END

Rekurzív kifejezések kiértékelése veremmel Fibonacci-számok: F 1 = F 2 = 1 F i = F i F i - 2 i > 2 Binomiális együttható:

Binomiális együttható kiértékelése 1. FUNCTION binomegy( n, m ) init L[st_p_max] st_p = 0 push_st( L, n ) push_st( L, m ) eredmeny = 0 WHILE ( st_p > 0) m = pop_st(L) n = pop_st(L)

Binomiális együttható kiértékelése 2. IF (m = 0 OR m = n) eredmeny = eredmeny + 1 ELSE push_st(L, n-1) push_st(L, m-1) push_st(L, n-1) push_st(L, m) END RETURN eredmeny END

Postfix kifejezés kiértékelése hagyományos: 4,5 + 4,9 / 2,3 – 2 (infix) postfix: 4,9 2,3 / 4,5 + 2 –

Postfix kifejezés kiértékelése FUNCTION Postfix(S){S:a kifejezés stringje} WHILE( nincsvége(S)) t = olvastag(S) IF (operator_e(t)) IF (t = ’+’) X1 = pop_st(L) X2 = pop_st(L) push_st(L, X1 + X2) END [... további műveletek] ELSE push_st(X,t) END RETURN pop_st(L) END

infix -> postfix átalakítás verem inicializálása beolvassuk a kifejezés elemeit (operátor, operandus, zárójelek) ha az elem operandus: kiírjuk ha az elem operátor: ha ez ’(’ akkor be a verembe ha ez ’)’ akkor a verem tartalmát az első kezdőzárójelig kiírjuk (a zárójelet nem!) különben: kiírjuk a verem tartalmát, míg benne nála >= precedenciájú operátort találunk, utána ezt az operátort betesszük a verembe - ha nincs több elem kiíratjuk a verem tartalmát

infix -> postfix átalakítás példa * (2 + 1) (* | * + | * * + 1 +

Várakozósor (queue) FIFO (First In First Out) Az új elem és az olvasható elem pozíciója különbözik egymástól. Műveletek: elem behelyezése a sor végére: push O(1) elem levétele a sor tetejéről (elejéről): pop O(N)

Várakozósor (queue) A sor eleje mindig csökken, a vége pedig növekszik. Az átmozgatás elkerülésére ciklikus tömbstruktúrát alkalmazunk. Az elemek a helyükön maradnak csak a lista eleje, vége vándorol körbe-körbe. szabad végeeleje push →pop →

Várakozósor (queue) műveletek FUNCTION pop_qu(L) IF (qu_s > 0) r = L[qu_s] IF (qu_s = qu_e) qu_s = 0 ELSE qu_s = qu_s + 1 IF (qu_s > LMAX) qu_s = 1 END RETURN r ELSE error() END FUNCTION push_qu(L, x) r = qu_e qu_e = qu_e + 1 IF (qu_e < LMAX) qu_e = 1 END IF (qu_e = qu_s) qu_e = r error ( ) ELSE L[qu_e] = x IF (qu_s = 0) qu_s = qu_e END

Láncolt lista L[1] L[2] L[3] L[4] L[5]

Keresés láncolt listában FUNCTION kereses_ll (KP, VP, E) n = alloc(){hiba ellenőrzés!} VP → mutato = n n → kulcs = E p = KP WHILE (p → kulcs <> E) p = p → mutato END IF (p = n) return Null ELSE return p END Hatékonysága: O(N)

Beszúrás láncolt listába FUNCTION beszuras_ll(KP, E, I) p = KP FOR j = 1 TO I – 1 p = p → mutato END n = alloc(){hiba ellenőrzés!} n → kulcs = E n → mutato = p → mutato p → mutato = n END Hatékonysága: O(N) Kétszeresen láncolt listánál O(1), ha megadjuk az új elem pozicióját.

Keresés rendezett szekvenciális listában FUNCTION binkereso(L, N, x) IF (L[1].kulcs > x OR L[N].kulcs < x) RETURN nincs_benne END i = 1; j = N WHILE ( i < j ) k = (i + j) / 2 IF (L[k].kulcs = x) RETURN k END IF (L[k].kulcs < x) i = k ELSE j = k END RETURN nincs_benne END

A bináris keresés hatékonysága Az intervallum felezések száma míg az 1 hosszú intervallumot elérjük, avagy hányszor kell az 1-et duplázni, hogy N-et kapjunk? 2 x = N → x = log 2 (N) → O(log(N))

Fibonacci keresés A Fibonacci számok arányában osztja szét az intervallumot, így lesz egy kedvezőbb és egy kedvezőtlenebb eset : bc (best case) = n / 2, wc (worst case) = n

Interpolációs keresés Ha az érték a pozíciótól közel lineárisan függ, akkor igen gyors: O(1). Szélsőséges helyzet: 1, 1, 1, ………….., 1, 2, Például a fenti 1000 elem esetén, x = 2 –t keresve: !!! worst case: O(N), átlagosan O(log(log(N))), vagy igazítsuk az interpoláció típusát az eloszlás jellegéhez.