2011-04-01から1ヶ月間の記事一覧

ハミング数の算法 3種 - infinite list, imperative queue, cyclical iteration

素因数分解が の形式になる数をハミング数という*1。この手の問題は、やはり Haskell で書くとスッキリする。Hamming numbers - Rosetta Code から Haskell のコードを引用する。 hamming = 1 : map (2*) hamming `merge` map (3*) hamming `merge` map (5*)…

フィボナッチ数の算法のベンチマーク

まずは、結果を下図に示します。なおベンチマークに使用したコードは上記の説明コードとは違い、チューニング済みです。逐次平方変換のコードは、dev68 さんの groovy 実装 をそのまま scala に移植しました。また、このエントリをきっかけとして、このエン…

A linear algebra view of Fibonacci sequence

はじめに フィボナッチ数列の高速な算法である 逐次平方変換 Binet公式 について、線形代数的な視点から説明を与えて、ベンチマークしてみました。なおどちらの方法についても、詳しい説明は世の中に出回っているはずですが、私にとってそれらの説明は天才の…

RubyのEnumerableを遅延評価にしてみる

最近、無意識のうちに遅延評価を前提としたコードを書くようになってきました。趣味の scala コードばかりを書いている弊害でしょうか。そんな遅延脳が失態をやらかしました。正格評価前提の言語(Ruby)で、遅延評価を期待したコードを書いてしまい、プログラ…

基礎から始める覆面算

Scala の for 式で覆面算を解いているエントリを見つけた人が Haskell と Groovy で解きながらリスト内包表記について考えていた。このようなエントリを見かけると、いつも面白いなーと感心するけど、どうも私は実戦で使いこなせていない。おそらくは、パフ…

Re:今流行のお題を出してみた(一方通行を許可した迷路を作成)

こちらの問題を解いてみました。グラフ連結に関する理論を全く使っていないという意味で、力技です。一方通行のドアが壁に存在する期待値が40%くらいまでなら、なんとかなりました。 35%を切ってくると、このままでは厳しいかもしれません。再帰の仕方とかは…

時間帯重複チェックの計算量と前提条件

お題:時間帯重複チェック(応用編) - No Programming, No Life に関して、解法は2種類に大別できるようです。 解法の分類 離散時刻方式 「時間帯(何時何分から何時何分まで)に含まれる時刻(何時何分)の最小単位が1分」であることに注目した方式です。…