はい。
参考先サイト様のものよりやや早く終わるのですがよく分からなかったけどメモ書きは残して置かなければで。
参考先さま
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
#### メモリ使用量と動作時間チェック仕込み
from guppy import hpy
import time
start = time.clock()
h = hpy()
#### 仕込みここまで
# 掲載らしい
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))
#### メモリ使用量と動作時間出力
end = time.clock()
print (h.heap())
print (end - start)
fib(n)とfib2(n)が先さまで、fib3(n)が私がevalで試してみたパターンです。
eval使っているのは計算結果の取り出し方も違いますし、よくわかりません。わからないのです。
比較結果のようなもの
関数 | 処理時間 | F(3)の値 |
---|---|---|
fib() | 0.008658秒 | 2 |
fib2() | 0.011694秒 | 2 |
fib3() | 0.011055秒 | 2 |
関数 | 処理時間 | F(10)の値 |
---|---|---|
fib() | 0.010526秒 | 55 |
fib2() | 0.008879秒 | 55 |
fib3() | 0.011909秒 | 55 |
関数 | 処理時間 | F(35)の値 |
---|---|---|
fib() | 5.782845秒 | 9227465 |
fib2() | 0.011936秒 | 9227465 |
fib3() | 0.010569秒 | 9227465 |
パターンその1は時間が結構かかってしまうように。。。
まぁ、アレです。計算結果って書く意味ないですし、アホみたいに大きな数字になるので以降は処理速度だけメモします。
関数 | 処理時間 | F(50)の値 |
---|---|---|
fib() | 7997.16923秒 | ー |
fib2() | 0.009155秒 | ー |
fib3() | 0.010594秒 | ー |
パターン1はもう試さなくていいよね。。。。
関数 | 処理時間 | F(10000)の値 |
---|---|---|
fib2() | 0.376591秒 | ー |
fib3() | 0.111379秒 | ー |
fib5() | 0.012429秒 | ー |
関数 | 処理時間 | F(100000)の値 |
---|---|---|
fib2() | 215.197792秒 | ー |
fib3() | 1.23247秒 | ー |
fib5() | 0.176561秒 | ー |
関数 | 処理時間 | F(500000)の値 |
---|---|---|
fib3() | 10.064515秒 | ー |
fib5() | 3.950023秒 | ー |
おまけ
・n=777777 の場合
fib5()
処理速度 9.299923
書式や比較方法が公正でない可能性もあるような。まぁ何パターンか書き方を覚えておいて処理速度を気にしないといけない時にどのパターンが早いかを試してみたりかな。
13/12/15
はい。コメントにもいただきましたa,b=b,a+b
での計測値をfib5()の欄で表へ追記いたしました。