Hatkonysg 2 elads 2 A helyfoglals cskkentse Alapelv

  • Slides: 45
Download presentation
Hatékonyság 2. előadás

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

2. A helyfoglalás csökkentése Alapelv: a tárolt elemek száma vagy elemének mérete kevesebb legyen!

2. A helyfoglalás csökkentése Alapelv: a tárolt elemek száma vagy 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 2. 1. 1 Sorozat kiküszöbölése Feladat: Az N. K-Fibonacci szám előállítása. Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 2/44

2. A helyfoglalás csökkentése Megoldások: a. Változó KF: Tömb(1. . N: Egész) KF: =…az

2. A helyfoglalás csökkentése Megoldások: a. Változó KF: Tömb(1. . N: Egész) KF: =…az első K előállítása… Ciklus i=K+1 -től N-ig KF(i): = i-k. . i-1 KF(j) Ciklus vége Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 3/44

2. A helyfoglalás csökkentése b. Változó KF: Sor. Tömb(K, Egész)[K-elemű!] KF: =…az első K

2. A helyfoglalás csökkentése b. Változó KF: Sor. Tö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) Sorból(KF, nem. Kell) Sorba(KF, NKF) Ciklus vége Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 4/44

2. A helyfoglalás csökkentése Feladat: Egy nyúlpopuláció adatait a korcsoporteloszlásával tá-roljuk (X tömb). Ismert:

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 2022. 01. 06. 16: 26 5/44

2. A helyfoglalás csökkentése a. Változó Y: Tömb(1. . N: Egész) Y(1): =0 Ciklus

2. A helyfoglalás csökkentése a. Változó Y: Tömb(1. . N: Egész) Y(1): =0 Ciklus i=1 -től N-1 -ig Y(1): =Y(1)+X(i)*S(i) Ciklus vége Ciklus i=1 -től N-1 -ig Y(i+1): =X(i)*(1 -H(i)) Ciklus vége X: =Y Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 6/44

2. A helyfoglalás csökkentése b. Változó Y: Tömb(1. . N: Egész) Y(1): =X(N)*S(N) Ciklus

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 2022. 01. 06. 16: 26 7/44

2. A helyfoglalás csökkentése 2. 1. 2 Ciklusok összevonása Feladat: Adjuk meg az M

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) Ciklus i=1 -től N-ig s(i): =Összegzés(M(i, 1. . N)) Ciklus vége ma: =1 Ciklus i=2 -től N-ig Ha s(ma)<s(i) akkor ma: =i Ciklus vége Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 8/44

2. A helyfoglalás csökkentése 2. 1. 2 Ciklusok összevonása b. Változó s, sm: Valós

2. A helyfoglalás csökkentése 2. 1. 2 Ciklusok összevonása b. Változó s, sm: Valós sm: =Összegzés(M(1, 1. . N)); ma: =1 Ciklus i=2 -től N-ig s: =Összegzés(M(i, 1. . N)) Ha s>sm akkor sm: =s; ma: =i Ciklus vége A ciklusok összevonásával a közöttük levő, információátadásra szolgáló tömb megszüntethető. Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 9/44

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

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 (csak szénatomokat vizsgálunk)! Megoldások: Változó Db: Egész köt: Tömb(1. . Max. N, 1. . 2: Egész) Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 10/44

2. A helyfoglalás csökkentése 2. 1. 3 Hézagosan kitöltött struktúrák a. Változó m: Tömb(1.

2. A helyfoglalás csökkentése 2. 1. 3 Hézagosan kitöltött struktúrák 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) Db: =0 Ciklus i=1 -től N-1 -ig Ciklus j=i+1 -től N-ig Ha m(i, j) akkor Db: =Db+1 köt(Db, 1): =i; köt(Db, 2): =j Ciklus vége C 1. h h h i Ciklus vége h. h h i C 4 C 5 C 2 C 3 Zsakó László: Hatékonyság 2 h h. h i h h h. i i i. 2022. 01. 06. 16: 26 11/44

2. A helyfoglalás csökkentése 2. 1. 3 Hézagosan kitöltött struktúrák A mátrix szimmetrikus, elég

2. A helyfoglalás csökkentése 2. 1. 3 Hézagosan kitöltött struktúrák A mátrix szimmetrikus, elég az egyik felét tárolni (lásd speciális szerkezetű tömbök)! b. Változó m: Tömb(1. . N*(N+1) Div 2: Logikai) Db: =0 Ciklus i=1 -től N-1 -ig Ciklus j=i+1 -től N-ig Ha m(cím(i, j)) akkor Db: =Db+1; köt(Db, 1): =i köt(Db, 2): =j Ciklus vége C 1. h h h i Ciklus vége. . h h i C 4 C 5 C 2 C 3 Zsakó László: Hatékonyság 2 . . . h i. . 2022. 01. 06. 16: 26 12/44

2. A helyfoglalás csökkentése c. Változó m: Tömb(1. . N: Tömb(1. . 4)) [melyik

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 kö elemű dinamikus tömbbel dolgozhatunk. (Db, köt): =Kiválogatás((i, m(i, j)) vál ahol j=1. . Hossz(m(i)), i=1. . N-1, ElemÉrték(m(i))>i) C 1 Érték C 4 C 5 C 3 C 2 . h c. h h i h h h. i 5 i i → 5 5 i 1 2 3 4. Zsakó László: Hatékonyság 2 Szimmetria miatt 2022. 01. 06. 16: 26 13/44

2. A helyfoglalás csökkentése c. Változó m: Tömb(1. . N: Tömb(1. . 4)) [melyik

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] Db: =0 Ciklus i=1 -től N-1 -ig Ciklus j=1 -től Hossz(m(i))-ig Ha m(i, j)>i akkor Db: =Db+1; köt(Db, 1): =i köt(Db, 2): =j Ciklus vége C 1 C 4 C 5 C 2 C 3 Zsakó László: Hatékonyság 2 5 5 1 2 3 4 2022. 01. 06. 16: 26 14/44

2. A helyfoglalás csökkentése d. Változó m: Tömb(1. . K, 1. . 2: 1.

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] K: egy N db C-atomos molekulában a kötések száma N-1 és 4*N között lehet. köt: =Másolás(m(i) i=1. . K) lá Lásd még a tömb-ábrázolás témakörben: „Ritkamátrixok”! e. C 1 C 4 C 5 C 2 C 3 Zsakó László: Hatékonyság 2 1 2 3 4 5 5 2022. 01. 06. 16: 26 15/44

C-atomos példa – a 2. 1. 3 -hoz C 1 b. C 5 C

C-atomos példa – a 2. 1. 3 -hoz C 1 b. C 5 C 4 C 2 C 3 h. h h i h h h. i h h. . . . h h h. . i i. c. Kötés-lista 5 a. Kötés-mátrix. h h h i . h Kötés-háromszögmátrix . . i i. 5 5 5 1 2 3 4 d. Atompár-vektor 1 2 3 4 Zsakó László: Hatékonyság 2 5 5 1: 5 2: 5 3: 5 4: 5 5: 1, 2, 3, 4 (1, 5) (2, 5) (3, 5) (4, 5) 2022. 01. 06. 16: 26 16/44

2. A helyfoglalás csökkentése Feladat: Képek raszteres ábrázolása… Megoldások: a. Típus TKép=Tömb(1. . Max.

2. A helyfoglalás csökkentése Feladat: Képek raszteres ábrázolása… Megoldások: a. Típus TKép=Tömb(1. . Max. X, 1. . Max. Y: TSzín) PPPPP PPFFFF FFFPPPFFFF Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 17/44

2. A helyfoglalás csökkentése Feladat: Képek raszteres ábrázolása… Megoldások: b. Típus TKép=Tömb(1. . Max.

2. A helyfoglalás csökkentése Feladat: Képek raszteres ábrázolása… Megoldások: b. Típus TKép=Tömb(1. . Max. Y: Sorozat(TPászta)) TPászta=Rekord(szín: TSzín, hossz: Egész) [k: TKép i [1. . Max. Y]: Max. X=k(i)-beli pászták összege] PPPPP PPFFFF FFFPPPFFFF → (P, 10) (P, 2), (F, 8) (F, 3), (P, 3), (F, 4) Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 26 18/44

2. A helyfoglalás csökkentése 2. 1. 4 Speciális szerkezetű sorozatok Feladat: … l. a

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. ) Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 19/44

2. A helyfoglalás csökkentése 2. 1. 5 Adatterület megosztása Megosztás a terület kitöltésében: Két

2. A helyfoglalás csökkentése 2. 1. 5 Adatterület megosztása Megosztás a terület kitöltésében: Két háromszögmátrix egy mátrixban. Szétválogatás egy tömbbe (elölről és hátulról). Lesz majd: két verem egy tömbben. Megosztás időben (a korábbi elfelejtésével): Helyben kiválogatás, helyben szétválogatás. . Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 20/44

2. A helyfoglalás csökkentése 2. 2 A sorozat egy elemének méretcsökkentése Alapelv: alkalmasan szűk

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 2022. 01. 06. 16: 27 21/44

2. A helyfoglalás csökkentése 2. 2. 1 Redundáns mezők elhagyása Feladat: Egy személyi adatnyilvántartásban

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) Ez 59 byte rekordonként! … Ciklus amíg nem Vége? (f) Olvas(f, szem); Ki: szem Ciklus vége … Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 22/44

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),

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ónap. Név: Tömb(1. . 12: Szöveg(10)= (’Január’, ’Február’, …)) szül: =TDátum(Egész(szsz[2. . 3])), Hónap. Név(Egész(szsz[4. . 5])), Egész(szsz[6. . 7])) Függvény vége. … Ez 41 byte rekordonként! 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 2022. 01. 06. 16: 27 23/44

2. A helyfoglalás csökkentése 2. 2. 2 Az adatelemek kódolása Feladat: Egy személyi adatnyilvántartásban

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) Ez 48 byte rekordonként! … Ciklus amíg nem Vége? (f) Olvas(f, szem) Ki: szem Ciklus vége … Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 24/44

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)

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ónap. Név: Tömb(1. . 12: Szöveg(10) (’Január’, ’Február’, …)) Ez 42 byte rekordonként! … Ciklus amíg nem Vége? (f) Olvas(f, szem) Ki: szem. név, szem. szül. év, Hónap. Név(szem. szül. hó), szem. szül. nap Ciklus vége … Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 25/44

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ési

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ési 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 2022. 01. 06. 16: 27 26/44

2. A helyfoglalás csökkentése Programkód adattá transzformálása – a sok, „konstanson” alapuló tevékenységlánc (pl.

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 2022. 01. 06. 16: 27 27/44

2. A helyfoglalás csökkentése b. Tájékoztató: Konstans Bek. Db=? ? ? ; STaj: Tömb(1.

2. A helyfoglalás csökkentése b. Tájékoztató: Konstans Bek. Db=? ? ? ; STaj: Tömb(1. . Bek. Db, szöveg)= (’Ez a program arra jó, …’, {és még sok tucat hasonló konstans bekezdés} …); sor. Db: =0; {kiírt sorok száma} Ciklus i=1 -től Bek. Db-ig További előnyök: Ki: Bekezdés(STaj[i]) • Bonyolultság csökkenés Ciklus vége • Biztonságosság Eljárás vége. • Könnyű javíthatóság (pl. képsorméret-, szövegmódosulás…) Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 28/44

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:

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 2022. 01. 06. 16: 27 29/44

3. A bonyolultság csökkentése Definíció: Egy programgráf ciklikus bonyolultsága az élei számából kivonva a

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 2 2 3 Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 30/44

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

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 Ha p és q akkor f Ha p akkor Ha q akkor f De problémás: 2, 3 2, 2 2, 3 3, 3 Ha p és q akkor f r: =p és q; Ha r akkor f Zsakó László: Hatékonyság 2 2, 2 2022. 01. 06. 16: 27 31/44

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

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 2022. 01. 06. 16: 27 32/44

3. A bonyolultság csökkentése A kifejezés bonyolultságát a programfüggvény, mint kifejezés bonyolultsága, illetve a

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 2022. 01. 06. 16: 27 33/44

3. A bonyolultság csökkentése 4. 1. 1. A kivételes eset kiküszöbölése Feladat: Egy szövegben

3. A bonyolultság csökkentése 4. 1. 1. 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 2022. 01. 06. 16: 27 34/44

3. A bonyolultság csökkentése Szavak_száma(Mondat, Sdb): Mondat: =elejére(" ", Mondat) Sdb: =0; N: =hossz(Mondat)

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 2022. 01. 06. 16: 27 35/44

3. A bonyolultság csökkentése 4. 1. 2. Funkciók elhagyása Feladat: Rendezett sorozatok összefésülése! Összefuttatás(N,

3. A bonyolultság csökkentése 4. 1. 2. 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 2022. 01. 06. 16: 27 36/44

3. A bonyolultság csökkentése Ha nincs A- és B-beli közötti egyenlőség, akkor az elágazás

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 2022. 01. 06. 16: 27 37/44

3. A bonyolultság csökkentése 4. 1. 3. Funkciók szétválasztása A programozási tételek összeépítését sokszor

3. A bonyolultság csökkentése 4. 1. 3. 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 2022. 01. 06. 16: 27 38/44

3. A bonyolultság csökkentése Ha nem vonjuk össze a maximumkiválasztás és a kiválogatás tételeket,

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 Ciklus vége 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 2022. 01. 06. 16: 27 39/44

3. A bonyolultság csökkentése 4. 1. 4. Fiktív kezdőértékadás Algoritmusok egy részének bonyolultságát az

3. A bonyolultság csökkentése 4. 1. 4. 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. Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 40/44

3. A bonyolultság csökkentése Írjuk ki egy mátrix azon sorainak sorszámát, amelyek sorösszege nagyobb,

3. A bonyolultság csökkentése Írjuk ki egy mátrix azon sorainak sorszámát, amelyek sorösszege nagyobb, mint a szomszédos sorok sorösszege! Ciklus i=1 -től N-ig S: =0 Ciklus j=1 -től M-ig S: =S+A(i, j) Ciklus vége Elágazás i=1 esetén F: =S i=2 esetén E: =S i>2 esetén Ha F<E és E>S akkor Ki: i-1 F: =E; E: =S Elágazás vége Ciklus vége Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 41/44

3. A bonyolultság csökkentése Írjuk ki egy mátrix azon sorainak sorszámát, amelyek sorösszege nagyobb,

3. A bonyolultság csökkentése Írjuk ki egy mátrix azon sorainak sorszámát, amelyek sorösszege nagyobb, mint a szomszédos sorok sorösszege! F: =+∞; E: =+∞ Ciklus i=1 -től N-ig S: =0 Ciklus j=1 -től M-ig S: =S+A(i, j) Ciklus vége Ha F<E és E>S akkor Ki: i-1 F: =E; E: =S Ciklus vége Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 42/44

3. A bonyolultság csökkentése 4. 2. Az adatszerkezet bonyolultsága Az adatszerkezet, az adattípusok bonyolultságát

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. Test=Sorozat(Lap) Egész - 0 Lap=Sorozat(Szakasz) Szakasz=Tömb(1. . 2, Pont) Pont=Rekord(x, y: Valós) - 1 Tömb(1. . N, Egész) - 1 Rekord(db: Egész, Tömb(1. . N, Karakter)) - 2 Test=Sorozat(Lap) - 4 Lap=Sorozat(Szakasz) Szakasz=Tömb(1. . 2, Pont) Pont=Rekord(x, y: Valós) Test=Sorozat(Tömb(1. . 2, Rekord(x, y: Valós))))- 4 Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 43/44

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

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 Zsakó László: Hatékonyság 2 2022. 01. 06. 16: 27 44/44

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

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