J'ai un problème de devoirs pour ma classe d'algorithmes me demandant de calculer la taille maximale d'un problème qui peut être résolu dans un nombre donné d'opérations en utilisant un algorithme O (n log n) (c'est-à-dire: n log n = c). J'ai été capable d'obtenir une réponse approximative, mais y a-t-il un moyen propre d'obtenir une réponse exacte?Comment calculer n log n = c
Répondre
Il n'y a pas de formule fermée pour cette équation. En gros, vous pouvez transformer l'équation:
n log n = c
log(n^n) = c
n^n = exp(c)
Ensuite, cette équation a une solution de la forme:
n = exp(W(c))
où W est Lambert W function (voir en particulier "Exemple 2"). Il a été prouvé que W
ne peut pas être exprimé en utilisant des opérations élémentaires. Toutefois, f(n)=n*log(n)
est une fonction monotone. Vous pouvez simplement utiliser bissectrice (ici en python):
import math
def nlogn(c):
lower = 0.0
upper = 10e10
while True:
middle = (lower+upper)/2
if lower == middle or middle == upper:
return middle
if middle*math.log(middle, 2) > c:
upper = middle
else:
lower = middle
la notation O vous donne seulement le plus grand terme de l'équation. Par exemple, la performance de votre algorithme O (n log n) pourrait être mieux représentée par c = (n log n) + n + 53.
Cela signifie que sans connaître la nature exacte de la performance de votre algorithme, vous ne Ne pas être en mesure de calculer le nombre exact d'opérations nécessaires pour traiter une quantité donnée de données.
Mais il est possible de calculer que le nombre maximum d'opérations nécessaires pour traiter un ensemble de données de taille n est supérieur à un certain nombre, ou inversement que le plus gros problème peut être résolu, en utilisant cet algorithme et ce nombre des opérations, est inférieure à un certain nombre.
La notation O est utile pour comparer les 2 algorithmes, soit une O (n^2) algorithme est plus rapide qu'un O (n^3) algorithme etc.
voir Wikipedia pour plus d'informations.
Oui, le calcul des racines de "n Log [n] == c" n'est pas équivalent à "calculer la taille maximale d'un problème ..." –
Votre explication est vraie, mais pour ce problème particulier, nous sommes autorisés à supposer que l'algorithme est exactement n log n. J'aurais probablement dû le dire dans le problème. – jlewis42
- 1. Comment visualisez-vous la différence entre O (log n) et O (n log n)?
- 2. O (N log N) Complexité - Similaire à linéaire?
- 3. Regex (C#): Remplacer \ n avec \ r \ n
- 4. Bit twiddling en C: comment convertir 2^N en N?
- 5. Comment modéliser une relation n-à-n en Objective-C?
- 6. Existe-t-il un terme abrégé pour O (n log n)?
- 7. Matlab: comment calculer le « déterminant » d'une matrice N * N dans Matlab
- 8. comment changer \\ n en \ n en perl
- 9. Générer des nombres aléatoires de -n à n dans C
- 10. En analyse asymptotique, Montrer que: - O (f (n) + g (n)) = O (max {f (n), g (n)})
- 11. Disposition de n objets dans un carré n x n
- 12. Démontrer ou réfuter n^2 - n + 2 ∈ O (n)
- 13. n * n table vs (n^2) * 3 table dans mysql
- 14. Algorithme C++ pour N! commandes
- 15. Perl regexp/(\ r \ n | \ r | \ n)/
- 16. ADO.NET Entity Framework: relations QUERY n-n
- 17. différence entre PHP \ r \ n \ n
- 18. Comment utiliser RewriteCond% N
- 19. SQL Server: Comment indexer au mieux une table N-N?
- 20. Comment supprimer une relation auto-référencée n: n dans Doctrine?
- 21. Comment gérer les relations n: n avec Rails?
- 22. Calculer les bénéfices plus rapidement que O (n!)
- 23. Trouver une paire d'éléments de tableau avec une somme et un produit donnés dans O (n * log (n))
- 24. Cross rejoindre (pivot) avec table n-n contenant des valeurs
- 25. clé étrangère et la relation n à n
- 26. Symfony: ajouter des widgets à la volée pour les relations 1-n/n-n?
- 27. n-Layered Design Confusion
- 28. Remplacer \ n avec \ r \ n dans le fichier Unix
- 29. Architecture entité et N-Tier en C#
- 30. Comment dessiner N premiers éléments?
c/ProductLog [c]? –