Les fonctions sont-elles toujours asymptotiquement comparables?

15

Lorsque nous comparons la complexité de deux algorithmes, il arrive généralement que f(n)=O(g(n)) ou (éventuellement les deux), où et sont les temps d'exécution (par exemple) des deux algorithmes.f gg(n)=O(f(n))fg

Est-ce toujours le cas? Autrement dit, au moins une des relations f(n)=O(g(n)) et g(n)=O(f(n)) toujours valable, c'est-à-dire pour les fonctions générales f , g ? Sinon, quelles hypothèses devons-nous faire et (pourquoi) est-ce correct quand nous parlons des temps d'exécution des algorithmes?

Raphael
la source

Réponses:

21

Toutes les paires de fonctions ne sont pas comparables à la notation ; considérons les fonctions f ( n ) = n et g ( n ) = { 1 si  n  est impair , n 2 si  n  est pair . De plus, des fonctions comme g ( n ) apparaissent en fait comme des temps d'exécution d'algorithmes. Considérez l'algorithme de force brute évident pour déterminer si un entier donné n est premier:O()f(n)=n

g(n)={1if n is odd, n2if n is even.
g(n)n
IsPrime(n):
  for i ← 2 to (n-1)
     if i·⌊n/i⌋ = n
        return False
  return True

Cet algorithme nécessite opérations arithmétiques lorsque n est pair, O ( Θ(1)n opérations lorsque n est composite, mais Θ ( n ) opérations lorsque n est premier. Ainsi, formellement, cet algorithme estincomparableavec un algorithme qui utiliseO(n)nΘ(n)n opérations arithmétiques pourchaquen.n n

La plupart du temps, lorsque nous analysons des algorithmes, nous voulons uniquement une borne supérieure asymptotique de la forme pour une fonction f relativement simple. Par exemple, la plupart des manuels rapportent simplement (et correctement) lesexécutions dansles opérations arithmétiques O ( n ) . Les fonctions limites supérieures typiques sont des produits d'exponentielles, de polynômes et de logarithmes (bien que des bêtes plus exotiques comme les factorielles et leslogarithmes itérésapparaissent également occasionnellement). Il n'est pas difficile de prouver que deux de ces fonctions sont comparables.O(f(n))fIsPrime(n)O(n)

Voir aussi cette question MathOverflow .

JeffE
la source
7

De wikipedia, définition de la grande notation O:

si et seulement s'il y a une constante positive M telle que pour toutes les valeurs suffisamment grandes de , f ( x ) soit au plus M multiplié par g ( x ) en valeur absolue. Autrement dit, f ( x ) O ( g ( x ) ) si et seulement s'il existe un nombre réel positif Mxf(x)g(x)f(x)O(g(x))M et un nombre réel tels quex0

|f(x)|<=M|g(x)|for allx>x0

Que se passe-t-il pour les fonctions qui ne convergent pas (vers une constante ni l'infini)?

Regardez les fonctions et g ( x ) = 10f(x)=|xsin(x)|g(x)=10

pour chaque , il y a quelques x > x 0 , tels que x = k π , donc f ( x ) = 0 - donc pour chaque M - M fx0x>x0x=kπf(x)=0MMf(x)>g(x) donnera faux, et g(x)O(f(x))

Cependant, il est facile de voir que n'est pas non plus limité par une constante, donc pour chaque M , x 0 , il y a quelques x > x 0 tels que f ( x ) < M g ( x ) donnera également faux, et f|xsin(x)|Mx0x>x0f(x)<Mg(x)f(x)O(g(x))

Remarque: pour la définition d'un grand O qui permet une différence constante maximale entre et g ( x ) , la même idée s'appliquera avec g ( x ) = log ( xMf(x)g(x)g(x)=log(x)

amit
la source
6

Voici une paire monotone fonctions qui ne sont pas asymptotiquement comparables. Ceci est pertinent car la plupart des complexités qui se posent dans la pratique sont en fait monotones.

f(x)=Γ(x+1)=x!
g(x)=Γ(x1/2+3/2)

Γ

Ambroz Bizjak
la source
4

Lexp(2logx+loglogx)/x2f,gLf=o(g)f=ω(g)f/g tend vers une constante. Voir page 18 de son livre "Ordres de l'infini".

Le résultat est que deux fonctions "simples" se produisant dans l'analyse de l'algorithme sont comparables. Ici, «simple» signifie qu'il n'y a pas de définition par cas (à part un nombre fini de cas de base), et qu'aucune fonction surprenante n'apparaît, comme la fonction Ackermann inverse qui figure parfois dans les temps d'exécution.

Yuval Filmus
la source
Agréable! Il est à noter, cependant, que les éléments périodiques se produisent fréquemment dans l'analyse de cas moyen (de l'algorithme d & c). Celui que je connais est lié des deux côtés par des constantes, donc ils ne nuisent pas à la comparabilité asymptotique.
Raphael