タグ

ブックマーク / toslunar.hatenablog.com (2)

  • Haskell で動的計画法を書くための3つの方針 - tosの日記

    アルゴリズムの代表っぽい存在とも言えるDPですが,Haskellは参照透明なので書きにくいと思われがちです. しかし,実際は,C言語やSTLなしのC++より遥かに簡単に動的計画法が書けます. リストを用いる 最初に知るであろう方法. フィボナッチ数列の第100項だと, let f = 0 : 1 : zipWith (+) a (tail a) in f!!100 です. 「ずらして足したものを後ろにつなげる」と言えばいいのでしょうか. これについては,他でよく解説されているので詳しくは説明しません. 利点: リストの知識のみでよい. 無限リストの恩恵が受けられる. importが不要. 欠点: 使えるケースが限られる. 書くときに,混乱することも(上の例だと,と考える必要がある. ランダムアクセスができないので,場合によってはO(n)倍の時間がかかる*1. 添字を自由に用いることができな

    Haskell で動的計画法を書くための3つの方針 - tosの日記
  • Haskell用vimファイル - tosの日記

    Haskell用vimファイルあれこれをもらってきて使っているうちに,が空気を読めるといいなと考え ftplugin/haskell.vim を改造しました. Vimに馴染みがない人のための手抜き説明: 挿入モード中に, Ctrl-F 前後を見て再インデント Ctrl-T インデントを1段深く Ctrl-D インデントを1段浅く Haskellに馴染みがない人のための手抜き説明: Haskellは文法にインデントブロックを採用しています. インデントの深さが同じ行ごとにまとまりとみなすのですが, たとえば, where c n r = product [n-r+1 .. n] `div` fact r fact n = product [1 .. n] のような位置揃えが要求されるため,固定幅のインデント増減だけでは対応しにくいことになります. それから数ヶ月,未だにvim scriptが

    Haskell用vimファイル - tosの日記
  • 1