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.
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