Étant donné un ordinateur rapide et lent, à quelles tailles l'ordinateur rapide exécutant un algorithme lent bat-il l'ordinateur lent exécutant un algorithme rapide?


8

La source de cette question provient d'un cours de premier cycle que je suis, qui couvre une introduction à l'analyse des algorithmes. Ce n'est pas pour les devoirs, mais plutôt une question posée dans CLRS.

Vous avez une machine lente fonctionnant à x MIPS, et une machine rapide fonctionnant à yMIPS. Vous avez également deux algorithmes de la même classe, mais des complexités de temps d'exécution différentes: un algorithme "lent" s'exécute àT(n)=c1n2 alors qu'un algorithme "rapide" fonctionne à T(n)=c2nlogn.

Vous exécutez l'algorithme lent sur la machine rapide et l'algorithme rapide sur la machine lente. Quelle est la plus grande valeur de n telle que la machine rapide exécutant l'algorithme lent bat la machine lente exécutant l'algorithme rapide?

Ma solution jusqu'à présent:

Trouvez l'ensemble de tous n tel que

c2nlognx>c1n2y
n est un nombre naturel.

Voici mon travail jusqu'à présent:

{n:c2nJournal2nX>c1n2y,nN}={n:n<c2yc1XJournal2n,nN}

La seule solution qui me vient à l'esprit maintenant est de brancher et de brancher toutes les valeurs de n jusqu'à ce que je trouve le premier n où

n<c2yc1xlog(n)

ne tient plus.


3
C'est vraiment plus une question de mathématiques qu'une question d'informatique. Si vous remplacezn avec x alors vous avez une équation transcendantale sur les réels, que vous ne pouvez pas vraiment réduire à une solution de forme fermée pour x. Une fois que vous avez trouvé unx, votre réponse est xarrondi à l'entier le plus proche. En d'autres termes, "plug-n-chug" ou "guess-and-check" est à peu près aussi bon que vous pouvez le faire dans le cas général. Cela se manifeste généralement sous forme de méthodes graphiques ou numériques.
Patrick87

Réponses:


2

Considérez votre dernière inégalité:

n<c2yc1xlog(n)

Maintenant, Clogn avec C=c2yc1xest une fonction concave . Par conséquent, il y a au plus deux intersections, et une seule d'entre elles vous intéresse; c'est-à-dire, résoudre

n=Clog(n)

et découvrir quel algorithme est plus rapide dans quel intervalle en calculant simplement les valeurs de fonction respectives à un certain point dans l'intervalle respectif.

Il est vrai que résoudre cette égalité de manière explicite est difficile / impossible. Pour certains fixesC, l'algèbre informatique vous donne une expression dans une fonction bien connue; intéressante (réelle) intersection se révèle être à

n=eW1(ln2C)

si Celn2, avec Wkla poursuite analytique de la fonction de journal de produit . Cette fonction n'a pas une belle forme fermée, mais elle peut être évaluée numériquement pourC; par exemple, vous obtenez116,74 pour C=17.


Juste pour m'assurer: avez-vous interprété mon équation comme ayant le logarithme naturel ou log-base-2? Je dois préciser que chaque instance de log (n) est de base 2 et modifiera la question de manière appropriée.
DoggoDougal

Dans CS, nous utilisons généralement log=log2, alors que les mathématiciens supposent log=ln. Par conséquent, là où j'utiliselog c'est pour baser 2, des exceptions sont notées. C'est (probablement) oùln2vient du résultat.
Raphael
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.