Monday, December 4, 2017

Înjumătățirea repetărilor

Înjumătățirea repetărilor este un mod de a optimiza și eficiența se vede foarte clar, prin reducerea volumului de prelucrări dat în cicluri mașină care însoțesc repetările instrucțiunii for().
Secvența:
int n, i;
int a[100];
int sa=0;
..............
for(i=0; i < n; i++) sa+=a[i];
.......................
conține n repetări ale instrucțiunii for().
Dacă numărul de repetări n este un număr par, n=2*k este mult mai eficientă secvența:
int n, n, i;
int a[100];
int sa=0;
k=n/2;
..............
for(i=0; i < n; i++) 
    {
     sa+=a[i];
     sa+=a[k+i];
      }
.......................
căci instrucțiunea for() are un număr de execuții înjumătățit. Pentru a elimina restricția aceea legată de faptul că n trebuie să fie număr par se construiește o formă generală a secvenței care are devine:
int n, n, p,i;
int a[100];
int sa=0;
k=n/2;
p=n%2;
..............
for(i=0; i < n; i++) 
    {
     sa+=a[i];
     sa+=a[k+i];
      }
if(p)  sa+=a[n-1];
.......................
Sunt multe situațiile în care acest mod de lucru este benefic, mai ales în calculele statistice unde se lucrează cu serii de date de aceeași lungime și cu fiecare serie se fac anumite calcule, care presupun traversarea termen cu termen a fiecărei serii, calculele fiind independente în raport cu termenii.
Înjumătățirea repetărilor duce la creșterea vitezei de rulare a întregului program, ceea ce este benefic și nu presupune un efort prea mare din partea programatorilor, căci instrucțiunea for(0 la numărătoare este una singură, dar ea include mai multe expresii a cărăr evaluare are caracter repetitiv, ceea ce înseamnă multe cicluri mașină, deci timp în plus.


(023 decembrie 2017)



No comments:

Post a Comment