Pourquoi

8

Dans CLRS (aux pages 49-50), quelle est la signification de l'énoncé suivant:

Σi=1nO(i) n'est qu'une seule fonction anonyme (de ), mais n'est pas la même chose queiO(1)+O(2)++O(n), qui n'a pas vraiment d'interprétation. "

kesari
la source
J'ai essayé de formuler votre question plus précisément; Notez également que nous avons un support latex ici afin que vous puissiez écrire des mathématiques bien formatées. Je vous encourage à être plus précis: qu'est-ce qui prête à confusion? Quelle partie cause des problèmes? (Vous pouvez peut-être également modifier le titre de la question en conséquence également).
Juho
1
On peut soutenir que la somme élargie n'a pas non plus d'interprétation; tu devrais écrireO()commencez par.
Raphael
1
Quelqu'un peut-il expliquer le sens voulu de i=1nO(i)? Somme den fonctions d'ordre "i"? Cela n'a pas de sens, car O(i)=O(1). Somme den fonctions indexées par iet d'un certain ordre ??
Yves Daoust

Réponses:

12

Depuis 1+2++n=O(n2), il est tentant de suggérer que O(1)+O(2)++O(n)=O(n2)... mais ce n'est en fait pas valable. La raison en est qu'il peut y avoir une constante différente pour chaque terme dans la somme.

Un exemple

Laissez-moi vous donner un exemple. Considérez les sommesS(1)=12, S(2)=12+22, S(3)=12+22+32, S(4)=12+22+32+42, etc. Notez que12O(1), 22O(2), 32O(3), 42O(4), et ainsi de suite pour chaque terme de la somme. Par conséquent, il serait raisonnable d'écrireS(j)=12++j2 sous la forme S(j)=O(1)++O(j). Pouvons-nous donc conclure queS(j)=O(j2)? Nan. En réalité,S(n)=n(n+1)(2n+1)/6, donc S(n)=Θ(n3).

Si cela n'aide pas, essayons le développement mathématique plus précis suivant:

Une formalisation

Rappelons que l'interprétation de, disons, O(n2) c'est qu'il s'agit d'un ensemble de fonctions non négatives f(n) (à savoir, l'ensemble des fonctions f(n) de telle sorte qu'il existe des constantes c0,d0 tel que f(n)cn2 pour tous nd).

Au plus près nous pouvons arriver à une interprétation de O(1)+O(2)++O(n) c'est que c'est l'ensemble des fonctions de la forme f1(n)+f2(n)++fn(n) tel que f1(n)O(1), f2(n)O(2), ..., fn(n)O(n).

Mais maintenant, les constantes pour chaque fipeut être différent. Ainsi, chaquefi est une fonction non négative fi de telle sorte qu'il existe des constantes ci0,di0 avec fi(n)cii pour tous ndi.

Maintenant, étant donné cela, que pouvons-nous dire g(n)=f1(n)+f2(n)++fn(n)? Pas très utile. Nous savons qu'il existe une constanted=max(d1,d2,,dn) tel que g(n)c11+c22++cnn pour tous nd. Maintenant, que pouvons-nous dire de cette somme? Eh bien, la réponse est que nous ne pouvons rien dire du tout. Il pourrait être arbitrairement important. Il est tentant de laisserc=max(c1,c2,,cn) et dis ça g(n)c(1+2++n)cn2=O(n2)... mais ce n'est pas vraiment correct, car nous avons besoin d'une seule valeur constante de c qui fonctionne pour tous net la valeur max(c1,c2,,cn) est fonction de n, pas une constante.

Donc, il pourrait ne pas y avoir de constante c tel que g(n)c(1+2++n); il pourrait ne pas y avoir de constantec tel que g(n)cn2. Rien ne garantit queg(n)O(n2).

Pour plus de lecture

Voir https://math.stackexchange.com/q/86076/14578 et les termes Sums of Landau revisités pour d'autres questions qui traitent de ce problème général.

DW
la source
2
TLDR: vous voulez qu'ils soient tous les mêmes fO(_)mais ils ne le sont pas, officiellement.
Raphael
1

La raison pour laquelle le commentaire de CLRS prête à confusion est que, techniquement, i=1nO(i)est défini commeO(1)+O(2)+O(n). Ce qui se passe vraiment, c'est que CLRS abuse de la notation par souci de simplicité:

  • O(1)représente un ensemble de fonctions. Il comprend, par exemple,f(n)=1, f(n)=1/n, et f(n)=n1/n.
  • Quand tu écris O(1)+O(2) vous ajoutez techniquement deux ensembles O(1) et O(2)avec une opération de somme . Lorsque cela est fait avec plus d'un nombre constant de termes, cela peut conduire à des comportements inattendus, comme l'explique clairement DW dans une autre réponse.

Au lieu de cela, le CLRS voudrait donc que vous interprétiez i=1nO(i) comme i=1nf(i) où la fonction générique f(i)O(i). Par exemple, ils écriraient quei=1n3i5 est i=1nO(i), ou O(n2).

Ari Trachtenberg
la source
Cette explication n'est pas tout à fait juste. Il n'y a rien de mal à ajouterO(1)+O(2). C'est bien défini.O(1) est un ensemble de fonctions, O(2) est un ensemble de fonctions, et lorsque S,T sont des ensembles de fonctions, S+T est normalement compris comme l'ensemble des fonctions {f(n)+g(n):f(n)S,g(n)T}. C'est ce qui est communément prévu lorsque l' on ajoute deux notations grand-Oh, et tout fonctionne bien aussi longtemps que vous ajoutez seulement deux (ou un nombre constant de) symboles grand-Oh. Lorsque vous rencontrez des problèmes, c'est lorsque le nombre d'additifs n'est pas constant, comme expliqué dans ma réponse.
DW
Je suis d'accord que c'est la définition commune de l'addition d'ensemble et qu'elle est bien définie, bien que je ne pense pas que ce soit ce que l'on entend par utilisation courante. Comme vous le dites correctement dans votre réponse ci-dessus, l'utilisation de l'addition d'ensemble sur plus d'un nombre constant de termes entraîne des problèmes.
Ari Trachtenberg
Je préfère définir O (f (n)) comme un élément anonyme d' un certain ensemble de fonctions, plutôt que l'ensemble lui-même. alorsiO(i) veux dire "if(i) pour une fonction f de telle sorte que ... ", tout en O(1)+O(2)++O(n) veux dire "f1(1)+f2(2)++fn(n) pour certaines fonctions f1,f2,,fntel que ... ". Ce n'est pas du tout la même chose.
JeffE