J'ai écrit un code qui ressemble à ceci:Ruby Maths Fonction Memoization
def get(x, y)
@cachedResults.set(x,y, Math.hypot(x, y)) if @cachedResults.get(x,y).nil?
@cachedResults.get(x,y)
end
Où @cachedResults contenaient une classe Array 2D je l'ai écrit (en quelques minutes) et le but de cette fonction est de vous assurer que Je n'ai jamais besoin d'appeler Math.hypot deux fois pour n'importe quel (x, y). [Cela pourrait être optimisé davantage en utilisant la symétrie et d'autres choses, mais peu importe]
J'ai donc appelé la fonction et l'ai fait fonctionner 160000 fois; il a couru dans un peu plus de 15 secondes. Ensuite, pour voir combien il était plus rapide que la version non memoized, j'ai changé le code à ceci:
def get(x, y)
Math.hypot(x, y)
end
Et, à ma grande surprise, il a fallu un peu plus de 15 secondes pour courir à nouveau. Le même moment. Donc, ma question est, sont les fonctions mathématiques en ruby naturellement Memoized? Et, dans l'affirmative, dans quelle mesure le rubis est-il mémorisé?
(Sinon, pourquoi pensez-vous que je reçois ce résultat toujours?)
+1 - ne jamais optimiser avant de déterminer où le code passe réellement son temps. –
Je seconde la déclaration de Sarah. Je voulais juste utiliser la mémo native au lieu d'en créer une nouvelle. – khelll
Je suis d'accord avec la déclaration de Sarah. Je le savais mais je pensais que je serais intelligent quand même. Pas un mouvement intelligent. Et votre ventilation est parfaitement logique, donc je la marque comme la réponse. Je suis trop nouveau avec ruby, je dois jouer avec un peu plus jusqu'à ce que je puisse le juger correctement. Encore, merci. –