este un termen utilizat pentru a descrie cteva atribute dezir
abile ale unui algoritm sau al unui alt construct, n afara unui concept curat, a func?ionalit?ii, etc. Eficien?a n general e con?inut n dou propriet?i: vitez (timpul c ia unei opera?ii pn se ncheie), ?i spa?iu (memoria sau depozitul nevolatil utiliza t de ctre construct). Optimizarea este procesul prin care se produce cod care est e ct mai eficient posibil, cteodat accentul punndu-se pe spa?iu n detrimentul vitezei , sau viceversa. Viteza unui algoritm este msurat n diverse moduri. Cea mai simpl metod utilizeaz compl exitatea n timp pentru a determina Ordinul unui algoritm: de multe ori, este posi bil realizarea unui algoritm mai rapid n detrimentul spa?iului utilizat. Acesta es te ?i cazul cnd reutilizezi rezultatele unui calcul intensiv dect s le ob?ii prin r ecalculare la comand. Aceasta este ?i o metod foarte obi?nuit de a cre?te viteza, c hiar ntr-att nct limbajele adaug de obicei elemente speciale pentru a o facilita, cum ar fi n C++ cuvntul cheie "mutable" (n englez). Spa?iul unui algoritm este de fapt alctuit din dou lucruri separate dar n legtur. Pri ma parte este spa?iul pe disc (sau echivalentul acestuia, depinznd de hardware ?i limbaj) ocupat de ctre executabilul compilat din codul surs reprezentare a algori tului. n multe cazuri acesta poate fi redus dac se prefer mecanisme de decizie n mom entul execu?iei (cum ar fi func?ii virtuale ?i informa?ia de tip la rulare) n dau na anumitor mecanisme de luare a deciziei n momenul compilrii (cum ar fi macro sub stitu?ia ?i ?ablon). Oricum, costul acestor opera?ii va fi reflectat n viteza de execu?ie. Cealalt parte msurat a spa?iului unui algoritm este cantitatea de memorie alocat tem porar n timpul procesrii. De exemplu, rezultatele precalculate, cum a fost men?ion at anterior, mbunt?esc viteza n dauna acestui atribut (cre?te necesarul de memorie t emporar alocat). Optimizarea algoritmilor depinde n mod frecvent de propriet?ile ma?inii pe care al goritmul va fi executat. De exemplu, cineva ar putea optimiza cod pentru eficien ? n domeniul timp n aplica?ii pentru calculatoare personale cu cantit?i apreciabile de memorie, n acela?i timp cod ce trebuie introdus n dispozitive mici ?i cu pu?in m emorie la dispozi?ie probabil va trebui fcut s func?ioneze mai lent pentru a econo misi spa?iu. O modalitate simpl de a afla dac merit ncercat optimizarea este urmtoarea: Fie O_1 ?i O_2 cerin?ele originale de te timp ?i spa?iu (n general n Nota?ie asimptotic) ale a lgoritmului. Fie N_1 ?i N_2 timpul ?i respectiv spa?iul necesare pentru noul cod . Dac N_1 N_2 < O_1 O_2 , ar trebui ndeplinit opera?iunea de optimizare. Oricum, a fost men?ionat anterior, s-ar putea s nu fie ntotdeauna cazul, iar aceast metod empi ric poate da gre?. Trebuie acordat o aten?ie sporit ca nu cumva , n goana dup un stil adecvat de editar e a codului surs, s fie eclipsat eficien?a. Aproape tot timpul, un concept curat ?i utilizabil e mult mai important dect un concept mic, rapid. Exist excep?ii la ace ast regul (cum ar fi sistemele integrate, unde spa?iul este strns, ?i puterea de pr ocesare minim) dar acestea sunt mai rare dect s-ar putea a?tepta cineva.