QReferate - referate pentru educatia ta.
Cercetarile noastre - sursa ta de inspiratie! Te ajutam gratuit, documente cu imagini si grafice. Fiecare document sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Documente matematica

Matematica Analiza eficientei algoritmilor



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.
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.
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).
In multimea O( f ) putem inlocui pe f cu orice alta functie echivalenta cu f. De exemplu, lg n  ln n log n si avem O(lg n) = O(ln n) = O(log n). Notand cu O(1) ordinul functiilor marginite superior de o constanta, obtinem ierarhia:
O(1)  O(log n)  O(n)  O(n log n)  O(n2)  O(n3)  O(2n)
Aceasta ierarhie corespunde unei clasificari a algoritmilor dupa un criteriu al performantei. Pentru o problema data, dorim mereu sa obtinem un algoritm corespunzator unui ordin cat mai "la stanga". Astfel, este o mare realizare daca in locul unui algoritm exponential gasim un algoritm polinomial.
In Exercitiul 5.7 este data o metoda de simplificare a calculelor, in care apare notatia asimptotica. De exemplu,
n33n2n8  O(n3(3n2n8)) = O(max(n3, 3n2n8)) = O(n3)
Ultima egalitate este adevarata, chiar daca max(n3, 3n2n8)  n3 pentru 0  n  3, deoarece notatia asimptotica se aplica doar pentru n suficient de mare. De asemenea,
n33n2n8  O(n3/2(n3/23n2n8)) = O(max(n3/2, n3/23n2n8))
= O(n3/2) = O(n3)
chiar daca pentru 0  n  6 polinomul este negativ. Exercitiul 5.8 trateaza cazul unui polinom oarecare.
Notatia O( f ) este folosita pentru a limita superior timpul necesar unui algoritm, masurand eficienta algoritmului respectiv. Uneori este util sa estimam si o limita inferioara a acestui timp. In acest scop, definim multimea
( f ) = {t : N  R | (c  R+) (n0  N) (n  n0) [t(n)  cf (n)]}

Descarca referat

E posibil sa te intereseze alte documente despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site.
{ Home } { Contact } { Termeni si conditii }