web-dev-qa-db-fra.com

Est-ce que 2 ^ n et n * 2 ^ n ont la même complexité temporelle?

Les ressources que j'ai trouvées sur la complexité temporelle ne sont pas claires quant au moment opportun pour ignorer les termes d'une équation de complexité temporelle, en particulier avec des exemples non polynomiaux.

Il est clair pour moi que quelque chose de la forme n2 + n + 1, les deux derniers termes sont insignifiants.

Plus précisément, étant donné deux catégories, 2net n * (2n), le second est-il dans le même ordre que le premier? La multiplication supplémentaire n at-elle une importance? Habituellement, les ressources disent simplement xn est dans une exponentielle et se développe beaucoup plus vite ... puis passez à autre chose.

Je peux comprendre pourquoi ce ne serait pas depuis 2n devancera grandement n, mais comme elles ne sont pas additionnées, la comparaison des deux équations importera beaucoup. En fait, la différence entre elles sera toujours un facteur de n, ce qui semble important pour le moins.

177
matty-d

Pour répondre à cette question, vous devrez passer à la définition formelle du grand O (O).

La définition est que f(x) appartient à O(g(x)) si et seulement si la limite limsupx → ∞ (f(x)/g(x)) existe, c'est-à-dire qu'il ne s'agit pas d'un infini. En bref, cela signifie qu'il existe une constante M, telle que la valeur de f(x)/g(x) ne soit jamais supérieure à M.

Dans le cas de votre question, laissez f(n) = n ⋅ 2n et laissez g(n) = 2n. Alors, f(n)/g(n) est n, ce qui continuera à se développer à l'infini. Par conséquent, f(n) n'appartient pas à O(g(n)).

229
Ivaylo Strandjev

Un moyen rapide de voir que n⋅2ⁿ Est plus gros est de changer de variable. Soit m = 2ⁿ. Ensuite, n⋅2ⁿ = ( log₂m )⋅m (en prenant le logarithme en base 2 des deux côtés de m = 2ⁿ, Vous obtenez n = log₂m), Et vous pouvez facilement montrer que m log₂m Croît plus vite que m.

85
chepner

Je conviens que n⋅2ⁿ N'est pas dans O(2ⁿ), mais je pensais que cela devrait être plus explicite, car la limite d'utilisation supérieure ne tient pas toujours.

Selon la définition formelle de Big-O: f(n) est dans O(g(n)) s'il existe des constantes c > 0 Et n₀ ≥ 0 Telles que pour tout n ≥ n₀ nous avons f(n) ≤ c⋅g(n). On peut facilement montrer qu’il n’existe pas de telles constantes pour f(n) = n⋅2ⁿ et g(n) = 2ⁿ. Cependant, on peut montrer que g(n) est dans O(f(n)).

En d'autres termes, n⋅2ⁿ Est limité par 2ⁿ. C'est intuitif. Bien qu'ils soient tous deux exponentiels et qu'il est donc également peu probable qu'ils soient utilisés dans la plupart des cas pratiques, nous ne pouvons pas dire qu'ils sont du même ordre car 2ⁿ Croît nécessairement plus lentement que n⋅2ⁿ.

10
zpr

Je ne discute pas avec d'autres réponses qui disent que n⋅2ⁿ Croît plus vite que 2ⁿ. Mais la croissance de n⋅2ⁿ N’est encore que de façon exponentielle.

Lorsque nous parlons d'algorithmes, nous disons souvent que la complexité temporelle est exponentielle. Donc, nous considérons être 2ⁿ, 3ⁿ, eⁿ, 2.000001ⁿ Ou notre n⋅2ⁿ Comme un groupe de complexité exponentielle se développe.

Pour lui donner un peu de sens mathématique, on considère qu'une fonction f(x) croît (pas plus vite que) de façon exponentielle s'il existe une telle constante c > 1, Que f(x) = O(cx).

Pour n⋅2ⁿ La constante c peut être n'importe quel nombre supérieur à 2, Prenons 3. Ensuite:

n⋅2ⁿ / 3ⁿ = n ⋅ (2/3)ⁿ et c'est moins que 1 pour tout n.

Donc 2ⁿ Croît plus lentement que n⋅2ⁿ, Le dernier grandit à son tour plus lentement que 2.000001ⁿ. Mais tous les trois croissent de manière exponentielle.

4
Andrey

Vous avez demandé "la seconde est-elle dans le même ordre que la première? La multiplication supplémentaire n at-elle une importance?" Ce sont deux questions différentes avec deux réponses différentes.

n 2 ^ n croît asymptotiquement plus vite que 2 ^ n. C'est cette question a répondu.

Mais vous pourriez vous demander "si l’algorithme A prend 2 nn nanosecondes, et que l’algorithme B prend n 2 ^ n nanosecondes, quelle est la plus grande n où je puisse trouver une solution en une seconde/minute/heure/jour/mois/année? Et les réponses sont n = 29/35/41/46/51/54 contre 25/30/36/40/45/49, peu de différence en pratique.

La taille du plus gros problème pouvant être résolu en temps T est O (ln T) dans les deux cas.

2
gnasher729