Python 3.11.0 になって,Python が速くなって嬉しいって!!
> 自分のPCでも23.2秒から12.5秒になり、2倍ぐらい早くなってるのでこれはうれしい。
フィボナッチ数列を再帰関数により求める場合の話なので,一般的なものではないことをお断りしておく。
私のマシンで比較してみました。
結論を述べておきます。なんだかんだいっても,Python に比べて Julia は 28 倍くらい速い。
Python 3.11.0
Python 3.11.0 (v3.11.0:deaf509e8f, Oct 24 2022, 14:43:23) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def fb(n):
... if n == 0 or n == 1:
... return n
... else:
... return fb(n - 2) + fb(n - 1)
...
>>> from time import time
>>> s = time();fb(40);print(time()-s)
102334155
11.548144340515137
ほどほど早い。(Python 3.10 で確かめようなんてつもりはさらさない)
R はどうか?
R version 4.2.2 RC (2022-10-27 r83209) -- "Innocent and Trusting"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: aarch64-apple-darwin20 (64-bit)
> fb = function(n) {
+ if (n < 2) {
+ return(n)
+ } else {
+ return(fb(n - 2) + fb(n - 1))
+ }
+ }
> system.time(print(fb(40)))
[1] 102334155
user system elapsed
64.022 0.394 64.373
遅い!!!
でも,gmp ライブラリを使ってずるっこすると,測定限界以下の速度になります
> library(gmp)
> system.time(print(fibnum(40)))
Big Integer ('bigz') :
[1] 102334155
user system elapsed
0 0 0
Julia は?
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.8.2 (2022-09-29)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia> function fib(n)
if n < 2
return n
else
return fib(n - 2) + fib(n - 1)
end
end;
julia> @time fib(40)
0.405616 seconds
102334155
何の文句もない。速い(あたりまえなんだけど)
ちなみに,噛ませ犬で AWK
function fb(n) {
if (n < 2) {
return(n)
}
else {
return(fb(n - 2) + fb(n - 1))
}
}
BEGIN {
print fb(40)
}
というファイルを用意して
$ time awk -f fb.awk
102334155
37.665u 0.136s 0:37.81 99.9% 0+0k 0+0io 0pf+0w
意外にも R より速い