infoarena

Comunitate - feedback, proiecte si distractie => Blog => Subiect creat de: Cosmin Negruseri din Noiembrie 04, 2007, 17:40:45



Titlul: Intrebare scurta
Scris de: Cosmin Negruseri din Noiembrie 04, 2007, 17:40:45
Comentarii la postul http://infoarena.ro/blog/intrebare-scurta


Titlul: Răspuns: Intrebare scurta
Scris de: Marin Radu din Noiembrie 04, 2007, 23:30:07
Raspuns: O(N) cu o constanta.

CATEVA NOTIUNI:

Consideram nr de operatii de marcare a multiplilor pt fiecare numar de la 1 la N

cntMark = {O(1) daca i nu este prim
              O(N/i) daca nr este prim

Suma cu i de la 1 la N de  cntMark =  (O(1) * N - pt fiecare nr se fac cel putin un nr constant de op
                                                       +
                                                 O(N/2) + (N/3) + (N/5)...- marcajele pt nr prime
Stim ca
1) N/1 + N/2 + N/3 +..N/i+...N/N ~= O(NlogN) (aprox. grosolana) E simplu de arat, rotunjind fiecare nr i spre cea mai mare putere de 2 mai mica ca i
   N/1 + N/2 + N/3 +..N/N <= N/1 + N/2 + N/2 + N/4 +... N/[2^x] = O(NlogN),  x= max{ y/ 2^y <= N}
 

2) se stie ca in primele N nr naturale exista N / lnN nr prime

REZOLVARE:

O(N/1) + O(N/2) + O(N/3) + ... O(N/N) - cu limita O(NlogN)
O(N/2) + O(N/3) + O(N/5) + .... - subsir de termeni al prime sume, cu  nr de elemente = N / lnN, exista lnN astfel de subsiruri, fiecare avand limita O(NlogN)  / lnN ~= O(N) cu o constanta

Complexiate Ciur eratostene = O(N) * logN/lnN ~= O(N)


P.S. La 1) limita adevarata e mai mica de NlogN,e chiar NlnN



Titlul: Răspuns: Intrebare scurta
Scris de: Cosmin Negruseri din Noiembrie 05, 2007, 00:29:38
Nah nu e bine.


Titlul: Răspuns: Intrebare scurta
Scris de: nash mit din Noiembrie 05, 2007, 11:25:55
 O demonstratie poate fi legata de numerele Fibonacci ... plecand de la faptul ca daca am face cmmdc(F[n+1],F[n+2]) am face prin scaderi succesive maxim "n" operatii . Asta este echivalent cu a calcula pe cel de al n-lea termen al lui fibonacci ... si putem sa ajungem astfel la scrierea celui de-al "n"-lea termen cu ajutorul numarului de aur . Bine intales ... complexitatea este cam "larga" pentru ca eu fac scaderi in loc de impartiri ... se poate ajunge pana la log(n) ... unde "n" este cel mai mare numar dintre cele care se calculeaza cmmdc.


Titlul: Răspuns: Intrebare scurta
Scris de: Pol Catalin-Petru din Noiembrie 05, 2007, 11:52:08
legat de post-ul anterior... daca aplici cmmdc ala cu impartiri in loc de scaderi ajungi exact in acelasi loc, deoarece F[n+2] mod F[n+1]=F[n]. Deci intr-adevar, complexitatea devine O(log n) (pentru demonstratie completa, exista un subcapitol in Cormen, chiar si un capitol intreg in Knuth vol 2 - daca e voie sa fac reclama la piraterie... le am in format pdf cui ii trebe)


Titlul: Răspuns: Intrebare scurta
Scris de: nash mit din Noiembrie 05, 2007, 12:08:42
   Scuze .. ai dreptate ... :) uhm cat de usor poti sa faci o gafa cand nu esti atent la calcule ....


Titlul: Răspuns: Intrebare scurta
Scris de: alexandru din August 07, 2009, 08:09:37
Daca nu ma insel complexitatea  algoritmului lui euclid este de O( log a * log b ) ? pentru a demonstra cred ca sa folosit teorema impartiri cu rest:
a:b = c, r;
a=b*c+r; r= a-b*c;  r= a- b* [a/b]; r= a - b* ( a/b - {a/b} ) ; r= b*{a/b};
unde
  • = parte intreaga de x si {y} parte fractionara din x


Titlul: Răspuns: Intrebare scurta
Scris de: Cosmin Negruseri din August 10, 2009, 02:29:44
Nu e log a * log b ci log max(a, b).