Qu'est-ce qui ne va pas avec des sommes de termes Landau?

14

J'ai écrit

je=1n1je=je=1nO(1)=O(n)

mais mon ami dit que c'est faux. De la feuille de triche TCS, je sais que la somme est également appelée qui a une croissance logarithmique en . Donc ma limite n'est pas très nette, mais est suffisante pour l'analyse dont j'avais besoin.Hnn

Qu'ai-je fait de mal?

Edit : Mon ami dit qu'avec le même raisonnement, nous pouvons prouver que

je=1nje=je=1nO(1)=O(n)

Maintenant, c'est évidemment faux! Qu'est-ce qui se passe ici?

Raphael
la source
2
Voir une discussion sur les balises de cette question ici .
Raphael
méta discussion sur les algorithmes de balises .
Kaveh
Voir également un traitement plus concret d'un exemple courant: quel est le temps d'exécution asymptotique de cette boucle imbriquée?
Gilles 'SO- arrête d'être méchant'

Réponses:

10

Ce que vous faites est un abus de notation très commode.

Certains pédants diront que ce que vous écrivez est un non-sens, car désigne un ensemble et vous ne pouvez pas effectuer d'opérations arithmétiques sur eux comme vous le faites.O(f)

Mais c'est une bonne idée d'ignorer ces pédants et de supposer que représente un membre de l'ensemble. Donc, quand nous disons f ( n ) = g ( n ) + O ( n ) , ce que nous voulons vraiment dire si cela f ( n ) - g ( n ) O ( n ) . (Remarque: certains pédants pourraient également trembler à cette déclaration, affirmant que f ( n ) est un nombre et fO(f)f(n)=g(n)+O(n)f(n)g(n)O(n)f(n)f est la fonction!)

Cela rend très pratique l'écriture d'expressions comme

nk=1nk1/kn+O(n1/3)

Cela signifie qu'il existe un certain de telle sorte quefO(n1/3)

nk=1nk1/kn+f(n)

Dans votre cas de

k=1n1k=k=1nO(1)=O(n)

vous en abusez encore plus et vous devez être prudent.

Il y a deux interprétations possibles ici: l' référence à une fonction de n , ou à une fonction de k ?O(1)nk

Je crois que la bonne interprétation est de l'interpréter en fonction de .k

Si vous essayez de le penser en fonction de , pensé comme incorrect, cela pourrait conduire à des erreurs potentielles, comme penser que k est O ( 1 ) et essayer d'écrire n k = 1 k = n k = 1 O ( 1 )nkO(1)k=1nk=k=1nO(1)

Si vous essayez de le considérer comme une fonction de , alors il est vrai que si f = O ( g ) (comme l'argument va à ) et que g n'est jamais 0 , celakf=O(g)g0

S(n)=k=1nf(k)=k=1nO(g(k))=O(k=1n|g(k)|)

Notez qu'au milieu, nous avons utilisé l'abus commode de la notation pour signifier que pour une fonction h O ( g ) la somme est n k = 1 h ( k ) . Notez que la fonction finale à l'intérieur du O se réfère à une fonction de n . La preuve n'est pas si difficile, mais vous devez tenir compte du fait que vous avez affaire à une borne supérieure asymptotique (c'est-à-dire pour des arguments suffisamment grands), mais la somme commence juste à 1 .O(g(k))hO(g)k=1nh(k)On1

Si vous essayez de le considérer comme une fonction de , alors il est également vrai que si f = O ( g ) (comme l'argument va à ) alorsnf=O(g)

S(n)=k=1nf(k)=k=1nO(g(n))=O(ng(n))

Votre preuve est donc essentiellement correcte, dans l'une ou l'autre interprétation.

Aryabhata
la source
1
Conclusion: sachez (assurez-vous) que chaque occurrence d'un symbole Landau introduit (a) sa propre constante .
Raphael
8

Ce que vous avez écrit est parfaitement correct. Le ème nombre harmonique est en effet dans l'ensemble O ( n ) .nO(n)

Preuve: . i=1n1ilnn+12n=O(n)

La limite supérieure n'est pas serrée , mais elle est correcte.O(n)

JeffE
la source
4
Bon: 1 / i ≤ 1 = O (1).
JeffE
1
La préoccupation concerne le deuxième signe d'égalité. Comment puis-je vérifier cela?
Raphael
2
Mais c'est aussi correct. Une somme de n termes, dont chacun est O (1), est en effet O (n).
Suresh
2
@Suresh Uniquement si les constantes impliquées par les sont indépendantes de la variable de sommation, et c'est le point ici (question initiale). O
Raphael
2
Le bug n'est pas dans la deuxième égalité. le bug (dans la deuxième expression) concerne la façon dont vous OBTENEZ cette sommation. Partir de est correct. Il prétend que i = O ( 1 ) est faux. Je me rends compte que cela est évident pour toutes les personnes concernées, mais je pense que c'est le problème avec les questions de «semis» :)iO(1)=O(n)i=O(1)
Suresh
6

Pour le deuxième exemple, vous ne pouvez pas prétendre que

i=O(1)

puisque varie avec n . Après quelques étapes, il arrivera que i > n / 2 . Une manière plus appropriée consiste à dire que i = O ( n ) car en effet, tout au long de la sommation, i ne dépasse jamais 1 n . Par ce raisonnement, n i = 1 i = n i = 1 O ( n ) = n O ( n ) = O (ini>n/2i=O(n)i1n

i=1ni=i=1nO(n)=nO(n)=O(n2)

Cependant, la bonne chose à faire est d'utiliser la notation big-O uniquement à la fin. Limitez votre sommation aussi étroitement que possible, et uniquement lorsque vous avez terminé, utilisez les notations asymptotiques pour éviter ces pièges.

A sonné.
la source