J'essaie de comprendre la complexité d'A pour la boucle en utilisant la grosse notation. Je l'ai déjà fait dans mes autres classes, mais celle-ci est plus rigoureuse que les autres parce que c'est sur l'algorithme réel. Le code est le suivant:
for(i=n ; i>1 ; i/=2) //for any size n { for(j = 1; j < i; j++) { x+=a } }
3 Réponses :
Le nombre total d'itérations de la boucle interne est N + N / 2 + N / 4 + ... + 1 qui est d'environ 2n. Donc la complexité est O (n). P>
La complexité doit être La boucle fonctionne pour et O (n) code>. Il forme une série géométrique (pas exactement mais approximativement). P>
n + n / 2 + n / 4 + .... +1 code> qui est environ
2n code>. p>
O (2n) = O (n) code>. p>
Pour résoudre formellement la complexité de votre algorithme de votre algorithme, vous pouvez utiliser les étapes suivantes avec la notation Sigma: p>
p>
Aussi, jetez un coup d'œil une dernière diapositive de ce très intéressant Document par le Dr Jauhar. P>
Comment pouvez-vous simplifier la somme
n + n / 2 + n / 4 + ... code>?
@Olicharlesworth Je ne comprends pas comment
n + n / 2 + n / 4 + ... code> est égal à
nlogn code>
@ Rüppell'svulture: Ce n'est pas le cas.
@Grijeshchauhanhan alors pourquoi deux upvotes pour le premier commentaire?
@ Rüppell'svulture: vraisemblablement parce que certaines personnes pensaient (incorrectement) que c'était la bonne réponse.
@Olicharlesworth Quelle est l'approximation de
n + n / 2 + n / 4 .... code> alors? Mes mathématiques sont pauvres, mais je sens toujours que c'est
n + logn code>
@ Rüppell'svulture: si
n code> est une puissance de deux, alors c'est exactement
2n-1 code>.
@Olicharsworth pourquoi pas (log (n) ^ (2 ^ (log (n) +1))) -1 = O (n)
@Waldhomaana: hein? Comment cette expression se rapportait-elle à cela?
@OlichaLLAlesworth Désolé, je veux dire que vous décrémentez la boucle extérieure I en plongeant par 2, et dans la boucle interne, vous exécutez I fois, le nombre d'itérations sera donc une somme sur tous les pouvoirs de deux moins ou égaux à n, plus que 0, qui est n ^ (log (n) +1) - 1, so (n).
@Olicharlesworth Si c'est
O (n) code>, il est également
O (n * journal n) code>, donc ce n'est pas mauvais i>.
@Olicharlesworth Normalement lors du calcul de O (Bigoh), vous n'avez pas besoin de trop de détails. mais ia en classe j'ai besoin de tous les détails pour mes examens
@Olicharlesworth est
2N-1 = N + N / 2 + N / 4 ...... Code> Une formule de la série? Maths de base?
@ Rüppell'svulture: en.wikipedia.org/wiki/geometric_series#sum .
@Danielfischer est journal (n) très moins comparé à
n code> quand
n code> est grand et peut donc être ignoré? C'est pourquoi
O (n) = O (n * logn) code>?
@ Rüppell'svulture: Il fait allusion au fait que O (n) est un sous-ensemble de O (n log n). (C'est-à-dire une fonction asymptotiquement délimitée par-dessus par
k.n code> est également délimitée par
k.n.log (n) code>.)
@ Rüppell'svulture Les deux classes
O (n) code> et
O (n * journal n) code> sont différents, mais
o (n) code> est un Soublisses de
O (n * journal n) code> (et de
O (n²) code>,
o (2 ^ n) code>,
o ( n!) code>). Si vous avez une limite supérieure
f (n) code>, chaque fonction plus grande i> est également une limite supérieure, donc si
boucle (n) <= c * n code>, qui dit que
boucle code> est dans
o (n) code>, puis de manière triviale
boucle (n) <= c * n * log n code> pour
n> = base_of_log code>, et donc
boucle code> est également dans
O (n * journal n) code>.
@Danielfischer Je suis botifking Cette question de sorte que une fois que j'ai terminé un livre sur des algorithmes, ce que vous avez dit fera un sens complet pour moi !!
@Daniel Fischer Quelle est votre complexité du problème?
@Waldhomaana
o (n) code> est la limite tranchante. Comme indiqué ci-dessus, chaque fonction plus grande fournirait également une limite supérieure correcte, mais ce ne serait pas tranchant. La boucle est
θ (n) code>, ce qui signifie que le nombre d'itérations est limitée de ci-dessous par un multiple constant de
N code>, et de ci-dessus,
c * n <= loop_itérations (n) <= c * n code> pour certains
0.
ce moyen de compexité pour cela it O (n) ??
@Olicharlesworth math.stackexchange.com/questions/401937/...
Lorsque l'incrément / décrémentation d'une boucle est multiplication / division, nous disons que c'est une boucle logarithmique.