(puisque c'est une réponse plus longue, lisez les caractères gras pour un résumé )
Prenons votre exemple et parcourons-le étape par étape, en comprenant le but derrière ce que nous faisons. Nous commençons par votre fonction et le but de trouver sa notation Big Oh:
f(n) = 6n+4
Tout d'abord, soyons O(g(n))
la notation Big Oh que nous essayons de trouver f(n)
. A partir de la définition de Big Oh, nous devons trouver une simplifiée g(n)
où il existe des constantes c
et n0
où c*g(n) >= f(n)
est vrai pour tous n
est supérieur à n0
.
Tout d'abord, choisissons g(n) = 6n + 4
(ce qui donnerait O(6n+4)
en Big Oh). Dans ce cas, nous voyons que c = 1
et toute valeur de n0
répondra aux exigences mathématiques de notre définition de Big Oh, car g(n)
toujours égale à f(n)
:
c*g(n) >= f(n)
1*(6n + 4) >= 6n + 4 //True for all n's, so we don't need to pick an n0
À ce stade, nous avons satisfait aux exigences mathématiques. Si nous nous arrêtions àO(6n+4)
, il est clair que ce n'est pas plus utile que d'écrire f(n)
, donc cela manquerait le vrai but de la notation Big Oh: comprendre la complexité temporelle générale d'un algorithme! Passons donc à l'étape suivante: la simplification.
Tout d'abord, pouvons-nous simplifier 6n
le Big Oh O(4)
? Non! (Faites de l'exercice pour le lecteur s'il ne comprend pas pourquoi)
Deuxièmement, pouvons-nous simplifier le 4
pour que le Big Oh soit O(6n)
? Oui! Dans ce cas g(n) = 6n
, alors:
c*g(n) >= f(n)
c*6n >= 6n + 4
À ce stade, choisissons c = 2
car le côté gauche augmentera plus rapidement (de 12) que le côté droit (de 6) pour chaque incrément de n
.
2*6n >= 6n + 4
Maintenant, nous devons trouver un positif n0
où l'équation ci-dessus est vraie pour tous n
supérieure à cette valeur. Comme nous savons déjà que le côté gauche augmente plus vite que le droit, tout ce que nous avons à faire est de trouver une solution positive. Ainsi, puisque n0 = 2
rend ce qui précède vrai, nous savons que g(n)=6n
, ou O(6n)
est une notation Big Oh potentielle pour f(n)
.
Maintenant, pouvons-nous simplifier le 6
pour que le Big Oh soit O(n)
? Oui! Dans ce cas g(n) = n
, alors:
c*g(n) >= f(n)
c*n >= 6n + 4
Choisissons c = 7
car la gauche augmenterait plus vite que la droite.
7*n >= 6n + 4
Nous voyons que ce qui précède sera vrai pour tous n
supérieurs ou égaux à n0 = 4
. Ainsi, O(n)
est une notation Big Oh potentielle pour f(n)
. Pouvons-nous encore simplifier g(n)
? Nan!
Enfin, nous avons constaté que la notation Big Oh la plus simple pour f(n)
est O(n)
. Pourquoi avons-nous traversé tout cela? Parce que maintenant nous savons que f(n)
c'est linéaire , car c'est la notation Big Oh qui est de complexité linéaire O(n)
. La bonne chose est que nous pouvons maintenant comparer la complexité temporelle de f(n)
à d'autres algorithmes! Par exemple, nous savons maintenant que f(n)
est de temps complexité comparable aux fonctions h(n) = 123n + 72
, i(n) = n
, j(n) = .0002n + 1234
, etc; car en utilisant le même processus de simplification décrit ci-dessus, ils ont tous une complexité temporelle linéaire de O(n)
.
Sucré!!!