Quelle fonction grandit plus rapidement, exponentielle (comme 2 ^ n, n ^ n, e ^ n, etc.) ou factorielle (n!)? Ps: je viens de lire quelque part, n! pousse plus vite que 2 ^ n.
n! croît finalement plus vite qu’une exponentielle à base constante (2 ^ n et e ^ n), mais n ^ n croît plus vite que n! puisque la base grandit à mesure que n augmente.
n! = n * (n-1) * (n-2) * ...
n^n = n * n * n * ...
Chaque terme après le premier de n^n
est plus grand, donc n ^ n grandira plus vite.
Les algorithmes de temps factoriels fonctionnent asymptotiquement plus lentement que les algorithmes de temps exponentiels, mais le début de la différence n'est pas clair. Par exemple, pour n=5
et k=10
, 5!=120
est toujours plus rapide que 10^5=10000
. Pour savoir quand les algorithmes à temps exponentiel commencent à être plus performants, nous devons faire une analyse mathématique rapide.
Nous pouvons utiliser la formule de Stirling:
log_k^(n!) ~ nlog_k^n - nlog_k^e
k^n = n!
log_k^{k^n} = log_k^{n!}
n = log_k^{n!}
n ~ nlog_k^n - nlog_k^e
1 ~ log_k^n - log_k^e
log_k^n - log_k^e - 1 ~ 0
log_k^n - log_k^e - log_k^k ~ 0
log_k^{n/(ek)} ~ 0
n/(ek) ~ 1
n ~ ek
Ainsi, une fois que n
aura presque trois fois la taille de k
, les algorithmes factoriels commenceront à s'exécuter plus lentement que les algorithmes exponentiels. Pour la plupart des scénarios réels, nous utiliserons de grandes valeurs de n
et de petites valeurs de k
. En pratique, nous pouvons donc supposer que les algorithmes factoriels sont strictement pires que les exponentiels. algorithmes.