fibonacci - yasushinzato/study GitHub Wiki
フィボナッチ数列の計算
function fib(n) {
if(n === 0 ){
return 0;
} else if (n === 1) {
return 1;
}
return fib(n - 1) + fib(n -2);
}
const length = 40;
for (let i = 0; i <= length; i++) {
console.log(fib(i));
}
フィボナッチは、上記のコードだと、売買に近い形で計算回数が増え、40回のFor文で2秒とかかかる。
- nが2のときのfib(2)は、fib(1) + fib(0) = 0+0+1 で1回計算
- nが3のときのfib(3)は、fib(2) + fib(1) = 1+0+1 で2回計算
- nが4のときのfib(4)は、fib(3) + fib(2) = 2+1+1 で4回計算
- …
- nが8のときのfib(8)は、fib(7) + fib(6) = 20+12+1 で33回計算
回を重ねる毎に増える処理の増え方を指数オーダーといい、
O(a^n)
と表す。
以下のアルゴリズムは線形オーダーといい、
O(n)
と表す
'use strict';
const memo = new Map();
memo.set(0,0);
memo.set(1,1);
memo.set(2,1); // トリボナッチ数列
// O(n)線形オーダー実装
function fib(n) {
// 既に記録されている数字はそのまま返す
if(memo.has(n)){
return memo.get(n);
}
const value = fib(n -1) + fib(n - 2) + fib(n - 3);// トリボナッチ数列で3つ目を追加
memo.set(n, value);
return value;
}
const length = 40;
for (let i = 0; i <= length; i++) {
console.log(fib(i));
}
処理時間を調査するプロファイル
「nodegrind」というプロファイルツールを使用.以下のコマンドでインストール
npm update -g [email protected]
sudo apt-get install build-essential python
npm install -g nodegrind
npmの更新 ツールのインストール 10分程度かかる。 nodegrindのインストール
ツールを使うときは以下のコマンドでjsファイルを実行する
nodegrind -o hoge_nodegrind.cpuprofile hogehoge.js
そうすると、「hoge_nodegrind.cpuprofile」が作成されるので、Chromeのデベロッパーツールを起動して、
[More Tools]を選択し、[JavaScript Profiler]おクリック「Record Java Script CPU Profile」画面が表示されたら、[Load]をクリックしてファイルを読み込む
補足:cpuprofile拡張子のファイルはgitgnoreファイルでGitHubに管理しないようになっている。