タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

Algorithmとsimpathに関するxefのブックマーク (2)

  • パスを数える simpath algorithm を実装した (Haskell) - 落書き、時々落学

    パスを数える simpath algorithm を実装した。knuth先生のあのにのっているとか。 参考動画 http://youtu.be/Q4gTV4r0zRs simpathは動的計画法(DP)の一種。ただし、そのまま DPの表を作るとメモリ不足とかで頓死するので、動的に表を作成し、不要部分は削除、共有可能な部分は共有するという方針。 それでも、メモリ消費は大きくてHaskellで実装した下のコードでは 9x9 は計算できたけど 10x10 はメモリが足りなくて実行できなかった。工夫すればできそうだけど、そもそもHaskellで書くのがまちが(ry {-# LANGUAGE TupleSections #-} import Data.IntMap (IntMap, insert, insertWith, delete, empty, fromList) import Data.M

    パスを数える simpath algorithm を実装した (Haskell) - 落書き、時々落学
  • 「フカシギの数え方」の問題を解いてみた

    先日、「『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう!」という動画を見た。格子状のマスの左上から右下までの経路が何通りあるのかを調べて、格子が多くなればなるほど組み合わせの数が爆発的に増えることを教えてくれる動画だ。これは自己回避歩行(Self-avoiding walk)と呼ばれている問題らしい。 これだけ聞いてもそれほどインパクトはないのだが、動画に出てくるおねえさんの経路を調べあげる執念がもの凄く、ネット上でも結構な話題になっている。執念と言うよりも狂気に近い。しかし、話題になった割には動画内で言及されている高速なアルゴリズムを実装したという話を聞かなかったので、自分で確かめることにした。 動画のおねえさんは深さ優先探索によるプログラムを使っていると思われるが、それだとスパコンを使っても10×10マスの格子を解くのに25万年も掛かってしまう。そこで、高速化のため

    「フカシギの数え方」の問題を解いてみた
  • 1