なんだこれは

はてなダイアリーから移転しました。

taraiまわしにかかる時間のメモ

tarai まわし関数を何回か動かしてみた。


tarai まわし関数は x y z の間の差分だけで処理時間が変わるはず、

(defun tak (x y z)
  (if (<= x y)
    y
    (tak (tak (1- x) y z) (tak (1- y) z x) (tak (1- z) x y))))

(compile 'tak)

(time (tak 2 1 0))

xとy、yとzの間をnになるようにして何回か動かしてみた。
例えば、n=1ならx=2、y=1、z=1のようになっています。

これは実時間(s)で、最後に最大値をのぞいて平均をだしてみました。

n,test1,test2,test3,test4,test5,test6,ave(except,max)
0,0.000012,0.000013,0.000013,0.000012,0.000013,0.000013,0.000012
1,0.000016,0.000015,0.000015,0.000016,0.000015,0.000015,0.000015
2,0.000023,0.000023,0.000023,0.000023,0.000023,0.000023,0.000023
3,0.000155,0.000118,0.000118,0.000118,0.000122,0.000118,0.000119
4,0.002486,0.001960,0.001884,0.001920,0.001905,0.001886,0.001911
5,0.060160,0.043363,0.043662,0.043502,0.044224,0.043481,0.043646
6,1.962344,1.537047,1.537912,1.541024,1.537887,1.537680,1.538310
7,91.27873,71.35200,71.40925,71.36363,71.31444,72.05602,71.49907

両対数グラフを作成したがよくわからない。