FC2ブログ

サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
2012/03/14

「Ruby ベストプラクティス」という本

図書館で「Ruby ベストプラクティス」という本を借りてきました。



この本の"はじめに"には、「本書はRuby初心者を想定して書かれたものではない」とあります。確かにタイトルを見れば、それとわかることです。そして予想通り私には難しかったようです。

この本をパラパラっと見ていて気がついたのが、メモ化の記述。

def fib(n)
return n if (0..1).include? n
fib(n-1) + fib(n-2)
end

というフィボナッチ数列の例があり、再帰的にfibが呼ばれるため非効率。このため、メモ化して効率的にするというサンプルプログラムがありました。

def fib(n)
# @series ||= [] オリジナルはこれだが、これでは初期値が入ってないため動かない。下記のようにすべき。
@series ||= [0, 1]
@series[n] ||= fib(n-1) + fib(n-2)
end

(3月16日に上記プログラムを修正。初期値を入れないと動かない)
要は一度計算した値は配列に入れておくという工夫です。

同じことをJavaScriptで実現したコードが、「JavaScript The Good Parts」にあるのを思い出しました。サンプルも同じフィボナッチ数列。

var fibonacci = function () {
var memo = [0, 1];
var fib = function (n) {
var result = memo[n];
if (typeof result !== 'number') {
result = fib(n-1) + fib(n-2);
memo[n] = result;
}
return result;
};
return fib;
}();

「Ruby ベストプラクティス」の方は、ゆっくり読んでいきます。

スポンサーサイト



コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/1134-51ed86b1

■  カレンダー

07 | 2020/08 | 09
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード