Unica.ro - asa cum esti tu

  • REFERATE
  • ARTICOLE
  • CARTI
  • STIRI
  • ACTE
  • BACALAUREAT
  • MEMBRI
  • HOROSCOP
  • REVISTA UNICA
  • RETETE
  • UNICA TV
  • FOTO
  • INTRE PRIETENE
  • DIN DRAGOSTE
  • TESTE
  • PAREREA LUI
  • FELICITARI
  • CONCURSURI
  • ARHIVA
  • SHOP
  • Referate
    • Agricultura
    • Alimentatie publica
    • Alte teme
    • Asistenta sociala
    • Astrologie
    • Astronomie
    • BAC / Capacitate
    • Biografii
    • Biologie
    • Chimie
    • Confectii
    • Contabilitate
    • Desen / Arte
    • Domeniul - Militar
    • Drept
    • Ecologie
    • Economie
    • Engleza
    • Esee
    • Facultate
    • Filozofie
    • Fizica
    • Franceza
    • Geo. Economica
    • Geografie
    • Germana
    • Informatica
    • Istorie
    • Jurnalism
    • Lucrari
    • Management
    • Marketing
    • Mass-Media
    • Matematica
    • Mecanica Auto
    • Medicina
    • Muzica
    • Opere / Povesti
    • Pedagogie
    • Psihologie
    • Religie
    • Romana
    • Sexologie
    • Stiinte politice
    • Tehnologie
    • Turism

MATEMATICA ANALIZA EFICIENTEI ALGORITMILOR

Descriere referat

  • Referate matematica
  • Bac 2008 matematica
  • Recomanda unui prieten
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).
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)]}
Exista o anumita dualitate intre notatiile O( f ) si ( f ). Si anume, pentru doua functii oarecare f, g : N  R, avem: f  O(g), daca si numai daca g  ( f ).
O situatie fericita este atunci cand timpul de executie al unui algoritm este limitat, atat inferior cat si superior, de cate un multiplu real pozitiv al aceleiasi functii. Introducem notatia
( f ) = O( f )  ( f )
numita ordinul exact al lui f. Pentru a compara ordinele a doua functii, notatia  nu este insa mai puternica decat notatia O, in sensul ca relatia O( f ) = O(g) este echivalenta cu ( f ) = (g).
Se poate intampla ca timpul de executie al unui algoritm sa depinda simultan de mai multi parametri. Aceasta situatie este tipica pentru anumiti algoritmi care opereaza cu grafuri si in care timpul depinde atat de numarul de varfuri, cat si de numarul de muchii. Notatia asimptotica se generalizeaza in mod natural si pentru functii cu mai multe variabile. Astfel, pentru o functie arbitrara f : N  N  R definim
O( f ) = {t : N  N  R | (c  R+) (m0, n0  N) (m  m0) (n  n0)
t(m, n)  cf (m, n)]}
Similar, se obtin si celelalte generalizari.
5.1.2 Notatia asimptotica conditionata
Multi algoritmi sunt mai usor de analizat daca consideram initial cazuri a caror marime satisface anumite conditii, de exemplu sa fie puteri ale lui 2. In astfel de situatii, folosim notatia asimptotica conditionata. Fie f : N  R o functie arbitrara si fie P : N  B un predicat.
O( f | P) = {t : N  R  (c  R+) (n0  N) (n  n0)
[P(n)  t(n)  cf (n)}
Notatia O( f ) este echivalenta cu O( f | P), unde P este predicatul a carui valoare este mereu true. Similar, se obtin notatiile ( f | P) si ( f | P).
O functie f : N  R este eventual nedescrescatoare, daca exista un n0, astfel incat pentru orice n  n0 avem f (n)  f (n1), ceea ce implica prin inductie ca, pentru orice n  n0 si orice m  n, avem f (n)  f (m). Fie b  2 un intreg oarecare. O functie eventual nedescrescatoare este b-neteda daca f (bn)  O( f (n)). Orice functie care este b-neteda pentru un anumit b  2 este, de asemenea, b-neteda pentru orice b  2 (demonstrati acest lucru!); din aceasta cauza, vom spune pur si simplu ca aceste functii sunt netede. Urmatoarea proprietate asambleaza aceste definitii, demonstrarea ei fiind lasata ca exercitiu.

Proprietatea 5.1 Fie b  2 un intreg oarecare, f : N  R o functie neteda si t : N  R o functie eventual nedescrescatoare, astfel incat
t(n)  X( f (n) | n este o putere a lui b)
unde X poate fi O, , sau . Atunci, t  X( f ). Mai mult, daca t  ( f ), atunci si functia t este neteda.

Pentru a intelege utilitatea notatiei asimptotice conditionate, sa presupunem ca timpul de executie al unui algoritm este dat de ecuatia

unde a, b  R+ sunt constante arbitrare. Este dificil sa analizam direct aceasta ecuatie. Daca consideram doar cazurile cand n este o putere a lui 2, ecuatia devine

Prin tehnicile pe care le vom invata la sfarsitul acestui capitol, ajungem la relatia
t(n)  (n log n | n este o putere a lui 2)
Pentru a arata acum ca t  (n log n), mai trebuie doar sa verificam daca t este eventual nedescrescatoare si daca n log n este neteda.
Prin inductie, vom demonstra ca (n  1) [t(n)  t(n1)]. Pentru inceput, sa notam ca
t(1) = a  2(ab) = t(2)
Fie n > 1. Presupunem ca pentru orice m < n avem t(m)  t(m1). In particular,
t(n/2)  t((n1)/2)
t(n/2)  t((n1)/2)
Atunci,
t(n) = t(n/2)t(n/2)bn  t((n1)/2)t((n1)/2)b(n1) = t(n1)
In fine, mai ramane sa aratam ca n log n este neteda. Functia n log n este eventual nedescrescatoare si
2n log(2n) = 2n(log 2  log n) = (2 log 2)n  2n log n
 O(n  n log n) = O(max(n, n log n)) = O(n log n)

inchide

Trimite email

Descarca referat

  • Adaugat de danionutrazvan
  • 48 descarcari
  • 742 afisari
Referatul matematica Analiza eficientei algoritmilor - matematica pe care doriti sa-l downloadati face parte din referatele gratuite ale siteului.
In cazul in care apar erori de orice fel, sau daca doriti sa reclamati un material ca fiind plagiat ori de o calitate inacceptabila, ne puteti contacta oricand accesand pagina de Contact a site-ului.

Voturi

  • Nota actuala 3.00/10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Nota acordata: 3.0/10 (2 voturi)

Alte referate la matematica

  • Cauta
  • Adauga
  • Referate top 15
Nume referat
Info
Referat la matematica MATRICI SI DETERMINANTI
Descriptori de performanta clasa a X-a
functii
pitagora
Vectori si operatii
  • TERMENI SI CONDITII
  • CONTACT