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
n≤∑k=1nk1/k≤n+O(n1/3)
Cela signifie qu'il existe un certain de telle sorte quef∈O(n1/3)
n≤∑k=1nk1/k≤n+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)∑nk=1k=∑nk=1O(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))h∈O(g)∑nk=1h(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.