Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

2006.11.18 Hatékonyság 2. előadás.

Hasonló előadás


Az előadások a következő témára: "2006.11.18 Hatékonyság 2. előadás."— Előadás másolata:

1 Hatékonyság 2. előadás

2 2. A helyfoglalás csökkentése
Alapelv: a tárolt elemek száma vagy egy elemé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) Zsakó László: Hatékonyság 2 :29

3 2. A helyfoglalás csökkentése
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 Zsakó László: Hatékonyság 2 :29

4 2. A helyfoglalás csökkentése
Feladat: Egy nyúlpopuláció adatait a korcsoporteloszlásával tá- roljuk (X tömb). Ismert: az E éves nyúlnak átlagosan S(E) utódja születik; és H(E) valószínűséggel pusztul el. Adjuk meg az éves korcsoportváltozást! 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):=Összegzés(X(i)*S(i) i=1..N) Y(2..N):=Másolás(X(i)*(1-H(i)) i=1..N-1) X:=Y Zsakó László: Hatékonyság 2 :29

5 2. A helyfoglalás csökkentése
b. Változó Y:Tömb(1..N:Egész) Y(1):=X(N)*S(N) Ciklus i=1-től N-1-ig Y(i+1):=X(i)*(1-H(i)); Y(1):=Y(1)+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):=X(i)*(1-H(i)); Y:=Y+X(i)*S(i) Ciklus vége X(1):=Y Zsakó László: Hatékonyság 2 :29

6 2. A helyfoglalás csökkentése
2.1.2 Ciklusok összevonása Feladat: Adjuk meg az M mátrix maximális sorösszegű sorát! Megoldások: a. Változó 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,sm:Valós sm:=Összegzés(M(1,1..N)); ma:=1 Ciklus i=2-től N-i s:=Összegzés(M(i,1..N)) Ha s>sm akkor sm:=s; ma:=i Ciklus vége Zsakó László: Hatékonyság 2 :29

7 2. A helyfoglalás csökkentése
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énatomok 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) Változó m:Tömb(1..N*(N+1) Div 2:Logikai) Háromszögmátrix! Zsakó László: Hatékonyság 2 :29

8 2. A helyfoglalás csökkentése
c. Változó m:Tömb(1..N:Tömb(1..4)) [melyik C-atom melyekkel van kötésben] mivel a C-atom kötésszáma4, ezért legfeljebb 4-elemű dinamikus tömbbel dolgozhatunk. (Db,köt):=Kiválogatás((i,m(i,j)) ahol 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. Szimmetria miatt Zsakó László: Hatékonyság 2 :29

9 2. A helyfoglalás csökkentése
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ásd még a tömb-ábrázolás témakörben: „Ritkamátrixok”! K: egy N db C-atomos molekulában a kötések száma N-1 és 4*N között lehet. Zsakó László: Hatékonyság 2 :29

10     
C-atomos példa – a hoz      C1 C2 C5 C4 C3 b. Kötés-háromszögmátrix c. Kötés-lista d. Atompár-vektor . h I 5 1 2 3 4 a. Kötés-mátrix . h I i 1:5 2:5 3:5 4:5 5:1,2,3,4 1 5 2 3 4 (1,5) (2,5) (3,5) (4,5) Zsakó László: Hatékonyság 2 :29

11 2. A helyfoglalás csökkentése
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:Sorozat(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] Zsakó László: Hatékonyság 2 :29

12 2. A helyfoglalás csökkentése
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ületési és túlélési rátái korcsoportonként. Határozzuk meg a következő év korcsoporteloszlását az aktuális alapján. Megoldás: Típus TKorcsop=Tömb(1..N:Valós) TLeslie=Tömb(1..N,1..N:Valós) Zsakó László: Hatékonyság 2 :29

13 2. A helyfoglalás csökkentése
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 Zsakó László: Hatékonyság 2 :29

14 2. A helyfoglalás csökkentése
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:=E1+LM.s(i)*E(i) E(i):=LM.t(i)*E(i-1) Ciklus vége E(1):=E1 Zsakó László: Hatékonyság 2 :29

15 2. A helyfoglalás csökkentése
2.1.5 Adatterület megosztása Feladat: … l. a „sorozatok ábrázolása” témakörben: láncolt ábrázolás, maximált összelemszámú dupla verem… Két háromszögmátrix egy mátrixban. Zsakó László: Hatékonyság 2 :29

16 2. A helyfoglalás csökkentése
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övetkező 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) Zsakó László: Hatékonyság 2 :29

17 2. A helyfoglalás csökkentése
2.2.1 Redundáns mezők elhagyása Feladat: Egy személyi adatnyilvántartásban a következő 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 … Zsakó László: Hatékonyság 2 :29

18 2. A helyfoglalás csökkentése
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(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(szsz[2..3])), HónapNév(Egész(szsz[4..5])), Egész(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 … Zsakó László: Hatékonyság 2 :29

19 2. A helyfoglalás csökkentése
2.2.2 Az adatelemek kódolása Feladat: Egy személyi adatnyilvántartásban a következő 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 … Zsakó László: Hatékonyság 2 :29

20 2. A helyfoglalás csökkentése
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’,…)) 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 … Zsakó László: Hatékonyság 2 :29

21 2. A helyfoglalás csökkentése
2.3 A programkód méretének csökkentése Alapelv: a „józan” programépítése elvek betartása. Azaz: A feladat részfeladatainak Eljárásokra / Függvények /…-re bontása; ezeknek megfelelő nyelvi implementálás. Ciklusok összevonása – általában nem sok tényleges előnnyel jár, ugyanis, ha a ciklusmagok mérete előnyössé tenné, akkor úgyis eljárásban fogalmazódnának meg. Zsakó László: Hatékonyság 2 :29

22 2. A helyfoglalás csökkentése
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. Tájékoztató: Ki(’Ez a program arra jó,’); … {és még sok száz hasonló sor, lapozást szervező utasításokkal megtűzdelve} Eljárás vége. Zsakó László: Hatékonyság 2 :29

23 2. A helyfoglalás csökkentése
b. Tájékoztató: Konstans BekDb=???; STaj:Tömb(1..BekDb,szöveg)= (’Ez a program arra jó,…’, {és még sok tucat hasonló konstans bekezdés} …); sorDb:=0; {kiírt sorok száma} Ciklus i=1-től BekDb-ig Ki: Bekezdés(STaj[i]) Ciklus vége Eljárás vége. 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…) Zsakó László: Hatékonyság 2 :29

24 3. A bonyolultság csökkentése
3. A bonyolultság csökkentése Kérdés: Mi a bonyolultság? Szerkezeti bonyolultság címen kétféle dologról beszélhetünk: az algoritmus bonyolultságáról, valamint az adatszerkezet bonyolultságáról. Az algoritmus bonyolultsága újabb két tényezőből áll össze: a szerkezet bonyolultságából és a kifejezés bonyolultságából. Zsakó László: Hatékonyság 2 :29

25 3. A bonyolultság csökkentése
Definíció: Egy programgráf ciklikus bonyolultsága az élei számából kivonva a csúcsai számát. Példa: algoritmus ciklikus bonyolultsága Ha p akkor f Ha p és q akkor f Ha p akkor Ha q akkor f 3 Zsakó László: Hatékonyság 2 :29

26 3. A bonyolultság csökkentése
Definíció: Egy programgráf módosított ciklikus bonyolult- sága egy számpár: a ciklikus bonyolultsági szám, valamint a cik- likus bonyolultág megnövelve a feltételekben szereplő diszjunk- ciók és konjunkciók (vagy-műveletek és és-műveletek) számával. Példa: algoritmus ciklikus bonyolultsága Ha p akkor f ,2 Ha p és q akkor f ,3 Ha p akkor Ha q akkor f 3,3 De problémás: Ha p és q akkor f ,3 r:=p és q; Ha r akkor f 2,2 Zsakó László: Hatékonyság 2 :29

27 3. A bonyolultság csökkentése
Definíció: Egy programgráf mélységi bonyolultságát a következőképpen számíthatjuk ki: Vegyük a programgráf elemi struktúráit (elágazások, ciklusok), rendeljük hozzájuk azt a kitevőjű kettőhatványt, ahány magasabbrendű struktúra belsejében vannak, majd adjuk össze ezeket a számokat. Definíció: Egy programgráf absztrakciós bonyolultságát a következőképpen számíthatjuk ki: Vegyük az eljárások számát + az egyes eljárások mélységi bonyolultságát! Zsakó László: Hatékonyság 2 :29

28 3. A bonyolultság csökkentése
A kifejezés bonyolultságát a programfüggvény, mint kifejezés bonyolultsága, illetve a program szövegében szereplő kifejezések bonyolultsága adhatja meg. A kifejezések bonyolultságát legegyszerűbb esetben a bennük szereplő műveletek számával adhatjuk meg: • az aritmetikai és logikai műveletek, • a függvényhívások, • az értékmozgatások (értékadás, beolvasás, kiírás) és • az eljáráshívások. Zsakó László: Hatékonyság 2 :29

29 3. A bonyolultság csökkentése
A kivételes eset kiküszöbölése Feladat: Egy szövegben határozzuk meg a szavak számát! Szavak_száma(Mondat,Sdb): Sdb:=0; N:=Hossz(Mondat) Ciklus i=1-től N-1-ig Ha Mondat(i)=" " és Mondat(i+1)≠" " vagy i=1 és Mondat(i)≠" " akkor Sdb:=Sdb+1 Ciklus vége Eljárás vége. Kivételes eset: az i=1 csak egyszer lehet igaz, a ciklus első lépésében. Zsakó László: Hatékonyság 2 :29

30 3. A bonyolultság csökkentése
Szavak_száma(Mondat,Sdb): Mondat:=elejére(" ",Mondat) Sdb:=0; N:=hossz(Mondat) Ciklus i=1-től N-1-ig Ha Mondat(i)=" " és Mondat(i+1)≠" „ akkor Sdb:=Sdb+1 Ciklus vége Eljárás vége. A módosított ciklikus bonyolultság csökken! Zsakó László: Hatékonyság 2 :29

31 3. A bonyolultság csökkentése
Funkciók elhagyása Feladat: Rendezett sorozatok összefésülése! Összefuttatás(N,A,M,B,C): A(N+1):=+∞; B(M+1):=+∞; i:=1; j:=1; k:=0 Ciklus amíg i<N+1 vagy j<M+1 k:=k+1 Elágazás A(i)<B(j) esetén C(k):=A(i); i:=i+1 A(i)=B(j) esetén C(k):=A(i); i:=i+1; j:=j+1 A(i)>B(j) esetén C(k):=B(j); j:=j+1 Elágazás vége Ciklus vége Eljárás vége. Zsakó László: Hatékonyság 2 :29

32 3. A bonyolultság csökkentése
Ha nincs A- és B-beli közötti egyenlőség, akkor az elágazás egyszerűsíthető! Összefuttatás(N,A,M,B,C): A(N+1):=+∞; B(M+1):=+∞; i:=1; j:=1; k:=0 Ciklus amíg i<N+1 vagy j<M+1 k:=k+1 Ha A(i)<B(j) akkor C(k):=A(i); i:=i+1 különben C(k):=B(j); j:=j+1 Ciklus vége Eljárás vége. Zsakó László: Hatékonyság 2 :29

33 3. A bonyolultság csökkentése
Funkciók szétválasztása A programozási tételek összeépítését sokszor használjuk futási idő, illetve helyfoglalás csökkentésére. Ez azonban azzal jár, hogy a bonyolultság növekszik, mint pl. a maximumkiválogatásban. Maximumok(N,A,DB,S): MX:=A(1); DB:=1; S(DB):=1 Ciklus i=2-től N-ig Ha A(i)>MX akkor DB:=0; MX:=A(i) Ha A(i)=MX akkor DB:=DB+1; S(DB):=i Ciklus vége Eljárás vége. Zsakó László: Hatékonyság 2 :29

34 3. A bonyolultság csökkentése
Ha nem vonjuk össze a maximumkiválasztás és a kiválogatás tételeket, akkor egyszerűbb megoldást kapunk: Maximumok(N,A,DB,S): MX:=A(1); DB:=0 Ciklus i=2-től N-ig Ha A(i)>MX akkor MX:=A(i) Ciklus vége Ciklus i=1-től N-ig Ha A(i)=MX akkor DB:=DB+1; S(DB):=i Eljárás vége. Itt a logikai bonyolultság úgy csökken, hogy a szerkezeti bonyolultság nő. Zsakó László: Hatékonyság 2 :29

35 3. A bonyolultság csökkentése
Fiktív kezdőértékadás Algoritmusok egy részének bonyolultságát az okozza, hogy valamely változók kezdőértékét az algoritmus belsejében határozzuk meg. Feltételes mamimumkiválasztásnál az első maximumot kell megkeresni. Keresésnél figyelni kell arra, nehogy a sorozat végén túlmenjünk. Zsakó László: Hatékonyság 2 :29

36 3. A bonyolultság csökkentése
4.2. Az adatszerkezet bonyolultsága Az adatszerkezet, az adattípusok bonyolultságát is kétféle szempont szerint vizsgálhatjuk. Egyrészt nézhetjük a struktúra bonyolultságát, másrészt pedig a típus műveleteinek bonyolultságát. Egy adattípus strukturális bonyolultsága a típus definiálásában szereplő típuskonstrukciós eszközök száma. Zsakó László: Hatékonyság 2 :29

37 3. A bonyolultság csökkentése
Egy adattípus mélységi bonyolultsága a következőképpen számítható ki: Vegyük az adattípus definiáláshoz felhasznált típuskonstrukciós eszközöket, rendeljük hozzájuk azt a kitevőjű kettőhatványt, ahány magasabbrendű struktúra belsejében vannak, majd adjuk össze ezeket a számokat. Egy adattípus absztrakciós bonyolultsága a következőképpen számítható ki: Vegyük a résztípusai számát + az egyes résztípusok mélységi bonyolultságát! Egy adattípus hivatkozási bonyolultsága a leghosszabb hivatkozási mélység, melyet a felhasználónak használnia kell. Egy típus műveleti bonyolultsága a típus független, egymással ki nem fejezhető műveletei száma. Zsakó László: Hatékonyság 2 :29

38 Hatékonyság 2. előadás vége


Letölteni ppt "2006.11.18 Hatékonyság 2. előadás."

Hasonló előadás


Google Hirdetések