Hatékonyság 1. előadás
Mi a hatékonyság Bevezetés A hatékonyság helye a programkészítés folyamatában: csak HELYES programra Erőforrásigény: a felhasználó és a fejlesztő szempontjából A hatékonyság mérése Ordó-függvénnyel: f(x)=o(g(x)) x Đ f K IR + : x Đ f f(x)/g(x) <K Hatékonyság 1 2019. 03. 26. 7:27 2/31
Bevezetés (folytatás) A feladat: Egy sorozat K-val ciklikusan balra léptetése Be: X H *, N,K IN Ki: X H * [X új értéke] Ef: N=Hossz(X) Uf: X =X K Def: : K-szoros ciklikus léptetés balra művelet, azaz: (X K) i =X (i-1+k mod N)+1 Hatékonyság 1 2019. 03. 26. 7:27 3/31
Bevezetés (folytatás) Első megoldás: Ciklus K-szor segéd:=x(1) X(1..N-1):=Másolás(X(2..N)) X(N):=segéd Második megoldás: segéd(1..k):=másolás(x(1..k)) X(1..N-K)):=Másolás(X(K+1..N)) X(N-K+1..N)):=Másolás(segéd(1..K)) Hatékonyság 1 2019. 03. 26. 7:27 4/31
Bevezetés (folytatás) Harmadik megoldás: Ötlete: K-val léptetés a láncban Pl.: N=5, K=2 és X=(1,2,3,4,5) (1, 2, 3, 4, 5) Léptetés(Szöveg,N,K): Hova:=1 Betű:=Szöveg(Hova) [első üres hely] Ciklus i=1-től N-1-ig Honnan:=Hova+K Ha Honnan>N akkor Honnan:=Honnan-N Szöveg(Hova):=Szöveg(Honnan) Hova:=Honnan [következő üres hely] Szöveg(Hova):=Betű Eljárás vége. Hatékonyság 1 2019. 03. 26. 7:27 5/31
Bevezetés (folytatás) Harmadik megoldás: N=6, K=2 és X=(1,2,3,4,5,6) (1, 2, 3, 4, 5, 6) Léptetés(Szöveg,N,K): Ciklus j=1-től lnko(n,k)-ig Hova:=j Betű:=Szöveg(Hova) Ciklus i=1-től N/lnko(N,K)-1-ig Honnan:=Hova+K Ha Honnan>N akkor Honnan:=Honnan-N Szöveg(Hova):=Szöveg(Honnan) Hova:=Honnan Szöveg(Hova):=Betű Eljárás vége. Hatékonyság 1 2019. 03. 26. 7:27 6/31
Összevetés: Melyik jobb? Bevezetés (folytatás) Idő Hely Bonyolultság 1. K*(N+1) 1+N * 2. N+K K+N * 3. N+lnko(N,K) 1+N *** Tehát: A hatékonyság dimenziói: Idő (memória/háttértár) műveletek (klaviatúra/képernyő???) Hely kód (memória/háttértár), adat (memória/háttértár) Bonyolultság algoritmus/kód (szerkezeti/logikai) adat (szerkezeti/logikai) Hatékonyság 1 2019. 03. 26. 7:27 7/31
Egy további példa: Melyik jobb? Bevezetés (folytatás) Hely: (N) Hason.: (N 2 ) Mozg. Min : (N), Mozg. Max : (N) A minimum kiválasztásos rendezés, vagy az egyszerű cserés rendezés? A hatékonyság mértékei : Minimum Maximum Átlagos Hely: (N) Hason.: (N 2 ) Mozg. Min : 0, Mozg. Max : (N 2 ) Hatékonyság 1 2019. 03. 26. 7:27 8/31
Adat és algoritmus: adat- hely- rekord mezők (szám;méret) sorozat=elemszám *elemméret Bevezetés (folytatás) Összetett szerkezet időcsökkenés/növekedés algoritmikus szekvencia ciklus=lépés-szám *1-végrehajtás= =admin.+ciklusmag Hatékonyság 1 2019. 03. 26. 7:27 9/31
I. rész: globális hatékonyság csökkentése Lehetőségek: Mivel programvégrehajtási idő ciklus(ok) végrehajtási idő és ciklus végrehajtási idő lépésszám * egyszeri végrehajtási idő, ezért csökkentendő 1.A ciklusok lépésszámai, ill. 2. A ciklusok egyszeri végrehajtási ideje ( ciklusmag végrehajtási idő!). Hatékonyság 1 2019. 03. 26. 7:27 10/31
1.1 A lépésszám csökkentése Alapelv: a megvizsgált elemek száma vagy abszolute vagy átlagosan kevesebb legyen! 1.1.1 Elemszám-csökkentés A sorozat futó eleme Feladat: N prím-e? Megoldások: a. príme:=eldöntés(2..n-1, N) b. príme:=eldöntés(2..n Div 2, N) c. príme:=eldöntés(2.. N, N) Osztható-e művelet Hisz N=n 1 *n 2 min(n 1,n 2 ) N Hatékonyság 1 2019. 03. 26. 7:27 11/31
Feladat: Városok távolságai: Táv. Mely kettő van legközelebb egymáshoz? A B 0 A Táv= 0 B. 0 Megoldások: a. (v,w):=minkiválasztás(táv(i,j) i,j=1..n,i j;<) b. (v,w):=minkiválasztás(táv(i,j) i=1..n,j=1..i-1,<) Hisz Táv(i,j)=Táv(j,i) Hatékonyság 1 2019. 03. 26. 7:27 12/31
1.1.2 A sorozat részekre osztása Feladat: Egy A elem kiválasztása az X rendezett sorozatból. Megoldások: a. melyik:=kiválasztás(x(1..n), =A) b. Ef: X direkt elérésű melyik:=logkiválasztás(x(1..n), =A) Hasonlítás-szám: (log 2 (N)) Hatékonyság 1 2019. 03. 26. 7:27 13/31
Feladat: Az f szekvenciális fájlban [1..N]-beli számok vannak, ismétlés nélkül, összevissza; legfeljebb N-1 darab. Adjunk meg egy elő nem forduló számot! Egy végigolvasás ideje Megoldások: a. nincs:=kiválasztás(i i=1..n, Eldöntés(f, =i)) ElOlv Min =H, ElOlv Max =N*H, ElOlv Átl =(1+N)*H/2 b. nincs:=(log)kiválasztás(i i i=1.. log 2 (N), Megszámolás(f, I i )=0) I 1 :=(1,N) (e i,(e i +v i ) Div 2), ha Db (e i,(ei+vi) Div 2) <Db Ii -Db (e i,(ei+vi) Div 2) I i+1 =(e i+1,v i+1 ):= ((e i +v i ) Div 2,v i ), különben ElOlv Min =ElOlv Max =ElOlv Átl log 2 (N) *H Hatékonyság 1 2019. 03. 26. 7:27 14/31
1.1.3 A sorozatok párhuzamos feldolgozása Feladat: rendezett sorozatok egyesítése. Megoldások: a. Z:=Egyesítés(X(1..N),Y(1..M)) [(Z,Db):=(Másolás(X(1..N)),N) +Kiválogatás(Y(1..M),Eldöntés(X,y i )] Hasonlítás-szám: N*M b. Z:=Összefuttatás(X(1..N),Y(1..M)) Hasonlítás-szám: N+M Hatékonyság 1 2019. 03. 26. 7:27 15/31
1.1.4 Gyakoriság-szerinti elrendezés Feladat: X H N, P i elemkiválasztási valószínűség; adott A elem kiválasztása. Megoldás: Kiválasztás(X,A): k:=1 Ciklus amíg X(k) A k:=k+1 Kiválasztás:=k Függvény vége. Átlagos futási idő P i =P esetén: T N i P i 1 N P N i 1 2 Átlagos futási idő általános esetben: T N i P N i i P N 1 1 i 1 i i 1 N i P i i N 1 N 1 2 Hatékonyság 1 2019. 03. 26. 7:27 16/31
1.1.5 Elemek csoportos feldolgozása Feladat: Kutatófúrások adatait tartalmazza a KF tömb (TElem=Rekord(sorsz,mélység:Egész, mennyiség:tdússág); az azonos fúrólyuktól származó adatok egy csoportban vannak). Egy F fúrólyuk adatait kell kiválogatni. Megoldások: a. Z:=Kiválogatás(KF(1..N), =F) b. a:=kiválasztás(kf(1..n), =F) Z:=Másolás&Keresés(KF(a..N), F) Hatékonyság 1 2019. 03. 26. 7:27 17/31
1.1.6 Ciklus indexszé transzformálása Feladat: Ikerprímek száma, N-ig (N>2). Megoldások: a. IPDb:=1 [=(2,3)] + Megszámolás(3..N-2, Prím( ) Prím( +2)) b. Konstans Prímek:TPrímek(N)(...) Típus TPrímek(M)=Tömb(1..M:Egész) IPDb:=1 [=(2,3)] + Keresés Megszámolás(2..j: Keresési határfeltétel j-re. Prímek(j+1)>N, Prímek( +1)-Prímek( )=2) Megszámolás tulajdonsága Hatékonyság 1 2019. 03. 26. 7:27 18/31
1.2 Az egyszeri végrehajtás idejének csökkentése 1.2.1 Elágazás transzformálása Feladat: Szimuláljunk N kockadobást Megoldások: a. Db(1..6):=Másolás(0 i=1..6) Ciklus N-szer x:=véletlen(6) Elágazás x=1 esetén Db(1):=Db(1)+1 x=6 esetén Db(6):=Db(6)+1 Elágazás vége b. Db(1..6):=Másolás(0 i=1..6) Ciklus N-szer x:=véletlen(6) Db(x):=Db(x)+1 Hatékonyság 1 2019. 03. 26. 7:27 19/31
Kód Jel 0 Nul 1 SQH 48 0 49 1 57 9 60 < 65 A 66 B 90 Z 91 97 a 98 b Feladat: Számoljuk meg egy S szövegben hány nagybetű, kisbetű, számjegy, illetve egyéb jel van! Típus TMi=(NB,KB,SzJ,EJ) Változó Db:Tömb(TMi:Egész) a. Db(NB..EJ):=Másolás(0 i=1..4) Ciklus i=1-től Hossz(s)-ig x:=sorszám(s(i)) [Kódja] Elágazás x<48 esetén Db(EJ):=Db(EJ)+1 x<58 esetén Db(SzJ):=Db(SzJ)+1 x<65 esetén Db(EJ):=Db(EJ)+1 x<90 esetén Db(NB):=Db(NB)+1 Elágazás vége Hatékonyság 1 2019. 03. 26. 7:27 20/31
Kód Jel 0 Nul 1 SQH 48 0 49 1 57 9 60 < 65 A 66 B 90 Z 91 97 a 98 b Feladat: Számoljuk meg egy S szövegben hány nagybetű, kisbetű, számjegy, illetve egyéb jel van! Megoldások: Típus TMi=(NB,KB,SzJ,EJ) Változó Db:Tömb(TMi:Egész) b. Konstans Ind:Tömb(Karakter:TMi)= (EJ,EJ,EJ,,SzJ,,NB,,EJ,,KB, ) Db(NB..EJ):=Másolás(0 i=1..4) Ciklus i=1-től Hossz(s)-ig x:=s(i) Db(Ind(x)):=Db(Ind(x))+1 Hatékonyság 1 2019. 03. 26. 7:27 21/31
1.2.2 A kivételes eset kiküszöbölése Feladat: Lineáris keresés tétele Megoldások: a. (Van,Melyik):=LinKer(X,T) b. Változó X:Tömb(1..N+1:TH) i:=1; X(N+1):=spec [T(spec)] Ciklus amíg nem T(X(i)) i:=i+1 Van:=i N Ha Van akkor Melyik:=i Hatékonyság 1 2019. 03. 26. 7:27 22/31
Feladat: Számítsuk ki a következő sorozat-transzformációt. Megoldások: Változó A,B:Tömb(1..N:TH) a. Ciklus i=1-től N-ig Ha i=1 vagy i=n akkor B(i):=A(i) különben B(i):=(A(i-1)+2*A(i)+A(i+1))/4 Elágazás vége A i, ha i=1 i=n B i := (A i-1 +2A i +A i+1 )/4, ha i [2..N] b. B(1):=A(1); B(N):=A(N) Ciklus i=2-től N-1-ig B(i):=(A(i-1)+2*A(i)+A(i+1))/4 Hatékonyság 1 2019. 03. 26. 7:27 23/31
1.2.3 Ciklusok szétválasztása Alapelv: több kivételes esetre, inkább részsorozatra bontható a feldolgozandó sorozat. Feladat: S=?, ha N>4, 2 N S:= Megoldások: a. S:=0 Ciklus i=1-től N-ig Elágazás i=1 vagy i=n esetén S:=S+A(i) 2 N esetén S:=S+4*A(i) egyéb esetben S:=S+2*A(i) Elágazás vége A 1 +4A 2 +2A 3 + +4A N-1 +A N N Hatékonyság 1 2019. 03. 26. 7:27 24/31
1.2.3 Ciklusok szétválasztása Alapelv: több kivételes esetre, inkább részsorozatra bontható a feldolgozandó sorozat. Feladat: S=?, ha N>4, 2 N S:= N Megoldások: b. S:=A(1)+A(N) Ciklus i=2-től N-1-ig 2-esével S:=S+4*A(i) Ciklus i=3-tól N-2-ig 2-esével S:=S+2*A(i) A 1 +4A 2 +2A 3 + +4A N-1 +A N Hatékonyság 1 2019. 03. 26. 7:27 25/31
1.2.4 Feltételek elhagyása Feladat: Egy szimulációs részprobléma... Véletlenszerű állapotváltozás (P( 0 0)=P)... Megoldások: a. Ciklus i=1-től N-ig Ha A(i) 0 és Véletlen<P akkor A(i):=0 b. Ciklus i=1-től N-ig Ha Véletlen<P akkor A(i):=0 [0,1]-egyenletes eloszlású véletlenszám Hatékonyság 1 2019. 03. 26. 7:27 26/31
1.2.5 Adatok előfeldolgozása Feladat: Adott M mátrix sorait rendezzük át sorösszeg szerint növekvő sorrendbe! Rendezés(M(i,1..N) i=1..n, < Megoldások: Összegzés(M(.,1..N)) ) < Összegzés(M(.,1..N)) sorösszeg-szerinti rendezés Rendezés minimumkiválasztással(n,a): Ciklus i=1-től N-1-ig L:=i Ciklus j=i+1-től N-ig S1:= az L. sor sorösszege S2:= a j. sor sorösszege Ha S1>S2 akkor L:=j Csere(i. sor, L. sor) Eljárás vége. Hatékonyság 1 2019. 03. 26. 7:27 27/31
1.2.5 Adatok előfeldolgozása Feladat: Adott M mátrix sorait rendezzük át sorösszeg szerint növekvő sorrendbe! Rendezés minimumkiválasztással(n,a): Ciklus i=1-től N-ig S(i):= az i. sor sorösszege Ciklus i=1-től N-1-ig L:=i Ciklus j=i+1-től N-ig Ha S(L)>S(j) akkor L:=j Csere(i. sor, L. sor); Csere(S(i),S(L)) Eljárás vége. Hatékonyság 1 2019. 03. 26. 7:27 28/31
1.2.6 Az adatmozgatások minimalizálása Feladat: Adott M mátrix sorait rendezzük át sorösszeg szerint növekvő sorrendbe! Megoldások: Rendezés(M(i,1..N) i=1..n,< Összegzés(M(,1..N)) ) < Összegzés( ) : sorösszeg-szerinti rendezési reláció Rendezés minimumkiválasztással(n,a): Ciklus i=1-től N-1-ig L:=i Ciklus j=i+1-től N-ig S1:= az L. sor sorösszege S2:= a j. sor sorösszege Ha S1>S2 akkor L:=j Csere(i. sor, L. sor) Eljárás vége. Hatékonyság 1 2019. 03. 26. 7:27 29/31
1.2.6 Az adatmozgatások minimalizálása Feladat: Adott M mátrix sorait rendezzük át sorösszeg szerint növekvő sorrendbe! Rendezés minimumkiválasztással(n,a,h): Ciklus i=1-től N-ig S(i):= az i. sor sorösszege; H(i):=i Ciklus i=1-től N-1-ig L:=i Ciklus j=i+1-től N-ig Ha S(H(L))>S(H(j)) akkor L:=j Csere(H(i),H(L)) Eljárás vége. Hatékonyság 1 2019. 03. 26. 7:27 30/31
Hatékonyság 1. előadás vége