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のコードに移植しようとすんのが間違ってるのかな。

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章はマトリックス

行列演算の章

でもPDLMath::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には標準で集合扱えるようになってんだよね。

Catalyst Advent Calendar 4日目

Catalyst + Open Flash Chart: Fancy graphs with minimal fuss

snapshot

こんなのが10分程度で作れてすごいいい感じ。昔作った遺伝子発現のやつをこっちにかえるといいかもしれん。

ちょっとしたもの作るにはChart::OFCもいいですな。

MAWP 5章はSearching

Minimax,Alpha-beta,Killer moveで検索すると将棋のサイトによくあたる。

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


Heap::Fibonacciってのがいまいちよく分からなかったのでRadium Software Developmentを後で読む。

クイックソート

Perl

sub qsort {
  my $pivot = pop @_ || return;
  return qsort( grep { $_ <  $pivot } @_ ),
         $pivot,
         qsort( grep { $_ >= $pivot } @_ );
}

Haskell

qsort []     = []
qsort (p:xs) = qsort lt ++ [p] ++ qsort gteq
                 where
                   lt   = [x | x <- xs, x < p]
                   gteq = [x | x <- xs, x >= p]
  • grep { $_ < $pivot } @_ だと(代入するために)左側で待ち受けてる感が強いんだけど、
  • ( grep { $_ < $pivot } @_ ) と書くとリスト内包表記に見えてきた。

MAWP 4章終了

明日からどうせまた忙しくなるので、今日は時間をとって一日中MAWPを読んでた。

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


ひたすらソート。

シェルソートってのはバブルソートの従兄弟のようなもんだ。名前の由来は実はメタファーじゃないんだよ。単に考えたヒトの名前からとっただけだヨ(超意訳)

と、豆知識を仕入れつつ。

radix sortってのは知らなかった。後ろから順番に仕分けしていくイメージのアルゴリズムかな。

ソート一覧

  • selection
  • bubble
  • insertion
  • shell
  • merge
  • heap
  • quick
  • radix
  • counting
  • bucket

とこれらのハイブリッド。

MAWP3章終了

linked listはHOPでやったので、binary heapsを実装してみたりとか。

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


ヒープ

Mastering Algorithms With Perlを読み始めた

グラフ表現と遺伝アルゴリズムが面白そうだったので、HOPの次に読もうと買っておいた。で半年近く放っておいたわけですが。

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


1章、2章は割と基本的なことなんで軽く読み流した。3章はlinked listとか木構造のようなデータ構造の章らしい。