Ja. Es endet etwas früher als das auf der Referenzseite, aber ich bin mir nicht sicher, aber ich muss eine Notiz hinterlassen. Referenz 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
####Vorbereitung der Speicherauslastung und Betriebszeitprüfung
from guppy import hpy
import time
start = time.clock()
h = hpy()
####Bis hierher
#Es scheint gepostet zu sein
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))
####Speichernutzung und Betriebszeitausgabe
end = time.clock()
print (h.heap())
print (end - start)
fib (n) und fib2 (n) sind die ersten und fib3 (n) ist das Muster, das ich mit eval ausprobiert habe. Ich bin mir nicht sicher, da die Methode zum Extrahieren des Berechnungsergebnisses bei Verwendung von eval unterschiedlich ist. Ich weiß es nicht.
Funktion | Verarbeitungszeit | F(3)Der Wert des |
---|---|---|
fib() | 0.008658 Sekunden | 2 |
fib2() | 0.011694 Sekunden | 2 |
fib3() | 0.011055 Sekunden | 2 |
Funktion | Verarbeitungszeit | F(10)Der Wert des |
---|---|---|
fib() | 0.010526 Sekunden | 55 |
fib2() | 0.008879 Sekunden | 55 |
fib3() | 0.011909 Sekunden | 55 |
Funktion | Verarbeitungszeit | F(35)Der Wert des |
---|---|---|
fib() | 5.782845 Sekunden | 9227465 |
fib2() | 0.011936 Sekunden | 9227465 |
fib3() | 0.010569 Sekunden | 9227465 |
Muster 1 scheint viel Zeit in Anspruch zu nehmen. .. .. Das war's. Es macht keinen Sinn, das Berechnungsergebnis zu schreiben, und da es eine große Zahl wie ein Narr sein wird, werde ich danach nur die Verarbeitungsgeschwindigkeit aufschreiben.
Funktion | Verarbeitungszeit | F(50)Der Wert des |
---|---|---|
fib() | 7997.16923 Sekunden | - - |
fib2() | 0.009155 Sekunden | - - |
fib3() | 0.010594 Sekunden | - - |
Sie müssen Muster 1 nicht mehr ausprobieren. .. .. ..
Funktion | Verarbeitungszeit | F(10000)Der Wert des |
---|---|---|
fib2() | 0.376591 Sekunden | - - |
fib3() | 0.111379 Sekunden | - - |
fib5() | 0.012429 Sekunden | - - |
Funktion | Verarbeitungszeit | F(100000)Der Wert des |
---|---|---|
fib2() | 215.1977 92 Sekunden | - - |
fib3() | 1.23247 Sekunden | - - |
fib5() | 0.176561 Sekunden | - - |
Funktion | Verarbeitungszeit | F(500000)Der Wert des |
---|---|---|
fib3() | 10.0645 15 Sekunden | - - |
fib5() | 3.950023 Sekunden | - - |
Bonus ・ Wenn n = 777777 fib5() Verarbeitungsgeschwindigkeit 9.299923
Es scheint, dass das Format und die Vergleichsmethode möglicherweise nicht fair sind. Wenn ich mich daran erinnern muss, wie man einige Muster schreibt und mir Gedanken über die Verarbeitungsgeschwindigkeit macht, frage ich mich, welches Muster schneller ist.
13/12/15 Ja. Die gemessenen Werte für `` `a, b = b, a + b```, die ich in den Kommentaren erhalten habe, wurden der Tabelle in der Spalte von fib5 () hinzugefügt.