Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Hatékonyság 2. Szlávi Péter
ELTE IK Média- és Oktatásinformatikai Tanszék Copyright, 1999 © Szlávi Péter
2
Tartalom Bevezetés I. rész: globális hatékonyság A. Általánosságok
B. Előzetes példák I. rész: globális hatékonyság 1. A végrehajtási idő csökkentése 1.1 A ciklus lépés-számának csökkentése 1.2 A ciklus egyszeri végrehajtási idejének csökkentése 2. A helyfoglalás csökkentése 2.1 A sorozatok elemszámának csökkentése 2.2 A sorozatelem helyfoglalásának csökkentése 2.3 A programkód méretének csökkentése Hatékonyság 2
3
Tartalom II. rész: lokális hatékonyság 3. Bonyolultság csökkentése
1. A végrehajtási idő csökkentése 2. A helyfoglalás csökkentése Hatékonyság 2
4
2. A helyfoglalás csökkentése
Alapelv: a tárolt elemek száma vagy egy ele- mének mérete kevesebb legyen! Helyfoglalás= memória (kód+adat) háttértár (kód+adat) 2.1 Sorozatok hosszcsökkentése Sorozat kiküszöbölése Feladat: Az N. K-Fibonacci szám előállítása. Megoldások: a. Változó KF:Tömb(1..N:Egész) KF(1..N):=…az első N előállítása… NKF:=KF(N) Fordítóprogramon mú- lik; legfeljebb lokális… HáttértárMemória Helycsere: idő… Különlges fordítási tech- nika: overlay Hatékonyság 2
5
2. A helyfoglalás csökkentése (folytatás)
b. Változó KF:SorTömb(K,Egész)[K-elemű!] KF:=…az első K előállítása… Ciklus i=K+1-től N-ig NKF:=i=1..KKF(i) nemKell:=Sorból(KF) Sorba(KF,NKF) Ciklus vége Hatékonyság 2
6
2. A helyfoglalás csökkentése (folytatás)
Feladat: Egy nyúlpopuláció adatait a korcsoportelosz- lásával tároljuk. Ismert: az E éves nyúlnak átlago- san S(E) utódja születik; és H(E) valószínűséggel pusztul el. Adjuk meg az éves korcsoportváltozást! Megoldások: Változó S,H:Tömb(1..N:Valós) X:Tömb(1..N:Egész) a. Y:Tömb(1..N:Egész) S:Valós [az összegzéshez] Y(1):=Egész(Összegzés(X(i)*S(i) i=1..N) Y(2..N):=Másolás(Egész(X(i)*(1-H(i))) i=1..N-1) X:=Y Születési, halálozási ráták Korcsoporteloszlás N: a korcsoportok száma =N*Méret(Egész)+1*Méret(Valós) Hatékonyság 2
7
2. A helyfoglalás csökkentése (folytatás)
Probléma: egészben valós összegzés!!! b. Változó Y:Tömb(1..N:Egész) Y(1):=Egész(X(N)*S(N)) Ciklus i=1-től N-1-ig Y(i+1):=Egész(X(i)*(1-H(i))) Y(1):+Egész(X(i)*S(i)) Ciklus vége X:=Y c. Változó Y:Valós Y:=X(N)*S(N) Ciklus i=N-1-től 1-ig -1-esével X(i+1):=Egész(X(i)*(1-H(i))) Y:+X(i)*S(i) Ciklus vége X(1):=Egész(Y) Kódrövidítés (l ) =N*Méret(Egész) Kivételes eset: X(N)-„be”-számítása =1*Méret(Valós) „Problémás” eset: X(i) fordított kiszá-mítása (:=f(X(i-1)) Hatékonyság 2
8
2. A helyfoglalás csökkentése (folytatás)
2.1.2 Ciklusok összevonása Feladat: Adjuk meg az M mátrix maximális sor- összegű sorát! Megoldások: Változó m:Tömb(1..N,1..N:Valós) a. s:Tömb(1..N:Valós) s(1..N):=Másolás( Összegzés(M(i,1..N)) i=1..N) maxi:=MaxKiválasztás(s,) b. Változó s:Valós [összegzéshez] maxi:=MaxKiválasztás(i i=1..N,) Az „1.2.5 Sorozatok előfeldolgozása” módszer ellentéte. :INxINIL, rendezés (i,j):=Összegzés(Xi) Összegzés(Xj) Hatékonyság 2
9
2. A helyfoglalás csökkentése (folytatás)
Output: melyik melyikkel 2.1.3 Hézagosan kitöltött struktúrák Feladat: Egy N-atomos szénhidrogén molekulát vizsgálunk. Adjuk meg, mely szén atomok melyekkel vannak kötésben! Megoldások: Változó Db:Egész köt:Tömb(1..MaxN,1..2:Egész) a. Változó m:Tömb(1..N,1..N:Logikai) (Db,köt):=Kiválogatás((i,j) i=1..N-1,j=i+1..N, m(·)=Igaz) b. Változó m:Tömb(1..N*(N+1) Div 2: Logikai) [azaz -mátrixként ábrázolni] Szénatom Szénhidrogén molekula N2*Méret(Logikai) Ritkamátrix: Méret(Logikai)* *N*(N+1) Div 2 Hatékonyság 2
10
2. A helyfoglalás csökkentése (folytatás)
Szénhidrogén molekula c. Változó m:Tömb(1..N:Lista(1..N)) [melyik C-atom melyekkel van kötésben] mivel a C-atom kötésszáma4, ezért a listák legfeljebb 4-eleműek. (Db,köt):=Kiválogatás( (i,ElemÉrték(m(i),j)) j=1..Hossz(m(i)),i=1..N-1, ElemÉrték(m(i))>i) Az ElemÉrték(m(i),j) az m(i) lista j. elemét szimbolizálja. =N*Méret(Lista(1..N)) N*(Méret(Fej)+4*(Méret(Egész)+ Méret(Mutató))) [láncolt] N*4*Méret(Egész) [folytonos] Szimmetria miatt Hatékonyság 2
11
2. A helyfoglalás csökkentése (folytatás)
d. Változó m:Tömb(1..K,1..2:1..N) [kötés: mely párok között] Db:=N-1 köt:=Másolás(m(i) i=1..K) L. még a tömb-ábrázolás témakörben: „Ritkamátrixok” ~N*2*Méret(1..N) K: egy N db C-atomos molekulában a kötések száma N-1 és 4*N között lehet. Hatékonyság 2
12
2. A helyfoglalás csökkentése (folytatás)
Feladat: Képek raszteres ábrázolása… Megoldások: a. Típus TKép=Tömb(1..MaxX,1..MaxY:TSzín) b. Típus TKép=Tömb(1..MaxY:Lista(TPászta)) TPászta=Rekord(szín:TSzín, hossz:Egész) [k:TKép i[1..MaxY]:MaxX=k(i)-beli pászták összege] Hatékonyság 2
13
2. A helyfoglalás csökkentése (folytatás)
2.1.4 Speciális szerkezetű sorozatok Feladat: … l. a „tömb-ábrázolás” témakörben: „speciális szerkezetű mátrixok”… (Diagonális, háromszög, tridiagonális, Hänkel-, Toeplitz- stb.- mátrixok.) Feladat: Leslie-mátrix az alábbi probléma szokásos leírását jelenti. Adott egy pl. egérpopuláció szüle- tési és túlélési rátái korcsoportonként. Határozzuk meg a köv. év korcsoporteloszlását az akt. alapján. Megoldás: Típus TKorcsop=Tömb(1..N:Valós) TLeslie=Tömb(1..N,1..N:Valós) s1 s2 s3 … sn-1 sn t2 0 0 … t3 0 … 0 0 … … … … … … … tn 0 Hatékonyság 2
14
2. A helyfoglalás csökkentése (folytatás)
Változó E:Tkorcsop [kezdő korcsoporteloszlás] a. Változó LM:TLeslie U:TKorcsop U:=LM*E [mátrix-vektor szorzás] E:=U b. Típus TLeslie=Rekord( s:Tömb(1..N:Valós), t:Tömb(2..N:Valós)) Változó LM:TLeslie U:TKorcsop S:Valós [összegzéshez] U(1):=Összegzés(LM.s(i)*E(i) i=1..N) U(2..N):=Másolás(LM.t(i)*E(i-1) i=2..N) E:=U =N2*Méret(Valós) =N*Méret(Valós) =(N+N-1)*Méret(Valós) =N*Méret(Valós) =1*Méret(Valós) Hatékonyság 2
15
2. A helyfoglalás csökkentése (folytatás)
=(N+N-1)*Méret(Valós) c. Változó LM:TLeslie E1:Valós E1:=LM.s(1)*E(1) Ciklus i=N-től 2-ig -1-esével E1:+LM.s(i)*E(i) E(i):=LM.t(i)*E(i-1) Ciklus vége E(1):=E1 =1*Méret(Valós) Hatékonyság 2
16
2. A helyfoglalás csökkentése (folytatás)
2.1.5 Adatterület megosztása Feladat: … l. a „sorozatok ábrázolása” témakörben: láncolt ábrázolás, maximált össz-elemszámú dupla verem… Hatékonyság 2
17
2. A helyfoglalás csökkentése (folytatás)
2.2 A sorozat egy elemének méretcsökkentése Alapelv: alkalmasan szűk reprezentáció… 2.2.1 Redundáns mezők elhagyása Feladat: Egy személyi adatnyilvántartásban a követ- kező adatokat tároljuk: név, személyiszám, születé- si idő (év, hó, nap). Listázzuk ki a nyilvántartást! Megoldások: a. Típus TSzemély=Rekord(név:Szöveg(30) szsz:Szöveg(11) szül:TDátum) TDátum=Rekord(év:Egész hó:Szöveg(10) nap:Egész) … Ciklus amíg nem Vége?(f) Olvas(f,szem); Ki:szem Ciklus vége … Méret(TSzemély)= =58 Méret(TDátum)=2*2+11=15 Hatékonyság 2
18
2. A helyfoglalás csökkentése (folytatás)
b. Típus TSzemély=Rekord(név:Szöveg(30) szsz:Szöveg(11)) TDátum=Rekord(év:Egész hó:Szöveg(10) nap:Egész) Függvény szül(Konstans szsz:Szöveg(11)): TDátum Konstans HónapNév:Tömb(1..12:Szöveg(10) (’Január’,’Február’,…) szül:=TDátum(Egész(Része(szsz,2,3)), HónapNév(Egész(Része(szsz,4,5))), Egész(Része(szsz,6,7))) Függvény vége. … Ciklus amíg nem Vége?(f) Olvas(f,szem) Ki: szem.név, szem.szsz, szül(szem.szsz) Ciklus vége … Méret(TSzemély)=31+12=43 Hatékonyság 2
19
2. A helyfoglalás csökkentése (folytatás)
2.2.2 Az adatelemek kódolása Feladat: Egy személyi adatnyilvántartásban a követ- kező adatokat tároljuk: név, születési idő (év, hó, nap). Listázzuk ki a nyilvántartást! Megoldások: a. Típus TSzemély=Rekord(név:Szöveg(30) szül:TDátum) TDátum=Rekord(év:Egész hó:Szöveg(10) nap:Egész) … Ciklus amíg nem Vége?(f) Olvas(f,szem) Ki:szem Ciklus vége … Méret(TSzemély)=31+15=46 Méret(TDátum)=2*2+11=15 Hatékonyság 2
20
2. A helyfoglalás csökkentése (folytatás)
b. Típus TSzemély=Rekord(név:Szöveg(30) szül:TDátum) TDátum=Rekord(év,hó,nap:Egész) Konstans HónapNév:Tömb(1..12:Szöveg(10) (’Január’,’Február’,…) Méret(TSzemély)=31+6=37 Méret(TDátum)=3*2=6 … Ciklus amíg nem Vége?(f) Olvas(f,szem) Ki: szem.név, szem.szül.év, HónapNév(szem.szül.hó), szem.szül.nap Ciklus vége … Hatékonyság 2
21
2. A helyfoglalás csökkentése (folytatás)
c. Típus TSzemély=Rekord(név:Szöveg(30) szül:TTDátum) TTDátum=TömörRekord(év: , hó:1..12, nap:1..31) Konstans HónapNév:Tömb(1..12:Szöveg(10) (’Január’,’Február’,…) Függvény TTDátum2TDátum (Konstans d:TTDátum):TDátum TTDátum2TDátum:=… Függvény vége. Méret(TSzemély)=31+2=33 Méret(TTDátum)=7+4+5=16 bit … Ciklus amíg nem Vége?(f) Olvas(f,szem); tszül:=TTDátum2TDátum(szem.szül) Ki: szem.név, tszül.év, HónapNév(tszül.hó), tszül.nap Ciklus vége … Hatékonyság 2
22
2. A helyfoglalás csökkentése (folytatás)
Feladat: … l. még a „Szövegfeldolgozás” témakörbeli tömörábrázolás rész feladatait. Hatékonyság 2
23
2. A helyfoglalás csökkentése (folytatás)
2.3 A programkód méretének csökkentése Alapelv: a „józan” programépítése elvek be- tartása. Azaz: A feladat részfeladatainak Eljárásokra / Függ- vények /…-re bontása; ezeknek megfelelő nyel- vi implementálás. Ciklusok összevonása – általában nem sok tényleges előnnyel jár,ui. ha a ciklusmagok mérete előnyössé tenné, ak- kor úgyis eljárásban fogalmazódnának meg. Hatékonyság 2
24
2. A helyfoglalás csökkentése (folytatás)
Programkód adattá transzformálása – a sok, „konstanson” alapuló tevékenységlánc (pl. tá- jékoztató, menü) konstans adatokká és rajtuk operáló kevésszámú műveletté „tipizálása”. Feladat: Többlapos tájékoztató kiírása. Megoldások: a. Procedure Tajekoztato; Var c:Char; Begin Writeln(’Ez a program arra jó,’); … {és még sok száz hasonló sor, lapozást szervező ReadKey-ekkel megtűzdelve} End; Hatékonyság 2
25
2. A helyfoglalás csökkentése (folytatás)
b. Procedure Tajekoztato; Const BekDb=???; STaj:Array[1..BekDb] of String= (’Ez a program arra jó,…’, {és még sok tucat hasonló konstans bekezdés} …); Var c:Char; sorDb,i:Integer; Procedure KiBekezdes(Const b:String); Begin {… b kiírása + lapozás …} End; Begin sorDb:=0; {kiírt sorok száma} For i:=1 to BekDb do Begin KiBekezdés(STaj[i]); End; End; További előnyök: Bonyolultság csökkenés Biztonságosság Könnyű javíthatóság (pl. képsorméret-, szövegmó-dosulás…) Hatékonyság 2
26
2. A helyfoglalás csökkentése (folytatás)
Változások c. Procedure Tajekoztato; Const tajFNev=???; Var t:Text; {szövegfile-ban a tájékoz tató szövege} Var c:Char; sorDb,i:Integer; siker:Boolean; Procedure KiBekezdes(Const b:String); Begin {… b kiírása + lapozás …} End; Begin sorDb:=0; siker:=FileNyitás(f,tajFNev); If siker then Begin While not Eof(f) do Begin Readln(f,sor); KiBekezdés(sor); End; End; Egyébként is meglevő eljárás További előny: Univerzalitás Hatékonyság 2
27
2. A helyfoglalás csökkentése (folytatás)
Feladat: Ablakozás… Megoldások: a. … Window(4,4,46,16); SetBkColor(Black); ClrScr; Window(5,5,45,15); SetBkColor(White); SetColor(4); ClrScr; Writeln(’Ablakcím’:24); {… ablakhasználat …} {ahány ablak, annyi efféle sok sor} Keretszín Ablak-koordináták ((45-5) Div 2)+(címhossz Div 2) Lapszín Hatékonyság 2
28
2. A helyfoglalás csökkentése (folytatás)
b. Type TSzin=?; TMem=?; TAblak=Record bfx,bfy,jax,jay:Integer; cim:String[30]; kszin,bszin,lszin:TSzin; mentes:^TMem; kx,ky:Byte; End; Procedure AblakNyit(Var a:TAblak); Begin {… háttérmentés …} With a do Begin Window(bfx,bfy,jax,jay); SetBkColor(kszin); ClrScr; Writeln(cim:…); End;… Akt. ablak kurzor Ablakmérettől függő formula Hatékonyság 2
29
2. A helyfoglalás csökkentése (folytatás)
Procedure AblakZar(Const a:TAblak); Begin {… háttér visszaírása …} End; Procedure ABlakbaIr(Var a:TAblak; Const s:String); Begin {… ablakhasználat; kx,ky …} End; {ahány ablak, annyi efféle sok sor:} Const a1:TAblak=( bfx:=?;bfy:=?;jax:=?;jay:=?; cim:?;kszin:?;bszin:?; lszin:?;kx:1;ky:1); Egy próba. (LZW) Letöltés. Hatékonyság 2
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.