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

Hasonló dokumentumok
Hatékonyság 1. előadás

Algoritmizálás és adatmodellezés 2. előadás

Algoritmusok és adatszerkezetek I. 1. előadás

Algoritmizálás, adatmodellezés 1. előadás

Multihalmaz, intervallumhalmaz

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Algoritmizálás és adatmodellezés tanítása 2. előadás

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

A tényleges mérőszám függ az adat méretétől, illetve a feltétel összetettségétől.

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Algoritmizálás, adatmodellezés tanítása 7. előadás

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Algoritmizálás, adatmodellezés tanítása 2. előadás

Algoritmizálás és adatmodellezés tanítása 1. előadás

Programozási alapismeretek 3. előadás

INFORMATIKAI ALAPISMERETEK

Struktúra nélküli adatszerkezetek

Visszalépéses kiválogatás

Adatszerkezetek II. 10. előadás

Algoritmusok és adatszerkezetek I. 2. előadás

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Algoritmusok és adatszerkezetek I. 2. előadás

Láncolt listák Témakörök. Lista alapfogalmak

Az informatika kulcsfogalmai

Amortizációs költségelemzés

Algoritmusok és adatszerkezetek I. 4. előadás

Informatikai tehetséggondozás:

Web-programozó Web-programozó

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

1. Jelölje meg az összes igaz állítást a következők közül!

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Láncolt listák. PPT 2007/2008 tavasz.

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Algoritmizálás, adatmodellezés tanítása 2. előadás

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

Bevezetés a programozásba I.

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

A félév során előkerülő témakörök

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

A C# programozási nyelv alapjai

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Adatszerkezetek 1. Dr. Iványi Péter

Haladó rendezések. PPT 2007/2008 tavasz.

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Bevezetés az informatikába

Adatszerkezetek I. 1. előadás

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Egyszerű programozási tételek

Algoritmizálás és adatmodellezés tanítása 6. előadás

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Algoritmizálás, adatmodellezés 1. előadás

A 2015/2016 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Algoritmizálás, adatmodellezés tanítása 1. előadás

Kombinatorikai algoritmusok

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Programozási tételek. Dr. Iványi Péter

Programozási tételek. PPT 2007/2008 tavasz.

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

OOP. Alapelvek Elek Tibor

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Fibonacci számok. Dinamikus programozással

Érdekes informatika feladatok

Ö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.

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Bevezetés a programozásba I.

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

A PhysioBank adatmegjelenítő szoftvereinek hatékonysága

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Programozási segédlet

Nagy HF u tmutato 2011/2012 II. fe le v

Egyirányban láncolt lista

Komputeralgebra Rendszerek

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Algoritmizálás és adatmodellezés tanítása 3. előadás

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Dinamikus programozás II.

INFORMATIKAI ALAPISMERETEK

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Programozási alapismeretek 1. előadás

5. Rekurzió és iteráció (Rekurzív programok átírása nemrekurzívvá)

Halmaz típus Értékhalmaz:

Maximum kiválasztás tömbben

Algoritmizálás és adatmodellezés tanítása 4. előadás

ELEMI PROGRAMOZÁSI TÉTELEK

Rekurzív algoritmusok

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Fák Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

A 2012/2013 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. II. (programozás) kategória

Tartalomjegyzék Algoritmusok - pszeudókód

Átírás:

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

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 2.1.1 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 2019. 03. 26. 7:18 2/31

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..k KF(i) nemkell:=sorból(kf) Sorba(KF,NKF) Ciklus vége Zsakó László: Hatékonyság 2 2019. 03. 26. 7:18 3/31

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 2019. 03. 26. 7:18 4/31

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 2019. 03. 26. 7:18 5/31

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 2019. 03. 26. 7:18 6/31

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) b. Változó m:tömb(1..n*(n+1) Div 2:Logikai) Háromszögmátrix! Zsakó László: Hatékonyság 2 2019. 03. 26. 7:18 7/31

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) Szimmetria miatt Zsakó László: Hatékonyság 2 2019. 03. 26. 7:18 8/31

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. 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! Zsakó László: Hatékonyság 2 2019. 03. 26. 7:18 9/31

C-atomos példa a 2.1.3-hoz C 1 C 4 C 5 C 3 a. Kötés-mátrix. h h h I h. h h I h h. h I h h h. I i i i i. C 2 b. Kötés-háromszögmátrix c. Kötés-lista d. Atompár-vektor 5 5 5 5 1 2 3 4 1 5 2 5 3 5 4 5 1:5 2:5 3:5 4:5 5:1,2,3,4 (1,5) (2,5) (3,5) (4,5). h h h I.. h h I... h I.... I..... Zsakó László: Hatékonyság 2 2019. 03. 26. 7:18 10/31

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 2019. 03. 26. 7:18 11/31

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 2019. 03. 26. 7:18 12/31

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 2019. 03. 26. 7:18 13/31

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 2019. 03. 26. 7:18 14/31

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 2019. 03. 26. 7:18 15/31

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 2019. 03. 26. 7:18 16/31

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 2019. 03. 26. 7:18 17/31

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 2019. 03. 26. 7:18 18/31

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 2019. 03. 26. 7:18 19/31

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 2019. 03. 26. 7:18 20/31

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 2019. 03. 26. 7:18 21/31

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 2019. 03. 26. 7:18 22/31

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 2019. 03. 26. 7:18 23/31

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 2019. 03. 26. 7:18 24/31

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 Ha p akkor f 2 Ha p és q akkor f 2 Ha p akkor Ha q akkor f 3 ciklikus bonyolultsága Zsakó László: Hatékonyság 2 2019. 03. 26. 7:18 25/31

3. A bonyolultság csökkentése Definíció: Egy programgráf módosított ciklikus bonyolultsága egy számpár: a ciklikus bonyolultsági szám, valamint a ciklikus bonyolultág megnövelve a feltételekben szereplő diszjunkció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,2 Ha p és q akkor f 2,3 Ha p akkor Ha q akkor f 3,3 De problémás: Ha p és q akkor f 2,3 r:=p és q; Ha r akkor f 2,2 Zsakó László: Hatékonyság 2 2019. 03. 26. 7:18 26/31

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 2019. 03. 26. 7:18 27/31

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 2019. 03. 26. 7:18 28/31

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 2019. 03. 26. 7:18 29/31

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 2019. 03. 26. 7:18 30/31

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 2019. 03. 26. 7:18 31/31

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 2019. 03. 26. 7:18 32/31

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 2019. 03. 26. 7:18 33/31

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 2019. 03. 26. 7:18 34/31

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. Keresésnél figyelni kell arra, nehogy a sorozat végén túlmenjünk. Zsakó László: Hatékonyság 2 2019. 03. 26. 7:18 35/31

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 2019. 03. 26. 7:18 36/31

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 2019. 03. 26. 7:18 37/31

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