(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 cet n0où c*g(n) >= f(n)est vrai pour tous nest 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 = 1et toute valeur de n0ré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 6nle Big Oh O(4)? Non! (Faites de l'exercice pour le lecteur s'il ne comprend pas pourquoi)
Deuxièmement, pouvons-nous simplifier le 4pour 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 = 2car 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 n0où l'équation ci-dessus est vraie pour tous nsupé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 = 2rend 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 6pour 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 = 7car la gauche augmenterait plus vite que la droite.
7*n >= 6n + 4
Nous voyons que ce qui précède sera vrai pour tous nsupé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é!!!