ten algorytm znaleźć wszystkie liczby pierwsze poniżej NJak obliczyć T (N) dla tego primes algorytm Finder
var f = function(n){
var primes = [2]; //1
var flag; //1
for(var i=3; i<n; i+=2){ // (from 3 to n-1)/2
flag = true; //1
var startI = 0; // 1
for(var y=primes[startI]; y<=Math.sqrt(i); y=primes[++startI]){ // ???
if(i%y === 0) // 1
flag = false; // 1
}
if(flag) // 1
primes.push(i); // 1
}
return primes; // 1
}
Dotychczas moja analiza jest wykonywana do pierwszej pętli, nie jestem pewien, jak obsługiwać druga suma (ta, która używa primes.length
i Math.sqrt
).
T (n) = 1 + 1 + suma ((1+ 1+ ?? dziwne suma ???) z i = 3 i n -1)/2 + 1 + 1
rozumiem jak analizować do drugiej zagnieżdżonej pętli, podejrzewam, że jest około log (N) czy coś takiego, ale chciałbym znać dokładną liczbę powtórzeń ..
pytania:
- Jak mogę obsłużyć tego rodzaju pętlę, która korzysta z tablic w pamięci do i Terate?
- Jeśli nie można uzyskać dokładnej liczby, w jaki sposób mogę uzyskać dobre przybliżenie?
Każda pomoc jest doceniana (linki do podobnych przypadków, książek itp.).
Oczywiście suma jest górna ograniczona przez n * sqrt (n)/ln (n) (jej największy termin) i wynosi O (n^{3/2}/ln n). Ograniczając sumę do zakresu n/a <= i <= n dla niektórych ustalonych a> 1 otrzymujesz, że T (n) to Omega (n^{3/2}/ln n). Więc dostajesz napięty asymptotyczny dla T (n) – vib
Dzięki, dodam to do mojej odpowiedzi. Problem z zawiłościami, takimi jak "O (n^{3/2}/ln n)", jest trudny do porównania z innymi, ponieważ dzielisz coś na coś. Próbowałem tego uniknąć. – AbcAeffchen
Dzięki. Nie rozumiem, dlaczego zrobiłeś T (n-2) + sqrt (n) /0.5*ln (n), czy możesz rozwinąć więcej na ten temat? – rahpuser