Analiza eficienţei algoritmilor |
| | Categorie: Matematica | Autor: Ciorna.com | Dimensiune: 183 KB | Descărcări: 150 |
Descriere: 5. Analiza eficientei algoritmilor
Vom dezvolta in acest capitol aparatul matematic necesar pentru analiza eficientei algoritmilor, incercand ca aceasta incursiune matematica sa nu fie excesiv de formala. Apoi, vom arata, pe baza unor exemple, cum poate fi analizat un algoritm. O atentie speciala o vom acorda tehnicilor de analiza a algoritmilor recursivi.
5.1 Notatia asimptotica
In Capitolul 1 am dat un inteles intuitiv situatiei cand un algoritm necesita un timp in ordinul unei anumite functii. Revenim acum cu o definitie riguroasa.
5.1.1 O notatie pentru “ordinul lui”
Fie N multimea numerelor naturale (pozitive sau zero) si R multimea numerelor reale. Notam prin N+ si R+ multimea numerelor naturale, respectiv reale, strict pozitive, si prin R multimea numerelor reale nenegative. Multimea {true, false} de constante booleene o notam cu B. Fie f : N R o functie arbitrara. Definim multimea
O( f ) = {t : N R | (c R+) (n0 N) (n n0) [t(n) cf (n)]}
Cu alte cuvinte, O( f ) (se citeste “ordinul lui f ”) este multimea tuturor functiilor t marginite superior de un multiplu real pozitiv al lui f, pentru valori suficient de mari ale argumentului. Vom conveni sa spunem ca t este in ordinul lui f (sau, echivalent, t este in O( f ), sau t O( f )) chiar si atunci cand valoarea f (n) este negativa sau nedefinita pentru anumite valori n < n0. In mod similar, vom vorbi despre ordinul lui f chiar si atunci cand valoarea t(n) este negativa sau nedefinita pentru un numar finit de valori ale lui n; in acest caz, vom alege n0 suficient de mare, astfel incat, pentru n n0, acest lucru sa nu mai apara. De exemplu, vom vorbi despre ordinul lui n/log n, chiar daca pentru n = 0 si n = 1 functia nu este definita. In loc de t O( f ), uneori este mai convenabil sa folosim notatia t(n) O( f (n)), subintelegand aici ca t(n) si f (n) sunt functii.
Fie un algoritm dat si fie o functie t : N R astfel incat o anumita implementare a algoritmului sa necesite cel mult t(n) unitati de timp pentru a rezolva un caz de marime n, n N. Principiul invariantei (mentionat in Capitolul 1) ne asigura ca orice implementare a algoritmului necesita un timp in ordinul lui t. Mai mult, acest algoritm necesita un timp in ordinul lui f pentru orice functie f : N R pentru care t O( f ). In particular, t O(t). Vom cauta in general sa gasim cea mai simpla functie f, astfel incat t O( f ).
Proprietatile de baza ale lui O( f ) sunt date ca exercitii (Exercitiile 5.1-5.7) si este recomandabil sa le studiati inainte de a trece mai departe.
Notatia asimptotica defineste o relatie de ordine partiala intre functii si deci, intre eficienta relativa a diferitilor algoritmi care rezolva o anumita problema. Vom da in continuare o interpretare algebrica a notatiei asimptotice. Pentru oricare doua functii f , g : N R, definim urmatoarea relatie binara: f g daca O( f ) O(g). Relatia “” este o relatie de ordine partiala in multimea functiilor definite pe N si cu valori in R (Exercitiul 5.6). Definim si o relatie de echivalenta: f g daca O( f ) = O(g).
|
| Acordă o notă acestui referat: | 5.18 |
| Mulţumim pentru notă - 155 note acestui referat. | |