[PYTHON] J'ai essayé d'utiliser eval (a, b) pour Fibonacci, mais ce n'était pas rapide

Oui. Il se termine un peu plus tôt que celui du site de référence, mais je ne suis pas sûr, mais je dois laisser une note. Référence http://d.hatena.ne.jp/sakurai_youhei/20130107/1357568535

op.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-
#from __future__ import print_function
import sys
import io
import re
import math

####Préparation du contrôle de l'utilisation de la mémoire et du temps de fonctionnement
from guppy import hpy
import time
start = time.clock()
h = hpy()
####Jusqu'ici
#Il semble être posté
def fib(n):
    if n < 2: return n
    return fib(n-2) + fib(n-1)

#print fib(50)

def fib2(n):
    a,b=0,1
    return reduce(lambda x,y: x+[x[-1]+x[-2],], xrange(n-1), [a,b])[n]
print fib2(10000)

def fib3(n):
    a,b=0,1
    for i in range(n):
        a,b=b,eval('a+b')
    print a

#print fib3(500000)

#def fib4(n):
#    n+=3
#    f=[(seq.append(seq[i-2] + seq[i-1]), seq[i-2])[1] for seq in [[0, 1]] #for
#            i in range(2, n)]
#    print f[-1]
#print fib4(500000)

def fib5(n):
    a,b=0,1
    for i in range(n):
        a,b=b,a+b
    print a

#print fib5(500000)


#if __name__ == 'main':
#    print(fib(100))


####Utilisation de la mémoire et sortie du temps de fonctionnement
end = time.clock()
print (h.heap())
print (end - start)

fib (n) et fib2 (n) sont les premiers, et fib3 (n) est le modèle que j'ai essayé avec eval. Je ne suis pas sûr car la méthode d'extraction du résultat du calcul est différente lorsque vous utilisez eval. Je ne sais pas.

Quelque chose comme un résultat de comparaison

une fonction temps de traitement F(3)La valeur du
fib() 0.008658 secondes 2
fib2() 0.011694 secondes 2
fib3() 0.011055 secondes 2
une fonction temps de traitement F(10)La valeur du
fib() 0.010526 secondes 55
fib2() 0.008879 secondes 55
fib3() 0.011909 secondes 55
une fonction temps de traitement F(35)La valeur du
fib() 5.782845 secondes 9227465
fib2() 0.011936 secondes 9227465
fib3() 0.010569 secondes 9227465

Le modèle 1 semble prendre beaucoup de temps. .. .. Eh bien c'est ça. Il ne sert à rien d'écrire le résultat du calcul, et comme ce sera un grand nombre comme un imbécile, je n'écrirai que la vitesse de traitement après cela.

une fonction temps de traitement F(50)La valeur du
fib() 7997.16923 secondes -
fib2() 0.009155 secondes -
fib3() 0.010594 secondes -

Vous n'avez plus à essayer le modèle 1. .. .. ..

une fonction temps de traitement F(10000)La valeur du
fib2() 0.376591 secondes -
fib3() 0.111379 secondes -
fib5() 0.012429 secondes -
une fonction temps de traitement F(100000)La valeur du
fib2() 215.1977 92 secondes -
fib3() 1.23247 secondes -
fib5() 0.176561 secondes -
une fonction temps de traitement F(500000)La valeur du
fib3() 10.0645 15 secondes -
fib5() 3.950023 secondes -

prime ・ Lorsque n = 777777 fib5() Vitesse de traitement 9.299923

Il semble que le format et la méthode de comparaison ne soient pas équitables. Eh bien, quand je dois me rappeler comment écrire certains modèles et m'inquiéter de la vitesse de traitement, je me demande quel modèle est le plus rapide.

13/12/15 Oui. Les valeurs mesurées de a, b = b, a + b, que j'ai reçues dans les commentaires, ont été ajoutées au tableau dans la colonne de fib5 ().

Recommended Posts

J'ai essayé d'utiliser eval (a, b) pour Fibonacci, mais ce n'était pas rapide
J'ai essayé d'utiliser Tensorboard, un outil de visualisation pour l'apprentissage automatique
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé de dessiner une ligne en utilisant une tortue
J'ai essayé d'utiliser pipenv, alors prenez note
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé d'utiliser Java avec Termux en utilisant Termux Arch, mais cela n'a pas fonctionné
Quand j'ai essayé de créer un VPC avec AWS CDK mais que je n'ai pas pu le faire
J'ai essayé d'utiliser Pythonect, un langage de programmation de flux de données.
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé d'utiliser Firebase pour le serveur de cache de Django
Je pensais qu'il serait lent d'utiliser l'instruction for dans NumPy, mais ce n'était pas le cas.
J'ai essayé d'utiliser la base de données (sqlite3) avec kivy
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé de créer un projet en utilisant Python sur Docker avec PyCharm, mais cela a fonctionné avec Docker Compose
J'ai essayé d'héberger un exemple de modèle de Pytorch en utilisant TorchServe
J'ai construit une roue pour Windows à l'aide d'actions Github
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai essayé de dessiner une pseudo figure fractale en utilisant Python
J'ai essayé de lire les données d'un fichier en utilisant Node.js.
J'ai essayé un RPA simple pour me connecter avec du sélénium
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
AI Gaming Je l'ai essayé pour la première fois
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
[Git] J'ai essayé de faciliter la compréhension de l'utilisation de git stash en utilisant un exemple concret.
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
Notes diverses sur l'utilisation de python pour les projets
J'ai essayé de créer un bot pour annoncer un événement Wiire
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai créé un éditeur de texte simple en utilisant PyQt
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection
Je souhaite spécifier un fichier qui n'est pas une certaine chaîne de caractères comme cible logrotate, mais est-ce impossible?
[J'ai essayé d'utiliser Pythonista 3] Introduction