16. Absztrakt adattípusok megvalósításai
|
|
- Eszter Törökné
- 10 évvel ezelőtt
- Látták:
Átírás
1 16. Absztrakt adattípusok megvalósításai Az adatkezelés szintjei: 1. Probléma szintje. 2. Modell szintje. 3. Absztrakt adattípus szintje. 4. Absztrakt adatszerkezet szintje. 5. Adatszerkezet szintje. 6. Gépi szint. Absztrakt adattípus: A = (E, M) 1. E: értékhalmaz, 2. M: műveletek halmaza. "Absztrakt" jelző jelentése: i. Nem ismert az adatokat tároló adatszerkezet. ii. Nem ismertek a műveleteket megvalósító algoritmusok, a műveletek specifikációjukkal definiáltak. Alapvető absztrakt adattípusok Verem Értékhalmaz: Verem = { a 1,...,a n : a i E} Műveletek: V : Verem, x : E {Igaz} Letesit(V ) {V = } {V = V } Megszuntet(V ) {Hamis} {V = V } Uresit(V ) {V = } {V = a 1,...,a n } VeremBe(V,x) {V = a 1,...,a n,x } {V = a 1,...,a n n > 0} VeremBol(V,x) {V = a 1,...,a n 1 x = a n } {V = V } Urese(V ) {Urese = Pre(V ) = } {V = a 1,...,a n } Tete je(v,x) {x = a n V = Pre(V )} {V = a 1,...,a n n > 0} Torol(V ) {V = a 1,...,a n 1 } 1. Tömbös megvalósítás. Hátránya: előre rögzített méretű memóriát kell foglalni. Tar 1 n a1 an teto=n Meret 1. ábra. Verem tömbös megvalósítása. 2. Megvalósítás lánccal. 1
2 a1 an Fej 2. ábra. Verem megvalósítása lánccal. Dinamikus memória allokálás. m byte allokálása ténylegesen (m + 4)/16 16 byte-ot foglal a halomból! Tehát a tényleges tárigény, ha az adatelemek mérete m byte: 3. Kombinált megvalósítás. K adatelemet tartalmazó tömbszeletek láncolása. Memória igény: (m )/ K 1 K 1 ind K... Fej 3. ábra. Verem kombinált megvalósítása. ( n/k Sizeo f (Elemtip) )/16 16 A müveletek (a MEGSZUNTET és URESIT kivételével) futási ideje n-elemű veremre: T lr (n) = Θ(1) Unit VeremP; Interface Type Elemtip =??? ;(* a generikus paraméter *) Tipus = Pointer ;(* a Verem adattipus fő típusa *) Verem = VeremP.Tipus; { a Verem adattipus muveletei: } Procedure Letesit(Var V : Tipus); Procedure Megszuntet(Var V : Tipus); Procedure Uresit(Var V : Tipus); Procedure VeremBe(Var V : Tipus; X : Elemtip); Procedure VeremBol(Var V : Tipus; Var X : Elemtip); Function ElemSzam(V : Tipus) : Word; Procedure Teteje( V : Tipus; Var X : Elemtip); Procedure Torol(Var V : Tipus); Implementation { reprezentáció pointerlánc használatával } Type Lanc = ^Cella; Cella = Record 2
3 adat : Elemtip; csat : Lanc RepTip = Record Fej: Lanc; ESzam: Word { A műveletek megvalósítása } Procedure Letesit(Var V : Tipus); Var Vr : ^RepTip Absolute V; New(Vr); Vr^.Fej := Nil; Vr^.Eszam:=0; End (* Letesit *) ; Procedure Uresit(Var V : Tipus); Var Vr : ^RepTip Absolute V; P, Q : Lanc; P := Vr^.Fej; While P <> Nil Do Q := p^.csat; Dispose(P); P := Q Vr^.Fej := Nil; Vr^.ESzam:= 0; End (* Uresit *) ; Procedure Megszuntet(Var V : Tipus); Var Vr : ^RepTip Absolute V; Uresit(V); Dispose(Vr); End (* Megszuntet *) ; Procedure VeremBe(Var V : Tipus; X : Elemtip); Var Vr : ^RepTip Absolute V; Uj : Lanc; New(Uj); Uj^.adat := X; Uj^.csat := Vr^.Fej; Vr^.Fej := Uj; Inc(Vr^.ESzam); End (* VeremBe *) ; Procedure VeremBol(Var V : Tipus; Var X : Elemtip); Var Vr : ^RepTip Absolute V; P : Lanc; P := Vr^.Fej; If P <> Nil Then X := P^.adat; Vr^.Fej := P^.csat; Dec(Vr^.ESzam); Dispose(P) End End (* VeremBol *) ; 3
4 Function ElemSzam(V : Tipus) : Word; Var Vr : ^RepTip Absolute V; ElemSzam := Vr^.ESzam End (* Elemszam *) ; Procedure Teteje(V : Tipus; Var X : Elemtip); Var Vr : ^RepTip Absolute V; If Vr^.Fej <> Nil Then X := Vr^.Fej^.adat End (* Teteje *) ; Procedure Torol(Var V : Tipus); Var Vr : ^RepTip Absolute V; P : Lanc; P:= Vr^.Fej; If P <> Nil Then Vr^.Fej := P^.csat; Dispose(P); Dec(Vr^.ESzam); End End (* Torol *) ; End (* VeremP *) Sor Értékhalmaz: Sor = { a 1,...,a n : a i E} Műveletek: S : Sor, x : E {Igaz} Letesit(S) {S = } {S = S} Megszuntet(S) {Hamis} {S = S} Uresit(S) {S = } {S = a 1,...,a n } SorBa(S,x) {S = a 1,...,a n,x } {S = a 1,...,a n n > 0} SorBol(S,x) {x = a 1 S = a 2,...,a n } {S = a 1,...,a n } Elemszam(S) {Elemszam = n} {S = a 1,...,a n n > 0} Elso(S,x) {x = a 1 S = Pre(S)} {S = a 1,...,a n n > 0} Torol(S) {S = a 2,...,a n } 1. Megvalósítás cirkuláris tömbbel. Unit SorT ; Interface Type Elemtip =??? ;(* generikus paraméter *) Tipus = Pointer ;(* a Sor adattipus típusa *) Sor = SorT.Tipus; { A Sor adattipus muveletei : } Procedure Letesit(Var S : Tipus); Procedure Uresit(Var S : Tipus); 4
5 1 Tar a1 an Meret eleje vege Tar 1 Meret eleje vege Tar 1 Meret vege eleje 4. ábra. Sor megvalósítása cirkuláris többel. Function Elemszam(S : Tipus) :Word; Procedure SorBa(Var S : Tipus; X : Elemtip); Procedure SorBol(Var S : Tipus; Var X : Elemtip); Procedure Elso( S : Tipus; Var X : Elemtip); Procedure Torol(Var S : Tipus); Implementation (* Reprezentáció cirkuláris tömbbel *) Const Meret =??? ;(* a cirkuláris tömb mérete, impl. paraméter *) Type RepTip = Record tar : Array[1..Meret] Of Elemtip; eleje, vege : 0..Meret (* A műveletek megvalósítása *) Procedure Letesit(Var S : Tipus); Var Sr : ^RepTip Absolute S; New(Sr); Sr^.eleje := 0; Sr^.vege:=0; End (* Letesit *); Procedure SorBa(Var S : Tipus; X : Elemtip); Var Sr : ^RepTip Absolute S; With Sr^ Do If vege <> eleje Then vege := (vege Mod Meret)+1; tar[vege] := X End (* SorBa *) ; Procedure SorBol(Var S : Tipus; Var X : Elemtip); Var Sr : ^RepTip Absolute S; 5
6 With Sr^ Do If vege <> 0 Then eleje := eleje Mod Meret+1; X:= tar[eleje]; If eleje = vege Then eleje := 0; vege := 0 End End End (* SorBol *) ; Function ElemSzam(S : Tipus) :Word; Var Sr : ^RepTip Absolute S; E: Integer; With Sr^ Do E := vege - eleje; If vege = 0 Then ElemSzam:=0 Else If E > 0 Then ElemSzam:= E Else ElemSzam:= E + Meret End (* ElemSzam *) ; Procedure Uresit(Var S : Tipus); Var Sr : ^RepTip Absolute S; Sr^.eleje := 0; Sr^.vege := 0 End (* Uresit *) ; Procedure Elso( S : Tipus; Var X : Elemtip); Var Sr : ^RepTip Absolute S; X := Sr^.tar[Sr^.eleje Mod Meret+1] End (* Elso *) ; Procedure Torol(Var S : Tipus); Var Sr : ^RepTip Absolute S; With Sr^ Do If vege <> 0 Then eleje := eleje Mod Meret+1; If eleje = vege Then eleje := 0; vege := 0 End End End (* Torol *) ; End (* Sor *). 2. Sor megvalósítás lánccal. 3. Sor kombinált megvalósítása. A müveletek (a MEGSZUNTET és URESIT kivételével) futási ideje n-elemű sorra: T lr (n) = Θ(1) 6
7 a1 an eleje vege 5. ábra. Sor megvalósítása lánccal. a1 an eleje vege 6. ábra. Sor megvalósítása lánccal, fiktív első cellával Prioritási Sor Értékhalmaz: PriSor = { S = {a 1,...,a n } : S E}, E-n értelmezett a lineáris rendezési reláció. Műveletek: S : PriSor, x : E {Igaz} Letesit(S, ) {S = /0} {S = S} Megszuntet(S) {Hamis} {S = S} Uresit(S) {S = /0} {S = S} SorBa(S,x) {S = Pre(S) {x}} {S /0} SorBol(S,x) {x = min(pre(s)) Pre(S) = S {x}} {S = {a 1,...,a n }} Elemszam(S) {Elemszam = n} {S /0} Elso(S,x) {x = min(pre(s)) Pre(S) = S} {S /0} Torol(S) {S = Pre(S) {min(pre(s))}} Megvalósítás kupaccal. Unit PriSor ; { Minimumos prioritási sor adattipus megvalósítása kupaccal } Interface Type Elemtip =???; RendRelTip = Function (Var X,Y: Elemtip): Boolean; Tipus = Pointer ;(* az adattípus fő típusa *) PriSorT=PriSor.Tipus; { A prioritási sor adattipus műveletei: } Procedure Letesit(Var S : Tipus; R: RendRelTip); Procedure Megszuntet(Var S : Tipus); Procedure Uresit(Var S : Tipus); Function Elemszam(S : Tipus) : Word; 1 K 1 K... eleje vege 7. ábra. Sor kombinalt megvalósítása. 7
8 Procedure SorBa(Var S : Tipus; X : Elemtip); Procedure SorBol(Var S : Tipus; Var X : Elemtip); Procedure Elso( S : Tipus; Var X : Elemtip); Procedure Torol(Var S: Tipus); Implementation { repezentacio tombos kupaccal} } Const Meret =??? ;(* a reprezentáló tömb mérete, impl. paraméter *) Type Fa = Array[1..Meret] Of Elemtip; RepTip = Record F : Fa; Eszam : 0..Meret; Kis:RendReltip { Segéd műveletek: } Procedure Emel(Var F:Fa; Var Kis:RendReltip; i:word); {Input: Ha j<>i akkor F[Apa(j)]<=F[j] } {Output: Minden pontra teljesul a kupac tulajdonsag} Var apa,fiu:word; X:Elemtip; {Emel} X:=F[i]; fiu:=i; apa:=fiu Shr 1; While (apa>0) And Kis(X, F[apa]) Do F[fiu]:=F[apa]; fiu:=apa; apa:=fiu Shr 1; End{while}; F[fiu]:=X; End{Emel}; Procedure Sullyeszt(Var F:Fa; Var Kis:RendReltip; Eszam, i:word); {Input: Ha j<>i akkor F[j]<=F[Bfiu(j)] F[j]<=F[Jfiu(j)] } {Output: Minden pontra teljesul a kupac tulajdonsag} Var apa,fiu:word; X:Elemtip; {Sullyeszt} X:=F[i]; apa:=i; fiu:=apa Shl 1; While (fiu<=eszam) Do If Kis(F[fiu+1], F[fiu]) Then Inc(fiu); If Not Kis(F[fiu], X) Then Break; F[apa]:=F[fiu]; apa:=fiu; fiu:=apa Shl 1; End{while}; F[apa]:=X; End{Sullyeszt}; { a muveletek megvalositasa } Procedure Letesit(Var S : Tipus;R:RendRelTip); 8
9 Var Sr : ^ RepTip Absolute S; New(Sr); Sr^.Eszam :=0; Sr^.Kis:=R; End (* Letesit *); Procedure Megszuntet(Var S : Tipus); Var Sr : ^ RepTip Absolute S; Dispose(Sr); End (* Letesit *); Procedure Uresit(Var S : Tipus); Var Sr : ^ RepTip Absolute S; Sr^.Eszam := 0 End (* Uresit *) ; Function ElemSzam(S : Tipus) : Word; Var Sr : ^ RepTip Absolute S; ElemSzam := Sr^.Eszam End (* ElemSzam *) ; Procedure SorBa(Var S : Tipus; X : Elemtip); Var Sr : ^ RepTip Absolute S; apa, fiu : Integer; With Sr^ Do If Eszam < Meret Then Inc(Eszam); F[Eszam]:=X; Emel(F, Kis, Eszam); End{if} End (* SorBa *) ; Procedure SorBol(Var S : Tipus; Var X : Elemtip); Var Sr : ^ RepTip Absolute S; apa, fiu : integer; E : Elemtip; With Sr^ Do If Eszam <> 0 Then X:=F[1]; F[1]:=F[Eszam]; Dec(Eszam); Sullyeszt(F, Kis, Eszam, 1); End{if}; End (* SorBol *) ; Procedure Elso(S : Tipus; Var X : Elemtip); Var Sr : ^ RepTip Absolute S; X := Sr^.F[1] End (* Elso *) ; Procedure Torol(Var S : Tipus); 9
10 Var E : Elemtip; SorBol(S, E); End (* Torol *) ; End (* PriSor *). A műveletek futási ideje. SORBA és SORBOL futási ideje: T lr (n) = O(lgn) Módosítható prioritási Sor Műveletek: Prioritási sor műveletek + MODOSIT Feltesszük, hogy az adatelemeket az 1..n számokkal azonosítjuk, továbbá az elemek típusa: Type Elemtip=Record Kulcs:Kulcstip; Adat:Adattip és a rendezés a kulcsmező alapján történik. MODOSIT(S,I,K) művelet K-ra módosítja az i. elemet kulcsát és az új kulcs alapján módosítja az elem helyét az adatszerkezetben. Szükség van olyan Hol függvényre, amely minden i-re megmondja, hogy hol van az F kupacban az i-edik elem: F[Hol[i]] = i Hol[F[ j]] = j Unit ModPSor ; Interface Type Kulcstip=???; AdatTip =???; Elemtip = Record Kulcs:Kulcstip; Adat:AdatTip Tipus = Pointer ;(* az adattipus fő tipusa *) MPriSor=ModPSor.Tipus; { A módosítható prioritási sor adattipus műveletei: } Procedure Letesit(Var S : Tipus); Procedure Megszuntet(Var S : Tipus); Procedure Uresit(Var S : Tipus); Function Elemszam(S : Tipus) : Word; Procedure SorBa(Var S : Tipus; X : Elemtip); Procedure SorBol(Var S : Tipus; Var X : Elemtip); Procedure Elso( S : Tipus; Var X : Elemtip); Procedure Torol(Var S : Tipus; i : Word); Procedure Modosit(Var S : Tipus; i : Word; K:Kulcstip); Implementation { repezentáció tömbös kupaccal } Const Meret =??? ;(* a reprezentalo tomb merete *) Type Fa = Array[1..Meret] Of 0..Meret; AdatSor=Array[1..Meret] of Elemtip; SorTip = Record A : AdatSor; 10
11 F : Fa; Hol:Array[1..Meret] of 0..Meret; Eszam : 0..Meret; RepTip=SorTip; { Segéd műveletek: } Procedure Emel(Var S:SorTip; i:word); {Input: Ha j<>i akkor A[F[Apa(j)]]<=A[F[j]] } {Output: Minden pontra teljesul a kupac tulajdonsag} Var apa,fiu,x:word; {Emel} With S Do x:=f[i]; fiu:=i; apa:=fiu Shr 1; While (apa>0) And (A[x].kulcs < A[ F[apa] ].kulcs) Do F[fiu]:=F[apa]; Hol[F[apa]]:=fiu; fiu:=apa; apa:=fiu Shr 1; End{while}; F[fiu]:=x; Hol[x]:=fiu End{with}; End{Emel}; Procedure Sullyeszt(Var S:SorTip; Eszam, i:word); {Input: Ha j<>i akkor A[F[j]]<=A[F[Bal(j)]] A[F[j]]<=A[F[Jobb(j)]] } {Output: Minden pontra teljesul a kupac tulajdonsag} Var apa,fiu,x:word; {Sullyeszt} With S Do x:=f[i]; apa:=i; fiu:=apa Shl 1; While (fiu<=eszam) Do If A[F[fiu+1]].kulcs < A[F[fiu]].kulcs Then Inc(fiu); If A[x].kulcs <= A[F[fiu]].kulcs Then Break; F[apa]:=F[fiu]; Hol[F[fiu]]:=apa; apa:=fiu; fiu:=apa Shl 1; End{while}; F[apa]:=x; Hol[x]:=apa End{with}; End{Sullyeszt}; Procedure Modosit(Var S : Tipus; i : Word; K:Kulcstip); Var Sr : ^RepTip Absolute S; apa:word; apa:=sr^.hol[i] Shr 1; If K < Sr^.A[Sr^.F[apa]].kulcs Then 11
12 Sr^.A[i].kulcs:=K; Emel(Sr^, Sr^.Hol[i]); End Else Sr^.A[i].kulcs:=K; Sullyeszt(Sr^, Sr^.Eszam, Sr^.Hol[i]); MODOSIT futási ideje: T lr (n) = O(lg n) Lista Értékhalmaz: Lista = { a 1,...,a i 1 a i,...,a n : a i E,i = 1,...,n} Műveletek: L,L1,L2 : Lista, x : E {Igaz} Letesit(L) {L = } {L = L} Megszuntet(L) {Hamis} {L = L} Uresit(L) {L = } {L = L} Urese(L) {Urese = (Pre(L) = } {L = L} Ele jen(l) {= Pre(L) = a 1,...,a n } {L = L} Vegen(L) {Vegen = L = a 1,...,a n } {L = a 1,...,a i 1 a i,...,a n } Ele jere(l) {L = a 1,...,a n } {L = a 1,...,a i 1 a i,...,a n } Vegere(L) {L = a 1,...,a n } {L = a 1,...,a i 1 a i,...,a n i n} Tovabb(L) {L = a 1,...,a i 1,a i a i+1,...,a n } {L = a 1,...,a i 1 a i,...,a n i n} Kiolvas(L,x) {x = a i L = Pre(L)} {L = a 1,...,a i 1 a i,a i+1...,a n i n} Modosit(L,x) {L = a 1,...,a i 1 x,a i+1,...,a n } {L = a 1,...,a i 1 a i,...,a n } Bovit(L,x) {L = a 1,...,a i 1 x,a i,...,a n } {L = a 1,...,a i 1 a i,a i+1,...,a n i n} Torol(L) {L = a 1,...,a i 1 a i+1,...,a n } {L1 = α 1 β 1,L2 = α 2 β 2 } Kapcsol(L1,L2) {L1 = α 1 β 2 β 1,L2 = α 2 } a 1 a i 1 a i a n Kurzor Veg 8. ábra. Az S = a 1,...,a i 1 a i,...,a n lista érték ábrázolása egyirányú körláccal. Minden művelet futási ideje legrosszabb esetben is O(1). 12
13 A Kapcsol(L1,L2) elõtt L1 a 1 a i 1 a i a n Kurzor1 Veg1 L2 b 1 b j 1 b j b m A Kapcsol(L1,L2) után Kurzor2 Veg2 L1 a 1 a i 1 a i a n Kurzor1 L2 b 1 b j 1 b m b j Kurzor2 Veg2 Veg1 9. ábra. Két lista kapcsolása Halmaz Értékhalmaz: Halmaz = { H = {a 1,...,a n } : H E} Műveletek: H : Halmaz, x : E, I : Iterator {Igaz} Letesit(H) {H = /0} {H = H} Megszuntet(H) {Hamis} {H = H} Uresit(H) {H = /0} {H = H} Eleme(H,x) {Eleme = x Pre(H)} {H = {a 1,...,a n }} Elemszam(H) {Elemszam = n} {H = H} Bovit(H,x) {H = Pre(H) {x}} {H = H} Torol(H,x) {H = Pre(H) {x}} {H = H} IterKezd(H,I) {} {I = I} IterAd(I,x) {} {I = I} IterVege(I) {} Forall x in H Do M(x); IterKezd(H,I); While Not IterVege(I) Do IterAd(I,x); M(x); 13
14 16.7. Halmaz megvalósítása bitvektorral Feltétel: az Elemtipus felsorolás típus intervalluma lehet csak, Pl 1..MaxN. Const MaxN=???; Type Halmaz=Record T:Array[1..MaxN] of Boolean; Eszam:0..MaxN; Var H:Halmaz; x H H.T[x] Az ELEME, BOVIT, TOROL futási ideje Θ(1). Az iteráció futási ideje O(MaxN). A megvalósítása: For x:=1 To MaxN Do If H.T[x] Then M(x) Halmaz megvalósítása tömbbel Tar 1 n Meret a 1 a n Eszam=n /l 10. ábra. Halmaz ábrázolása tömbben. A Műveletek futási ideje n-elemű halmaz esetén: ELEME: T lr (n) = O(n), T a (n) = O(n). BOVIT: T lr (n) = O(1), T a (n) = O(1). TOROL: T lr (n) = O(n), T a (n) = O(n). Az iteráció futási ideje O(n). Rendezett tömb esetén ELEME: T lr (n) = O(lg n) Halmaz megvalósítása láccal a 1 a n eleje vege 11. ábra. Halmaz ábrázolása láncban. A Műveletek futási ideje n-elemű halmaz esetén: ELEME: T lr (n) = O(n), T a (n) = O(n). BOVIT: T lr (n) = O(1), T a (n) = O(1). TOROL: T lr (n) = O(n), T a (n) = O(n). Az iteráció futási ideje O(n). 14
15 Halmaz megvalósítása bináris keresőfával A F = (M, R, Adat) absztrakt adatszerkezetet bináris keresőfának nevezzük, ha 1. F bináris fa, R = {bal, jobb},bal, jobb : M M 2. Adat : M Elemtip és Elemtip-on értelmezett egy lineáris rendezési reláció, 3. ( x M)( p F bal(x) )( q F jobb(x) )(Adat(p) Adat(x) Adat(q)) x a 2 p a 1 q a ábra. Keresőfa tulajdonság: Adat(p) = a 1 Adat(x) = a 2 a 3 = Adat(q) Procedure Inorder(F:BinFA; M:Muveltip); If F<>Nil Then Inorder(F^.bal); M(F^.adat); Inorder(F^.jobb); End End{Inorder}; Állítás. F akkor és csak akkor bináris keresőfa, ha inorder bejárása rendezett sorozatot ad. A BINKERFAKERES függvényeljárás egy nyilvánvaló megoldása a fában keresés feladatnak. Function BinKerFaKeres(a:Adat; F:BinFA):BinFa; While (F<>Nil) And (a<>f^.adat) Do If a<f^.adat Then F:=F^.bal Else F:=F^.jobb; BinKerFaKeres:=F; Az F bináris keresőfában a P pont követője az a Q pont, amelynek adata az Adat(P)-nél nagyobbak közül a legkisebb (ha van). A követő két esete: Unit BinFaM; Interface Type Kulcstip =??? ;(* a rendezési mező típusa *) Adattip =??? ;(* az adatmező típusa *) 15
16 ábra. Példa bináris keresőfa F F R R S Z P X Jobb(P) P X Jobb(P) S Z F 1 1 F Q Y F 2 2 Q Y F 14. ábra. Pont követőjének 1. esete: Jobb(P), Kovet(P) = Min(Jobb(P)) 16
17 F F R R S Z Q Y Q Y S Z Bal(Q)= Q 1 Bal(Q)= Q1 F 3 F 3 F 1 P X F 1 P X F 2 F ábra. Pont követőjének 2. esete: Jobb(P) =, Kovet(P) = Q : Max(Bal(Q)) = P Elemtip = Record kulcs: Kulcstip; adat : Adattip BinFa = ^BinFaPont; BinFaPont = Record adat : Elemtip; bal, jobb : BinFa; apa : BinFa; { műveletek: } Function Mini(F : BinFa): BinFa; Function Maxi(F : BinFa): BinFa; Function Kovet(F : BinFa; p:binfa): BinFa; Function Eloz(F : BinFa; p:binfa): BinFa; Implementation Function Mini(F : BinFa): BinFa; Var p:binfa; p:=f; While p^.bal <> Nil Do p:= p^.bal; Mini:=p; Function Maxi(F : BinFa): BinFa; Var p:binfa; p:=f; While p^.jobb <> Nil Do p:= p^.jobb; Maxi:=p; 17
18 Function Kovet(F : BinFa;p:BinFa): BinFa; Var q0,q:binfa; If p^.jobb <> Nil Then q0:= p^.jobb; While q0^.bal <> Nil Do q0:= q0^.bal; End Else q:=f; q0:=nil; While q <> p Do If p^.adat.kulcs < q^.adat.kulcs Then q0:= q; q:= q^.bal End Else q:= q^.jobb Kovet:= q0; Function Eloz(F : BinFa;p:BinFa): BinFa; Var q0,q:binfa; If p^.bal <> Nil Then q0:= p^.bal; While q0^.jobb <> Nil Do q0:= q0^.jobb; End Else q:=f; q0:=nil; While q <> p Do If p^.adat.kulcs > q^.adat.kulcs Then q0:= q; q:= q^.jobb End Else q:= q^.bal Eloz:= q0; Function Koveto(F : BinFa; p:binfa): BinFa; {Ha van apa pointer} If p^.jobb <> Nil Then p:= p^.jobb; While p^.bal <> Nil Do p:=p^.bal; End Else While (p^.apa<>nil) And (p^.apa^.bal<>p) Do p:=p^.apa; p:=p^.apa; Koveto:=p; End{Koveto}; Function Elozo(F : BinFa; p:binfa): BinFa; {Ha van apa pointer} If p^.bal <> Nil Then p:= p^.bal; 18
19 While p^.jobb <> Nil Do p:=p^.jobb; End Else While (p^.apa<>nil) And (p^.apa^.jobb<>p) Do p:=p^.apa; p:=p^.apa; Elozo:=p; End{Elozo}; End (* BinFa *). Bináris keresőfa bővítése: az új pont beillesztése a keresőút végére. A Q pont a K kulcshoz tartozó keresőút (K-keresőút) vége, ha K < Adat(Q) esetben Bal(Q) =, illetve K Adat(Q) esetben ábra. A példa bináris keresőfa bővítése a 30 kulccsal. Jobb(Q) =, továbbá az F gyökértől Q-ig vezető úton minden R pontra teljesül, hogy Q F Bal(R), ha K < Adat(R) és Q F Jobb(R), ha K Adat(R). Törlés bináris keresőfából. Unit BinKerFa ; { Binaris keresofa } Interface Type Kulcstip =??? ;(* a rendezési mező tíusa *) Adattip =??? ;(* az adatmező típusa *) Elemtip = Record kulcs: Kulcstip; adat : Adattip BinFa = ^BinFaPont; BinFaPont = Record adat : Elemtip; bal, jobb : BinFa 19
20 ábra. A 29 kulcs törlése: egyszerű eset, a törlendő pontnak nincs bal fia ábra. 20
21 ábra. A 10 kulcs törlése: a törlendő pontnak két fia van. A törlendő pont helyettesítése a követőjével és a követő tényleges törlése ábra. 21
22 { műveletek: } Function Keres(F : BinFa; K : Kulcstip) : BinFa; Procedure Bovit0(Var F : BinFa; (* a bővítendő fa *) X : Elemtip); (* a bővítendő elem *) Procedure Bovit(Var F : BinFa; (* a bővítendő fa *) X : Elemtip; (* a bővítendő elem *) Var Tobb : Boolean ); (* lehet többszörös elem? *) Procedure Torol(Var F : BinFa; K : Kulcstip; (* a törlendő pont kulcsa *) Var Volt : Boolean );(* volt ilyen pont? *) Implementation Function Keres(F : BinFa; K : Kulcstip) : BinFa; While (F <> Nil) Do If K < F^.adat.kulcs Then F := F^.bal Else If K > F^.adat.kulcs Then F := F^.jobb Else Break; Keres:= F; End (* Keres *) ; Procedure Bovit0(Var F : BinFa; X : Elemtip); {Rekurzív bővítés, töbszörös elem megengedett és nem ellenőrzött} If F = Nil Then New(F); F^.adat:= X; F^.bal:= Nil; F^.jobb:= Nil; End Else If X.kulcs < F^.adat.kulcs Then Bovit0(F^.bal, X) Else Bovit0(F^.jobb, X) End (* Bovit0 *) ; Procedure Bovit(Var F : BinFa; X : Elemtip; Var Tobb : Boolean ); Var P, Apa, Ujp : BinFa; Nincs : Boolean; New(Ujp); Nincs := True; With Ujp^ Do adat := X ; bal := Nil; jobb := Nil If F = Nil Then F := Ujp 22
23 Else P := F; While (P <> Nil) Do Apa := P; If X.kulcs < P^.adat.kulcs Then P := P^.bal Else If X.kulcs > P^.adat.kulcs Then P := P^.jobb Else {P^.adat.kulcs=K} Nincs:= False; If Not Tobb Then Tobb:= True; Dispose(Ujp); Exit End Else p:= p^.jobb End End{while}; If X.kulcs < Apa^.adat.kulcs Then Apa^.bal := Ujp Else Apa^.jobb := Ujp End{else:F<>Nil}; Tobb := Not Nincs End (* Bovit *) ; Procedure Torol(Var F : BinFa; K : Kulcstip; Var Volt : Boolean); Var P, Apa, T : BinFa; Tovabb : Boolean; P := F; Apa := P; Tovabb := True; (* a K kulcsu pont keresese *) While (P <> Nil) And Tovabb Do If K < P^.adat.kulcs Then Apa := P; P := P^.bal End Else If K > P^.adat.kulcs Then Apa := P; P := P^.jobb End Else Tovabb := False; {end while} Volt := Not Tovabb; If Volt Then (* P^.adat.kulcs=K, Apa a P pont apja, ha P=F akkor P=Apa *) T := P; (* a törlendő pont T *) If P^.bal = Nil Then {P-nek nins bal fia } If P = Apa^.bal Then Apa^.bal := P^.jobb Else If P = Apa^.jobb Then Apa^.jobb := P^.jobb Else F := P^.jobb Else If P^.jobb = Nil Then{P-nek nics jobb fia } If P = Apa^.bal Then Apa^.bal := P^.bal Else If P = Apa^.jobb Then Apa^.jobb := P^.bal 23
24 Else F := P^.bal Else {P-nek ket fia van } T := P^.jobb; Apa := T; While T^.bal <> Nil Do {legyen T a P kovetoje} Apa := T; T := T^.bal (* P helyebe T kerül *) P^.adat := T^.adat; If T = Apa Then P^.jobb := T^.jobb Else Apa^.bal := T^.jobb; Dispose(T) End End (* Torol *) ; End (* BinKerFa *). A ELEME, BOVIT és TOROL műveletek futási ideje O(h(F)). A Műveletek futási ideje n-elemű halmaz esetén: ELEME: T lr (n) = O(n), T a (n) = O(lgn). BOVIT: T lr (n) = O(n), T a (n) = O(lgn). TOROL: T lr (n) = O(n), T a (n) = O(lgn). 24
Megoldás meghatározása Ez a szakasz kitölti a c és S táblázatokat, a kiíratás S alapján egy rekurzív algoritmussal megtehető.
Leghosszabb közös részsorozat Egy sorozat, akkor részsorozata egy másiknak, ha abból elemeinek elhagyásával megkapható. A feladat két sorozat X = (x 1,...,x m ) és Y = (y 1,...,y n ) leghosszabb közös
Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.
Hátizsák feladat Egy adott hátizsákba tárgyakat akarunk pakolni. Adott n tárgy minden tárgynak van egy fontossági értéke ( f [i]), és egy súlya (s[i]), a hátizsákba maximum összesen S súlyt pakolhatunk.
Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.
Hátizsák feladat Egy adott hátizsákba tárgyakat akarunk pakolni. Adott n tárgy minden tárgynak van egy fontossági értéke ( f [i]), és egy súlya (s[i]), a hátizsákba maximum összesen S súlyt pakolhatunk.
Az absztrakt adattípus egy (E,M) párral adható meg, ahol E az értékhalmaz, M a műveletek halmaza. Fő tulajdonságok. Verem
Előadás részvétel igazolása Az előadáson való részvételt az előadáson kapott kódnak az alábbi oldalra való feltöltésével lehet igazolni. http://www.inf.u-szeged.hu/~tnemeth/alg1ics/ Az adatkezelés szintjei
Algoritmusok és adatszerkezetek II.
Algoritmusok és adatszerkezetek II. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 3. Kiegyensúlyozott keresőfák A T tulajdonság magasság-egyensúlyozó
Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 0.1. Az algoritmikus tudás szintjei Ismeri (a megoldó algoritmust) Érti Le tudja pontosan
3. Absztrakt adattípusok
3. Absztrakt adattípusok Az adatkezelés szintjei: 1. Probléma szintje. 2. Modell szintje. 3. Absztrakt adattípus szintje. 4. Absztrakt adatszerkezet szintje. 5. Adatszerkezet szintje. 6. Gépi szint. Absztrakt
Bináris keresőfák. Adat : M Elemtip és Elemtip-on értelmezett egy lineáris rendezési reláció,
Bináris keresőfák Az F = (M,R,Adat) absztrakt adatszerkezetet bináris keresőfának nevezzük, ha F bináris fa, R = {bal, jobb, apa}, bal, jobb, apa : M M, Adat : M Elemtip és Elemtip-on értelmezett egy lineáris
Számláló rendezés. Példa
Alsó korlát rendezési algoritmusokra Minden olyan rendezési algoritmusnak a futását, amely elempárok egymással való összehasonlítása alapján működik leírja egy bináris döntési fa. Az algoritmus által a
A Verem absztrakt adattípus
A Verem absztrakt adattípus Értékhalmaz: E Verem = [a 1,...,a n : a i E,i = 1,...,n,] Műveletek: V : Verem, x : E {Igaz} Letesit(V) {V = []} {V = V } Megszuntet(V) {Igaz} {V = V } Uresit(V) {V = []} {V
Algoritmusok és adatszerkezetek II.
Algoritmusok és adatszerkezetek II. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 5. Vágható-egyesíthető Halmaz adattípus megvalósítása önszervező
Egyesíthető prioritási sor
Egyesíthető prioritási sor Értékhalmaz: EPriSor = S E, E-n értelmezett a lineáris rendezési reláció. Műveletek: S,S 1,S 2 : EPriSor, x : E {Igaz} Letesit(S, ) {S = /0} {S = S} Megszuntet(S) {} {S = S}
Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]
Kupac adatszerkezet A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.
14. Mediánok és rendezett minták
14. Mediánok és rendezett minták Kiválasztási probléma Bemenet: Azonos típusú (különböző) elemek H = {a 1,...,a n } halmaza, amelyeken értelmezett egy lineáris rendezési reláció és egy i (1 i n) index.
Amortizációs költségelemzés
Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük
17. Tördelőtáblák (Hasítótáblák)
7. Tördelőtáblák (Hasítótáblák) Legye U az Elemtip, uiverzum, H = {a,,a } U Vegyük egy T:Array[0..M-] of Elemtip tömbböt, amelybe a H halmazt tároli akarjuk. Válasszuk egy h : U {0,,M } függvéyt, amely
Egyesíthető prioritási sor
Egyesíthető prioritási sor Értékhalmaz: EPriSor = S E, E-n értelmezett a lineáris rendezési reláció. Műveletek: S,S 1,S 2 : EPriSor, x : E {Igaz} Letesit(S, ) {S = /0} {S = S} Megszuntet(S) {} {S = S}
Algoritmusok és adatszerkezetek II.
Algoritmusok és adatszerkezetek II. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 6. Ugrólista (Skiplist) Definíció. Olyan adatszerkezet, amelyre
1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás
Preorder ejárás Fa bejárásán olyan algoritmust értünk, amelynek bemenete egy F fa és egy M művelet, és az algoritmus adott sorrendben pontosan egyszer végrehajtja az M műveletet a fa pontjaiban lévő adatokra.
Táblázatok fontosabb műveletei 1
Táblázatok fontosabb műveletei 1 - - Soros táblázat procedure BESZÚR1(TÁBLA, újelem) - - beszúrás soros táblázatba - - a táblázatot egy rekordokat tartalmazó dinamikus vektorral reprezentáljuk - - a rekordok
Önszervező bináris keresőfák
Önszervező bináris keresőfák Vágható-egyesíthető halmaz adattípus H={2,5,7,11,23,45,75} Vag(H,23) Egyesit(H1,H2) H1= {2,5,7,11} H2= {23,45,75} Vágás A keresési útvonal mentén feldaraboljuk a fát, majd
... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)
6. Fabejáró algoritmusok Fa bejárásán olyan algoritmust értünk, amelynek bemenete egy F fa és egy M művelet, és az algoritmus adott sorrendben pontosan egyszer végrehajtja az M műveletet a fa pontjaiban
Hierarchikus adatszerkezetek
5. előadás Hierarchikus adatszerkezetek A hierarchikus adatszerkezet olyan < A, R > rendezett pár, amelynél van egy kitüntetett r A gyökérelem úgy, hogy: 1. r nem lehet végpont, azaz a A esetén R(a,r)
Példa 30 14, 22 55,
Piros-Fekete fák 0 Példa 14, 22 55, 77 0 14 55 22 77 Piros-Fekete fák A piros-fekete fa olyan bináris keresőfa, amelynek minden pontja egy extra bit információt tartalmaz, ez a pont színe, amelynek értékei:
Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek
Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Tömb Ugyanolyan típusú elemeket tárol A mérete előre definiált kell legyen és nem lehet megváltoztatni futás során Legyen n a tömb mérete. Ekkor:
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.
Évközi teljesítés A kurzus teljesítéséek feltételei Két gyakorlato egírt ZH, az elérhető 00 potból 50 potot kell eléri. Aki e teljesíti a feltételt a vizsgaidőszak első hetébe a vizsgára egedésért írhat
10. előadás Speciális többágú fák
10. előadás Adatszerkezetek és algoritmusok előadás 2018. április 17., és Debreceni Egyetem Informatikai Kar 10.1 A többágú fák kezelésére nincsenek általános elvek, implementációjuk elsősorban alkalmazásfüggő.
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.
Kiválasztás kupaccal A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.
Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?
Ugrólisták Ugrólisták Ugrólisták Ugrólisták RSL Insert Example insert(22) with 3 flips 13 8 29 20 10 23 19 11 2 13 22 8 29 20 10 23 19 11 2 Runtime? Ugrólisták Empirical analysis http://www.inf.u-szeged.hu/~tnemeth/alga2/eloadasok/skiplists.pdf
Algoritmizálás és adatmodellezés tanítása 1. előadás
Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az
Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12
Módosítható Prioritási sor Binomiális kupaccal modosit(x,k) {! if (k>x.kulcs) {!! x.kulcs=k ;!! y=x!! z=x.apa ;!! while(z!=nil and y.kulcs
Adatszerkezet - műveletek
Adatszerkezet - műveletek adatszerkezet létrehozása adat felvétele adat keresése adat módosítása adat törlése elemszám visszaadása minden adat törlése (üresít) adatszerkezet felszámolása (megszüntet) +
Tuesday, March 6, 12. Hasító táblázatok
Hasító táblázatok Halmaz adattípus U (kulcsuniverzum) K (aktuális kulcsok) Függvény adattípus U (univerzum) ÉT (értelmezési tartomány) ÉK (érték készlet) Milyen az univerzum? Közvetlen címzésű táblázatok
9. Megoldás keresése visszalépéssel (backtracking)
9. Megoldás keresése visszalépéssel (backtracking) Probléma: n-királynő Helyezzünk el az nxn-es sakktáblán n királynőt, hogy egyik se üsse a másikat! 8 7 6 4 3 2 2 3 4 6 7 8. ábra. Üres tábla A megoldás
Neumann János Tehetséggondozó Program Gráfalgoritmusok II.
Neumann János Tehetséggondozó Program Gráfalgoritmusok II. Horváth Gyula horvath@inf.elte.hu 1. A szélességi bejárás alkalmazásai. Nyilvánvaló, hogy S(0) = {r}. Jelölés: D(p) = δ(r, p) Nyilvánvaló, hogy
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
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 Bináris keresőfa, kupac Katona Gyula Y. (BME SZIT) A számítástudomány
7 7, ,22 13,22 13, ,28
Általános keresőfák 7 7,13 13 13 7 20 7 20,22 13,22 13,22 7 20 25 7 20 25,28 Általános keresőfa Az általános keresőfa olyan absztrakt adatszerkezet, amely fa és minden cellájában nem csak egy (adat), hanem
Adatszerkezetek 7a. Dr. IványiPéter
Adatszerkezetek 7a. Dr. IványiPéter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér () Nincsennek hurkok!!! 2 Bináris fák Azokat a
Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)
Adatszerkezetek I. 7. előadás (Horváth Gyula anyagai felhasználásával) Bináris fa A fa (bináris fa) rekurzív adatszerkezet: BinFa:= Fa := ÜresFa Rekord(Elem,BinFa,BinFa) ÜresFa Rekord(Elem,Fák) 2/37 Bináris
end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..
A Név: l 2014.04.09 Neptun kód: Gyakorlat vezető: HG BP MN l 1. Adott egy (12 nem nulla értékû elemmel rendelkezõ) 6x7 méretû ritka mátrix hiányos 4+2 soros reprezentációja. SOR: 1 1 2 2 2 3 3 4 4 5 6
Rendezettminta-fa [2] [2]
Rendezettminta-fa Minden p ponthoz tároljuk a p gyökerű fa belső pontjainak számát (méretét) Adott elem rangja: az elem sorszáma (sorrendben hányadik az adatszekezetben) Adott rangú elem keresése - T[r]
Adatszerkezetek 1. előadás
Adatszerkezetek 1. előadás Irodalom: Lipschutz: Adatszerkezetek Morvay, Sebők: Számítógépes adatkezelés Cormen, Leiserson, Rives, Stein: Új algoritmusok http://it.inf.unideb.hu/~halasz http://it.inf.unideb.hu/adatszerk
7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet
7. BINÁRIS FÁK Az előző fejezetekben már találkoztunk bináris fákkal. Ezt a központi fontosságú adatszerkezetet most vezetjük be a saját helyén és az általános fák szerepét szűkítve, csak a bináris fát
ÖNSZERVEZŐ BINÁRIS KERESŐFÁK HATÉKONYSÁGA
ÖNSZERVEZŐ BINÁRIS KERESŐFÁK HATÉKONYSÁGA Tétel: Ha a halmazok ábrázolására önszervező bináris keresőfát használunk, akkor minden α 1,...,α m műveletsor, ahol i {1..m}: α i {keres;bovit;torol;vag;egyesit}
Kupac adatszerkezet. 1. ábra.
Kupac adatszerkezet A bináris kupac egy majdnem teljes bináris fa, amely minden szintjén teljesen kitöltött kivéve a legalacsonyabb szintet, ahol balról jobbra haladva egy adott csúcsig vannak elemek.
Algoritmusok és adatszerkezetek gyakorlat 07
Algoritmusok és adatszerkezetek gyakorlat 0 Keresőfák Fák Fa: összefüggő, körmentes gráf, melyre igaz, hogy: - (Általában) egy gyökér csúcsa van, melynek 0 vagy több részfája van - Pontosan egy út vezet
Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek
Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1
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
Programozás alapjai II. (8. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT Speciális adatszerkezetek A helyes adatábrázolás választása, a helyes adatszerkezet
10. Gráf absztrakt adattípus, gráfok ábrázolása
Gráf absztrakt adattípus, gráfok ábrázolása Definíciók Irányítatlan gráf:g = (V, E) E rendezetlen {a,b,a,b V párok halmaza Irányított gráf:g = (V,E) E rendezett (a,b) párok halmaza; E V V Multigráf: G
Programozás alapjai II. (7. ea) C++
Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1
2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)
A Név: l 2017.04.06 Neptun kód: Gyakorlat vezet : HG BP l 1. Az A vektor tartalmát az alábbi KUPACOL eljárással rendezzük át maximum kupaccá. A={28, 87, 96, 65, 55, 32, 51, 69} Mi lesz az értéke az A vektor
5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E
5. SOR A sor adatszerkezet is ismerős a mindennapokból, például a várakozási sornak számos előfordulásával van dolgunk, akár emberekről akár tárgyakról (pl. munkadarabokról) legyen szó. A sor adattípus
Struktúra nélküli adatszerkezetek
Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A
A félév során előkerülő témakörök
A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok
Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája
Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból
2. AZ ADATTÍPUS ABSZTRAKCIÓS SZINTJEI...2
2. AZ ADATTÍPUS ABSZTRAKCIÓS SZINTJEI...2 2.1. Absztrakt adattípus (ADT)... 2 2.1.1. Algebrai (axiomatikus) specifikáció... 3 2.1.2. Funkcionális (elő-, utófeltételes) specifikáció... 4 2.1.3. Algoritmusok
Algoritmusok és Adatszerkezetek II.
Algoritmusok és Adatszerkezetek II. előadás Felelős tanszék: Számítógépes algoritmusok és mesterséges intelligencia tanszék Nappali tagozaton: Előadás: heti 2 óra / 5 kredit. Teljesítés módja: Kollokvium.
Egyirányban láncolt lista
Egyirányban láncolt lista A tárhely (listaelem) az adatelem értékén kívül egy mutatót tartalmaz, amely a következő listaelem címét tartalmazza. A láncolt lista első elemének címét egy, a láncszerkezeten
Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).
Edényrendezés Tegyük fel, hogy a rendezendő H = {a 1,...,a n } halmaz elemei a [0,1) intervallumba eső valós számok. Vegyünk m db vödröt, V [0],...,V [m 1] és osszuk szét a rendezendő halmaz elemeit a
Programozás alapjai. 5. előadás
5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk
Érdekes informatika feladatok
A keres,kkel és adatbázissal ellátott lengyel honlap számos díjat kapott: Spirit of Delphi '98, Delphi Community Award, Poland on the Internet, Golden Bagel Award stb. Az itt megtalálható komponenseket
Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:
Buborékrendezés: For ciklussal: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábr.: ha p egy mutató típusú változó akkor p^ az általa mutatott adatelem, p^.adat;p^.mut. A semmibe mutató ponter a NIL.Szabad
Algoritmusok vektorokkal keresések 1
Algoritmusok vektorokkal keresések 1 function TELJES_KERES1(A, érték) - - teljes keresés while ciklussal 1. i 1 2. while i méret(a) és A[i] érték do 3. i i + 1 4. end while 5. if i > méret(a) then 6. KIVÉTEL
Algoritmuselmélet 2. előadás
Algoritmuselmélet 2. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Február 12. ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés
Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból
ÜTEMTERV Programozás-elmélet c. tárgyhoz (GEMAK233B, GEMAK233-B) BSc gazdaságinformatikus, programtervező informatikus alapszakok számára Óraszám: heti 2+0, (aláírás+kollokvium, 3 kredit) 2019/20-es tanév
Adatszerkezetek és algoritmusok
2010. január 8. Bevezet El z órák anyagainak áttekintése Ismétlés Adatszerkezetek osztályozása Sor, Verem, Lengyelforma Statikus, tömbös reprezentáció Dinamikus, láncolt reprezentáció Láncolt lista Lassú
Algoritmusok helyességének bizonyítása. A Floyd-módszer
Algoritmusok helyességének bizonyítása A Floyd-módszer Algoritmusok végrehajtása Egy A algoritmus esetében a változókat három változótípusról beszélhetünk, melyeket az X, Y és Z vektorokba csoportosítjuk
Rekurzió. Horváth Gyula. horvath@inf.elte.hu
1. ábra. Rekurzió Horváth Gyula horvath@inf.elte.hu 1. Feladat: Sorbaállítások száma Hány féleképpen lehet sorbaállítani az osztály tanulóit? Bemenet: a tanulók n száma. Kimenet: ahány félekeppen az n
Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor
Láncolt listák Egyszerű, rendezett és speciális láncolt listák előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Láncolt
Rendezések. A föltöltés nemcsak az r-re vonatkozik, hanem az s-re is. Ez használható föl a további rendezések
Rendezések Feladat Rendezési algoritmusok kipróbálása, hatékonysági viselkedésének vizsgálata. A rendezések egy ElemSzam méretü r tömben történik. Többféle föltöltés közül lehet választani: o a növekvően
Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)
Adatszerkezetek I. 8. előadás (Horváth Gyula anyagai felhasználásával) Kereső- és rendezőfák Közös tulajdonságok: A gyökérelem (vagy kulcsértéke) nagyobb vagy egyenlő minden tőle balra levő elemnél. A
Programozási nyelvek a közoktatásban alapfogalmak II. előadás
Programozási nyelvek a közoktatásban alapfogalmak II. előadás Szintaxis, szemantika BNF szintaxisgráf absztrakt értelmező axiomatikus (elő- és utófeltétel) Pap Gáborné. Szlávi Péter, Zsakó László: Programozási
10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 28.
10. tétel Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 28. 2-3 fák Hatékony keresőfa-konstrukció. Ez is fa, de a binárisnál annyival bonyolultabb hogy egy nem-levél csúcsnak 2 vagy 3 fia
9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.
Programozási tételek Programozási feladatok megoldásakor a top-down (strukturált) programtervezés esetén három vezérlési szerkezetet használunk: - szekvencia - elágazás - ciklus Eddig megismertük az alábbi
A feladat. A főprogram
A feladat A magyar kártya típusának megvalósítása. Tisztázandók: 1. Milyen műveletek értelmesek a típussal kapcsolatosan? 2. Hogyan ábrázolható a típus? 3. Miként valósíthatók meg a műveletek figyelembe
Algoritmizálás + kódolás C++ nyelven és Pascalban
Algoritmizálás + kódolás nyelven és ban Motiváció A Programozási alapismeretek tárgyban az algoritmizáláshoz struktogramot, a kódoláshoz nyelvet használunk, a Közismereti informatikában (a közoktatásban
Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.
Összetett programozási tételek Sorozathoz sorozatot relő feladatokkal foglalkozunk. A bemenő sorozatot le kell másolni, s közben az elemekre vonatkozó átalakításokat lehet végezni rajta: Input : n N 0,
1. ábra. Számláló rendezés
1:2 2:3 1:3 1,2,3 1:3 1,3,2 3,1,2 2,1,3 2:3 2,3,1 3,2,1 1. ábra. Alsó korlát rendezési algoritmusokra Minden olyan rendezési algoritmusnak a futását, amely elempárok egymással
21. Adatszerkezetek Az adattípus absztrakciós szintjei Absztrakt adattípus (ADT) Absztrakt adatszerkezet (ADS) Egyszerű adattípusok Tömbök
2. Adatszerkezetek Az adattípus absztrakciós szintjei http://people.inf.elte.hu/fekete/docs_/adt_ads.pdf Absztrakt adattípus (ADT) Az adattípust úgy specifikáljuk, hogy szerkezetére, reprezentálására,
Számjegyes vagy radix rendezés
Számláló rendezés Amennyiben a rendezendő elemek által felvehető értékek halmazának számossága kicsi, akkor megadható lineáris időigényű algoritmus. A bemenet a rendezendő elemek egy n méretű A tömbben
Rekurzió. 1. Feladat: Sorbaállítások száma. 2. Feladat: Zsebpénz. Horváth Gyula horvath@inf.elte.hu. Megoldás. Megoldás
Rekurzió Horváth Gyula horvath@inf.elte.hu 1. Feladat: Sorbaállítások száma Hány féleképpen lehet sorbaállítani az osztály tanulóit? Bemenet: a tanulók n száma. Kimenet: ahány félekeppen az n tanuló sorbaállítható.
- Levelek: operandusok - Csomópontok: operátorok. Fenti kifejezés: (x+ (y 10)) * (6 / z) Bináris Keresőfa (BST) Példa bináris keresőfára.
Fák Fa definíciója Fa(Tree): csomópontok(nodes) halmaza, amelyeket élek(edges) kötnek össze, és teljesülnek az alábbi feltételek: - létezik egy kitűntetett csomópont: a gyökér (root) - a gyökértől különböző
Adatszerkezetek I. 1. előadás
Adatszerkezetek I. 1. előadás Adatok jellemzői ismétlés 1. Azonosító Az a jelsorozat, amellyel hivatkozhatunk a tartalmára, amely által módosíthatjuk tartalmát. 2. Hozzáférési jog Adatokat módosítani,
Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)
Programozás alapjai C nyelv 8. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény
Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3
Láncolt Listák Adatszerkezetek Adatszerkezet: Az adatelemek egy olyan véges halmaza, amelyben az adatelemek között szerkezeti összefüggések vannak Megvalósítások: - Tömb, Láncolt lista, Fa, Kupac, Gráf,
Korlátozás és szétválasztás elve. ADAGOLO adattípus
Korlátozás és szétválasztás elve ADAGOLO adattípus Értékhalmaz: E Adagolo : A E Műveletek: A : Adagolo, x : E {Igaz} Letesit(A) {A = /0} {A = A} Megszuntet(A) {Igaz} {A = A} Uresit(A) {A = /0} {A = A}
BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli
BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli A versenyzők figyelmébe: 1. Minden tömböt 1-től kezdődően indexelünk. 2. A rácstesztekre (A rész)
Bonyolultságelmélet. Thursday 1 st December, 2016, 22:21
Bonyolultságelmélet Thursday 1 st December, 2016, 22:21 Tárbonyolultság A futásidő mellett a felhasznált tárterület a másik fontos erőforrás. Ismét igaz, hogy egy Ram-program esetében ha csak a használt
Hierarchikus adatszerkezetek
Hierarchikus adatszerkezetek A szekveniális adatszerkezetek általánosítása. Minden adatelemnek pontosan 1 megelőzője van, de akárhány rákövetkezője lehet, kivéve egy speciális elemet. Fa (tree) Hierarchikus
Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában
Programozás alapjai C nyelv 8. gyakorlat Szeberényi mre BME T Programozás alapjai. (C nyelv, gyakorlat) BME-T Sz.. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény
1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje
1. Alapfogalmak 1.1. Algoritmus Az algoritmus olyan elemi műveletekből kompozíciós szabályok szerint felépített összetett művelet, amelyet megadott feltételt teljesítő bemeneti adatra végrehajtva, a megkívánt
9. előadás. A táblázat. A táblázatról általában, soros, önátrendező, rendezett és kulcstranszformációs táblázat
. előadás ról általában, soros, önátrendező, rendezett és kulcstranszformációs Adatszerkezetek és algoritmusok előadás 0. április. ról általában,, és Debreceni Egyetem Informatikai Kar. Általános tudnivalók
Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 7. Gráfalgoritmusok II. 7.1. Feladat: Útcaseprő A város utcáinak takarítását úgy szervezték
6. LISTÁK ábra. A lista absztrakt adatszerkezet (ADS)
6. LISTÁK Az előző fejezetekben megismerkedtünk a láncolt ábrázolással. Láttuk a verem és a sor, valamint előre tekintve a keresőfa pointeres megvalósításának a lehetőségét és előnyeit. A láncolt ábrázolással
Felvételi vizsga mintatételsor Informatika írásbeli vizsga
BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) Felvételi vizsga mintatételsor Informatika írásbeli vizsga 1. (5p) Egy x biten tárolt egész adattípus (x szigorúan pozitív
2. AZ ADATTÍPUS ABSZTRAKCIÓS SZINTJEI
2. AZ ADATTÍPUS ABSZTRAKCIÓS SZINTJEI Ebben a bevezető jellegű fejezetben arra a kérdésre próbálunk válaszolni, hogy az adattípusok, illetve adatszerkezetek milyen absztrakciós szinten jelennek meg az
Adatszerkezetek 2. Dr. Iványi Péter
Adatszerkezetek 2. Dr. Iványi Péter 1 Hash tábla A bináris fáknál O(log n) a legjobb eset a keresésre. Ha valamilyen közvetlen címzést használunk, akkor akár O(1) is elérhető. A hash tábla a tömb általánosításaként
Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez
Pásztor Attila Algoritmizálás és programozás tankönyv az emeltszintű érettségihez 3. ADATTÍPUSOK...26 3.1. AZ ADATOK LEGFONTOSABB JELLEMZŐI:...26 3.2. ELEMI ADATTÍPUSOK...27 3.3. ÖSSZETETT ADATTÍPUSOK...28
Érdekes informatika feladatok
K. L. Érdekes informatika feladatok XXVIII. rész A konvex burkoló (burok) Legyen S a Z sík egy ponthalmaza. S konvex, ha tetszőleges A, B S-beli pont esetén az AB szakasz is S-be esik. Legyen S a Z sík
17. A 2-3 fák és B-fák. 2-3 fák
17. A 2-3 fák és B-fák 2-3 fák Fontos jelentősége, hogy belőlük fejlődtek ki a B-fák. Def.: Minden belső csúcsnak 2 vagy 3 gyermeke van. A levelek egy szinten helyezkednek el. Az adatrekordok/kulcsok csak