裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

ダメ出し:方針が間違えている その2

2012年08月13日 | ブログラミング

そもそも,この種の問題を解くのに,ブルート・フォースを使うのは良くない。

問題をよく考えれば,理論的な解がちゃんと存在するし,そこまで行かなくても,コンピュータ・パワーを利用すると瞬殺の答えが得られる。

以下のようなプログラムを書くと,n=10 なら 0.028 秒!!,n=398 でも 0.065 秒!!!

n=399 以上は,numeric が扱える上限を超える。gmp ライブラリあたりを使えば良い。

dice.n <- function(n=10) {
    d <- c(1:6, 5:1)
    for (n in 3:n) {
        ld <- length(d)
        d2 <- numeric(ld+5)
        for (i in 1:6) {
            d2[i:(i+ld-1)] <- d2[i:(i+ld-1)]+d
        }
        d <- d2
    }
    return(d)
}

> system.time({
+ z <- dice.n(10)
+ barplot(z)
+ })
   ユーザ   システム       経過  
     0.028      0.002      0.031

> system.time({
+ z <- dice.n(398)
+ barplot(z)
+ })
   ユーザ   システム       経過  
     0.065      0.004      0.068


もう正規分布だね。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ダメ出し:方針が間違えている | トップ | ダメ出し:コンパイラなんか... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事