Complexitate...

Această secţiune se ocupă cu programarea, fără a ţine cont de limbaj. Dacă vrei (sau trebuie) să înveți algoritmică, aici este locul potrivit. Descrieri şi idei de algoritmi, algoritmi clasici și întrebări pe baza acestora, toate vor fi postate aici.

Complexitate...

Postby depraved » 12 Dec 2011, 19:11

E unul dintre subiectele pe care nu le-am priceput(pana acum,hopefully).
So, avem urmatorul cod :
1:
  1.  
  2. for(i=1,n,1)
  3.    for(j=1,n,1)
  4.         {instructiuni...}

2:
  1.  
  2.    for(i=1,n,1)
  3.       {instructiuni}
  4.      
  5.     for(j=1,n,1)
  6.         {instructiuni}

Instructiunile nu trebuie sa fie neaparat la fel,dar totusi sa aiba acelasi numar de operatii.
Primul "algoritm" are complexitate O(n*n) iar al doilea O(n) ?
Daca da, de ce ? La cum le vad eu , cred ca vor rula in acelasi timp.
E cam ambiguu post-ul, sper sa intelegeti.
0,0p / 0 votes
User avatar
depraved
Bit
 
Joined: 03 Sep 2011
Status: 1

Re: Complexitate...

Postby DarkByte » 12 Dec 2011, 19:47

Al doilea algoritm are o complexitate de O(2n). Cu doua bucle imbricate (ca in primul exemplu) poti parcurge o matrice de NxN elemente. Cu doua bucle secventiale (ca in al doilea exemplu) poti parcurge doar doua linii (sau coloane) din respectiva matrice - hence, O(2n).

Oricum, in acest al doilea caz, complexitatea este, de fapt, O(n) - fiindca ne intereseaza rata de crestere a timpului de rulare (memoria ocupata, etc) al algoritmilor. Fiindca "2" este constant, rata de crestere este data de N => complexitatea este de O(n).

Bafta

P.S. Spuneai ca tu crezi ca vor rula in acelasi timp. E usor de demonstrat ca bucla imbricata (din primul exemplu) se va executa de NxN ori ... incearca sa aduni cu 1 o variabila C (contor ... sa zicem :P) in FOR-ul care foloseste "j" - si afiseaza variabila C chiar inainte de a se termina programul. In al doilea exemplu, fiecare bucla se executa de N ori, adica N + N. Poti face acelasi test cu o variabila contor daca nu ma crezi pe cuvant :D
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Complexitate...

Postby cata45 » 12 Dec 2011, 19:49

In primul cod pentru fiecare valoare luata de i, j-ul parcurge toate valorile de la 1 la n
deci pt i=1: j face n parcurgeri
pt i=2 j face n parcurgeri
pt i=3 j face n parcurgeri
..................
pt i=n j face n parcurgeri

deci j face n*n parcurgeri (in total) complexitatea fiind O(n*n) //reprezinta de cate ori se executa instructiunile
Daca ai avea 3 de for atunci complexitatea ar fi O(n*n*n)

In cel de-al doilea cod sunt doua foruri separate.
Primul face n parcurgeri iar cel de-al II-lea face tot n parcurgeri
Deci ambele fac 2*n parcurgeri. Complexitatea fiind O(2*n), insa acel 2 este o constanta si se face abstractie de el. Deci da, complexitatea celui de-al II-lea cod este O(n);

Deci daca ai o complexitate de forma O(x*n) unde x este un numar mic o poti scrie O(n).
Daca ai o complexitate O(n+x) unde x este un numar mic o poti scrie tot O(n)

Ex: O(n+12)=O(n)
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: Complexitate...

Postby smith » 12 Dec 2011, 22:51

0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: Complexitate...

Postby depraved » 12 Dec 2011, 23:39

Multumesc all, si pentru raspunsuri si pentru tutorial, acum am inteles ^_^.
0,0p / 0 votes
User avatar
depraved
Bit
 
Joined: 03 Sep 2011
Status: 1


Return to Algoritmică

Who is online

Users browsing this forum: No registered users and 0 guests

cron