Permettez-moi de commencer par une recommandation: traiter la notation Landau comme vous (devriez) traiter l'arrondi: arrondir rarement, arrondir tard. Si vous savez quelque chose de plus précis queO(.), utilisez-le jusqu'à ce que vous ayez terminé tous les calculs, et Landauify à la fin.
Quant à la question, creusons cet abus de notation¹. Comment interpréterions-nous quelque chose commeh∈O(f+O(g))? Nous devons remplacerOavec sa définition de l'intérieur. Donc, nous obtenons
∃g′∈O(g).h∈O(f+g′)
et alors
∃g′∈O(g).∃d>0.∀n.h(n)≤d(f(n)+g′(n))
ce qui équivaut à
∃c>0.∃d>0.∀n.h(n)≤d(f(n)+cg(n)).
Comme certainement² d(f(n)+cg(n))≤cd(f(n)+g(n)), nous voyons que cela équivaut à h∈O(f+g); la perte de précision est ignorée parO en tous cas.
Qu'en est-il des autres combinaisons, disons h∈O(f+Ω(g))? Si nous essayons la même chose ici, nous obtenons
∃g′∈Ω(g).h∈O(f+g′).
Mais c'est une tautologie: hest certainement délimité au-dessus par quelque chose d’arbitrairement grand. Donc, combiner les limites supérieures et inférieures de cette manière n'a pas de sens.
- O(.)et les autres symboles Landau mappent les fonctions aux classes de fonctions. Le nourrir d'une classe de fonction n'est pas immédiatement significatif.
- Du moins si nous considérons uniquement les fonctions positives, que nous pouvons assumer en toute sécurité lorsque nous parlons de temps d'exécution. Je ne suis pas sûr que cela fonctionne en général.