MAWP 10章はGeometric Algorithm

さわりだけなので、さらっとしている。

ProductName Mastering Algorithms With Perl
Jon Orwant,Jarkko Hietaniemi,John MacDonald
Oreilly & Associates Inc / ¥ 4,054 (1999-07)
通常3~5週間以内に発送

ちゃんと学びたければC++とかの本を探したほうがよいのかな?pymolとかAvogadroのソースを読むのがいいのかもしれんなぁ。

ドッキングシミュレーションとか色々気に入らない部分があるので、手を加えたい部分があったりとか、Caverみたいなの自分で書いてみたかったりするんだけどそういう書籍はないもんかな。

MAWP 9章終了

後半はparserとか

ProductName Mastering Algorithms With Perl
Jon Orwant,Jarkko Hietaniemi,John MacDonald
Oreilly & Associates Inc / ¥ 4,054 (1999-07)
通常3~5週間以内に発送

HOPも読んだし、再帰下降パーサもいじったことあるのでさらさらと。あとハフマン符号化とか。

結局1週間近くかけて読んだが文字列検索アルゴリズムがなかなか面白かった。

はてなスター

知りたいことを探してググッたら、

ビンゴの記事が自分の過去エントリだった

なんてことがあると、はてなスターを連打したくなる。

○8点な

PythonでBoyer-Moore法

ProductName Mastering Algorithms With Perl
Jon Orwant
Oreilly & Associates Inc / 2553円 ( 1999-07 )


perlは写経でいまいち理解度があやしいため、pythonでBoyer-Moore法を。パターンとの不一致の場合には何文字スキップできるか、一致した場合に何文字スキップできるかのテーブルを最初に作っておいて、スキップ幅の大きいほうでスキップしながらパターンマッチを進めていく。

def boyer_moore_bad_character (P):
   m = len(P)
   bc = [m] * 256
   j = m
   for char in list(P):
       bc[ord(char)] = j - 1
       j -= 1

   return m, bc

def boyer_moore_good_suffix (m,P):
   j = m + 1
   gs = [0] * j
   k = [0] * j
   k[m] = j
   for i in reversed(range(1,j)):
       while j <= m and P[i-1] != P[j-1]:
           if gs[j] == 0:
               gs[j] = j - i
           j = k[j]
       j -= 1
       k[i-1] = j

   kn = k[0]
   for j in range(m+1):
       if gs[j] == 0: gs[j] = kn
       if j == kn: kn = k[kn]

   gs.pop(0)
   return gs

def boyer_moore (T,P):
    (m,bc) = boyer_moore_bad_character(P)
    gs    = boyer_moore_good_suffix(m,P)

    (i, last_i, first_j) = (0, len(T)-m, m-1)

    for i in range(last_i+1):
        j = first_j
        while j >= 0 and T[i+j] == P[j]:
            j -= 1
        if j < 0:
            return i
        else:
            bcn = bc[ord(T[i+j])] - m + j + 1
            gsn = gs[j]
            i += bcn if bcn > gsn else gsn
    return -1

if __name__ == '__main__':
    print boyer_moore("perlpypythonruby","python")
  • pythonはコードの見通しがよいですな
  • perlと違ってsubstrとかやらなくてもいいので見通しがよい
  • perlのshiftがpop(0)なのがあれ。先頭をpopするってのが。
  • perlだと$a[5]=5とやれるけど、pythonはそれ以前の要素が自動的ににundefで埋まらない

for文でカウンタ変数使いたかったのでrangeをつかったけどPython流はどうやるのがよろしいんだろうか、、、カウンタ変数減算するのにfor i in reversed(range(1,j))だしな。

MAWP 9章はStrings

パターンマッチングとか。

ProductName Mastering Algorithms With Perl
Jon Orwant,Jarkko Hietaniemi,John MacDonald
Oreilly & Associates Inc / ¥ 4,036 (1999-07)
通常8~11日以内に発送

色々と検索アルゴリズムが紹介されていてなかなか進まない。

Boyer-Moore法を写経して、ついでにPythonで書き直してみたけどgood suffixのアルゴリズムがうまくかけません。perlのfor文とpythonのfor文は大分違うなと。というか、文字列の位置を記憶しながら逆向きに移動していってごにょごにょする方法が分からん。

for(;;)みたいなこと(カウンタ変数を使うっていうの?)をpythonでやる場合にはどういうことをすればいいんじゃと調べてみたら、そういう場合にはfor文は使わないのがお約束としか書いてなかったが、どうもwhile文を使えということらしい。

ふむ。

perlのコード見ながらpythonのコードに移植しようとすんのが間違ってるのかな。

OCamlとかErlangとか

U隊長がユッキーのためにアンパンマンのクリスマス向けDVDを借りにいくというのでお供した。といってもビデオは興味ないので併設している本屋でなんかいいもんないかなーと物色してた。 そうしたら、買おうかどうか悩んでAmazonウィッシュリストに突っ込んでおいた二冊が置いてあってびっくり。

ProductName プログラミング言語Erlang入門
柏原 正三
アスキー / ?円 ( 2007-11-29 )


こんな田舎で読むやついるのか?、近くに大学もないのに誰が一体、、、、もしや富士山麓に関数型言語を広めようという謎の黒い陰謀か?陰謀なのか?

ま、陰謀でも店員の発注ミスでもどっちでもいいけどねー、とぱらぱらとめくって、リアル中身検索。うーん、OCaml本にありがちな謎のへたうまラクダ絵のイメージとは違い、ちょっと教科書臭がしますな。Erlangのほうはというと、気になっていた並列計算の部分が最後のほうにちょろっと出ていて、まさに入門書って感じ。これだったらガウディ本読んでからもう一度検討したほうがいいかもってことで、強引に物欲を鎮めた。

また欲しくなったら再検討しよう。

Rの基礎とプログラミング技法がよさそう

同僚が買って持ってきたのでちょろっと見せてもらった。

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ?円 ( 2006-10-22 )


言語としてのRの説明が結構厚くて、遅延評価とか関数型言語としてのRとかオブジェクト指向的な使い方とか結構興味をそそるようなことが書いてあり、すごく欲しくなった。

あー欲しいけど、今月色々買っちゃったしなー。クリスマスという言い訳で本を何冊か買うかな。

MAWP 8章はグラフ

Graphなどを使ってグラフ

ProductName Mastering Algorithms With Perl
Jon Orwant
Oreilly & Associates Inc / 2960円 ( 1999-07 )


  • Kruskal's minimum spanning tree
  • Prim's minimum spanning tree
  • Dijkstra's SSSP

なんかをコードを追いながら理解することができた。Primはこっちの説明が分かりやすくてお奨め。

Pythonだとnetworkxがあってこっちは視覚化できてよさげ。

chemoinformaticsでグラフは化合物の構造表現なんかでよく使う。というか、売り物ツールが勝手にやってくれるのであまりちゃんと理解してなかったんだけど、アルゴリズムしらないで理解しないで使うと痛い目見たりとか、中身がよく分からんので痒いところに手が届かない感じが嫌だなと思うことがあったので、MAWP読んで基本的なところをちょっと押さえた気になった。

そういえば、gSpanなんかで、部分構造いじってみたいと思ってたんだけど、放ってあるなぁ。

MAWP 7章はマトリックス

行列演算の章

でもPDLもMath::MatrixRealも突っ込んだことやるにはちょっと非力な感じなので、素直にRを使うのがよさげ。

となると、perlでRを扱うのにいまいちよさげなモジュールがないので行列演算するのはrpyが使えるPythonのほうがよいかなと思う。

ProductName Mastering Algorithms With Perl
Jon Orwant,Jarkko Hietaniemi,John MacDonald
Oreilly & Associates Inc / ¥ 4,202 (1999-07)
通常8~11日以内に発送

というわけで7章は軽くスルー。

また同じ理由により15章(statistics)も斜め読みして終了。それにしても統計の章は軽すぎ。もうちょっと突っ込んだほうがよいような気がするけど。

MAWP 6章は集合

集合論

ProductName Mastering Algorithms With Perl
Jon Orwant,Jarkko Hietaniemi,John MacDonald
Oreilly & Associates Inc / ¥ 4,202 (1999-07)
通常8~11日以内に発送

key値に名前でvalueがundefのハッシュを使って集合の計算をするという。なんかそういう実装のやり方って、、、読んでてかなりアレだった(途中で慣れたけど)。

Set::Scalarってモジュールで集合を扱えるがPythonには標準で集合扱えるようになってんだよね。