Veuillez expliquer que la fonction an + b appartient à O (n ^ 2) et Θ (n)?


12

Disons que j'ai une fonction linéaire f(n)= an+b, quelle est la meilleure façon de prouver que cette fonction appartient à O (n 2 ) et Θ(n)?

Je n'ai pas besoin de rigueur mathématique ici. J'ai besoin d'une réponse des programmeurs. Une façon logique d'expliquer.

C'est précisément la raison pour laquelle je n'ai pas posté la question dans les questions-réponses mathématiques et plutôt dans les questions-réponses des programmeurs.


2
@EmmadKareem Dans la littérature, la notation Big O est souvent utilisée avec désinvolture pour représenter des bornes étroites qui est fondamentalement Θ (n). Big O est en fait la limite supérieure.
Geek

1
@EmmadKareem "la limite supérieure de O (n) n'est pas n * n." ,, il n'y a pas de limite supérieure de O (n). O (n) définit lui-même la limite supérieure. Il peut en fait contenir un ensemble de fonctions qui remplissent la condition: f (x) ∈ O (g (x)) car il existe c> 0 (par exemple c = 1) et x0 (par exemple x0 = 5) de telle sorte que f (x ) <cg (x) chaque fois que x> x0.
Geek

2
@EmmadKareem En fait O (n) \ sous-ensemble O (n ^ 2) \ sous-ensemble O (n ^ 3) et ainsi de suite, donc f \ dans O (n ^ 2) par transitivité de \ sous-ensemble. Notez que \ subset n'est pas \ subseteq.
scarfridge

6
"J'ai besoin d'une réponse des programmeurs. Une façon logique d'expliquer." - bien comment définissez-vous "logique"? Les mathématiques sont logiques. Rien de moins qu'une réflexion rigoureuse est faux ici. Vous pouvez essayer d'expliquer le sujet, mais sans digérer les mathématiques (autrement pas difficiles) derrière, vous ne l'obtiendrez pas réellement - vous aurez seulement un sens brumeux de ce que cela signifie.
Tamás Szelei

2
@Geek: Je suppose que tu veux dire les mathématiques ? cs.SE serait également une bonne adresse.
Raphael

Réponses:


20

La notation Big Oh (O, Theta, Omega) concerne les taux de croissance des fonctions.

Lorsque vous implémentez un algorithme, il a une certaine caractéristique sur la façon dont le runtime change lorsque vous augmentez le jeu de données. Maintenant, vous pouvez optimiser l'algorithme pour qu'il s'exécute plus rapidement d'un facteur 100. Bien sûr, c'est très bien, mais essentiellement, c'est toujours le même algorithme. De même, dans quelques années, les ordinateurs peuvent être deux fois plus rapides qu'aujourd'hui.

La notation Landau résume ces facteurs constants. Peu importe si un algorithme fest toujours deux fois plus rapide qu'un autre algorithme g: gpeut-être peut-être optimisé pour fonctionner 4 fois plus rapidement, ou vous pourriez être en mesure d'acheter du matériel plus rapide à la place. Si vous regardez les choses sous cet angle, vous pourriez dire qu'elles sont «les mêmes». (Cela ne veut pas dire que vous pouvez (toujours) ignorer des facteurs constants dans la pratique.)

Big oh spécifie une limite supérieure, c'est similaire à la <=relation.

Vous conviendrez que 1 < 2c'est vrai. Est-ce à dire que 1cela ne peut pas être inférieur à tout autre nombre? Certainement pas. Il y a une quantité infinie de nombres plus grands que 1.

Avec des taux de croissance, c'est similaire. O(n)désigne l'ensemble de toutes les fonctions, qui croissent linéairement (ou plus lentement). O(n^2)d'autre part dénote toutes ces fonctions, qui croissent avec une compelxité quadratique (ou plus lente). Je suis sûr que vous conviendrez qu'une fonction linéaire croît plus lentement qu'une fonction quadratique.

C'est pourquoi une fonction peut être dans plus d'une classe "Big-oh".

Voici une comparaison de différentes fonctions avec contraintes: (à partir des mathématiques concrètes de Knuth)

comparaisons de taux de croissance

De gauche à droite, les fonctions se développent plus rapidement.

En outre, ce entrez la description de l'image iciqui signifie que n ^ 2 croît plus rapidement que n ^ 1 car 2> 1.

Définitions

définition Omega

"f croît plus vite ou aussi vite que g"

définition grand Oh

"f croît plus lentement ou aussi vite que g"

définition Theta

La combinaison des deux ci-dessus. Il dit que la fonction se fdéveloppe "tout aussi rapidement" que g. C'est une relation d'équivalence.

Interprétation

Disons que vous avez deux algorithmes, fet g.

Oméga

En supposant f pas dans Theta de g, f en oméga de gsignifie que peu importe votre budget, il n'y a pas quantité constante de puissance de calcul que vous pouvez ajouter à votre système, de sorte que ftoujours courir aussi vite que g.

Grand oh

En supposant f pas dans Theta de g, f dans Big Oh de gsignifie que si vous avez suffisamment de données, ftoujours courir plus vite que g, peu importe combien de puissance de calcul que vous ajoutez à votre système.

Preuve

Si vous essayez vraiment de le prouver, vous devez montrer en utilisant les définitions de la notation Landau que votre fonction remplit les conditions nécessaires.

Vous avez donc besoin de trouver des valeurs pour c, d, de n_0telle sorte que la condition est.

Voici comment vous pouvez le faire pour la borne inférieure avec c:

preuve

Il est important de réaliser, que je définissant arbitrairement ccomme étant plus petit que a-1parfaitement bien. La définition de Theta (g) dit qu '"il existe un c". Il peut s'agir de n'importe quelle valeur tant qu'elle est supérieure à 0. (S'il as'agit d'un nombre réel positif, vous devrez toutefois modifier légèrement la preuve, car elle a - 1pourrait en fait être négative)

(Je suppose aêtre positif, sinon la fonction sera toujours négative pour les grandes valeurs de n, ce qui n'a aucun sens pour une fonction désignant le temps d'exécution.)

Vous pouvez essayer de le faire pour la limite supérieure, c'est assez similaire. Si vous ne savez pas comment, je peux vous fournir une preuve.

Astuce: commencez par d > a + 1

Attention

Il est important de ne pas le prouver dans le mauvais sens. Si vous supposez que (an + b) est dans O (n) et continuez à partir de là, vous n'avez pas prouvé ce que vous vouliez. Vous devrez vérifier que toutes vos étapes vont dans les deux sens, c'est-à-dire au lieu de =>vous <=>.


2
C'est ça. Dommage que les gens paniquent à cause des mathématiques, c'est très simple en fait.
Tamás Szelei

Etats question: « Je ne pas besoin de rigueur mathématique ici je besoin d' une réponse de programmeurs .... » notation utilisé dans cette réponse ne ressemble pas à un bon ajustement pour la question
moucheron

1
@gnat Hmm, je pensais que la question disait "prouver" à un moment donné. Quoi qu'il en soit, j'ai ajouté des interprétations pour les définitions mathématiques.
phant0m

@ phant0m grande réponse. exactement ce que je cherchais. Les maths dans la réponse l'ont rendu plus solide, même si "maths" n'était pas spécifiquement demandé dans la question d'origine. Merci beaucoup.
Geek

@ Geek, je suis content que vous l'aimiez. Si vous avez d'autres questions, n'hésitez pas à me les poser et je pourrai clarifier / développer ma réponse.
phant0m

5

Lorsque vous traitez avec des polynômes, vous ne vous souciez que du degré du polynôme. Autrement dit, an + bvous ne vous souciez que de n. Si c'était le cas an^3 + bn^2 + cn + d, vous ne vous en soucieriez que n^3.

Ainsi, un polynôme de degré d sera toujours présent Θ(n^d). Facile.

Maintenant, nous devons parler de la différence entre Θ et O. Essentiellement, c'est la même différence qu'entre ==et <=respectivement. Θ(n)Cela signifie donc qu'il est toujours dans un facteur constant de n. O(n)signifie qu'il est toujours soit dans un facteur constant de nou inférieur à n.

Cela signifie que toute fonction dans Θ(s), pour tout s, sera également dans O(s). De plus, si une fonction est dans Θ(s)et sest toujours inférieure à une autre fonction t, cette fonction est dans O(t)mais pas Θ(t).

Par souci d'exhaustivité, il y en a aussi Ω(n). Si Θreprésente ==et Oreprésente <=, Ωreprésente >=. Il en an + bva de même pour Ω(1), Θ(n)et O(n^2).

Comme je l'ai dit plus tôt, il est vraiment facile de comprendre dans quoi se trouvent les polynômes de classe - il suffit de regarder le degré. Il existe également d'autres fonctions faciles à utiliser.

Toutes les fonctions sous la forme de a^bnpour arbitraire aet bsont dans Θ(a^n). Pour toute valeur c >= a, ils sont dedans O(c^n). Chaque polynôme est dedans O(2^n). Essentiellement, cela dit simplement que les fonctions exponentielles battent toujours les polynômes et que la base de la fonction exponentielle est importante.

Les logarithmes sont le contraire. Pour l'un, log_b nc'est Θ(log n)pour tout b. Cela signifie que la base n'a pas d'importance pour les logarithmes. Cela a du sens parce que la commutation entre différentes bases dans les logarithmes se multiplie simplement par une constante. Les fonctions logarithmiques sont également O(n)présentes - c'est-à-dire qu'une fonction logarithmique est plus petite que n'importe quel polynôme (au moins de degré 1).

Compte tenu de la somme de ces fonctions, la plus importante "gagne". Il en n + log nva de même Θ(n)parce que le nterme domine le log nterme. La multiplication est plus compliquée. Pour CS, la seule chose que vous devez savoir nlog nest entre net n^2.


1
assez bien. Si je me souviens bien, l'explication est aussi proche du manuel de conception d'algorithmes classique que possible
gnat

1
@Tikhlon nice write up.So +1. Mais celle que j'ai acceptée était encore meilleure.
Geek

-2

Sans utiliser beaucoup de mathématiques, vous prenez la fonction f (n) = an + b et supprimez toutes les constantes, donc cela ressemble à ceci f (n) = n, puis vous prenez le "n" avec le plus haut degré comme réponse QED Θ (n)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.