Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2011-10-07

[][]アルゴリズム関係の動画を流し見し、その中から興味を持ったものを紹介する 01:09

 ここ数日は、「そういえばアルゴリズムの勉強について全くしたことがなかったなー」ということを思いだし、秋葉原の『書泉』にいって、アルゴリズム関係の棚を見て、アルゴリズムの本をパラパラと立ち読みしたりしたりしていた。確かに、俺にプログラミングと問題解決のセンスが逸脱しているという自信があるのならば、そんな経路を取らなくて済むのだけれども、凡人は凡人である以上、過去の遺産の高台に登ってみるのも正しいよな、と思ったりした。登ってよくわからなければ、その肩から降りればいいだけのことだと思うし。

 とはいえ、俺は高校生時代に数学の授業の多くをサボり倒し、情報工学的基礎も全く持ち合わせていないので、遺伝的アルゴリズムとか、あるいは機械学習とか、そんな賢い奴等にも及ばないので、背伸びをせずに、一から勉強しようと思った。そして、あえて動画を選んだのは、コードを書いている間に、ラジオのようにして流し聞きできるからいいな、と思ったのであった。

まず、アルゴリズムとは何なのか

 そもそもアルゴリズムとは何なのか、が良く分かっていない。そこで中央大学の上の動画の導入部分がわかりやすいと思った。途中の商品説明だったり研究からは、正直眠くなって放棄してしまった。重要なのは、たぶん「何らかの目的を達成するための手順」というところなんだろうなと思う。そういえば、プログラマーは料理が好きだというのも、元々料理自体がアルゴリズムだったりするんだなあ、などと思ったりもした。

視覚的にアルゴリズムって何かを理解する

 アルゴリズムの解説ページとか見ていると、数式とか、コードとか並んでいて、それは確かにわかるんだけど、でも数式やコードよりも、実際にその過程を見たほうが、よく「こういうことなんだ」ってのがわかりやすかったりする。で、その中でも経路検索アルゴリズムについて考えてみる。自分はPythonを使うのでPythonリソースになるのだけれども、実装しやすいのはA*(A-Star)方式らしくて、Pygameあたりでも、いろいろと実装があったりする。

「こういうのがあるんだね」というのはわかるとして、じゃあ他に何があるの?というのも知りたい。A-starの元々であるところの、ダイクストラ法とか、あるいは幅優先検索というのがある。それも、実はPygameで動的に把握できるようなプログラムがあったりする。動画は見当たらなかったので、自分で実行して動かしてみると把握しやすいんじゃないかなーと思う。

Path Finding

圧縮アルゴリズムについて

 圧縮アルゴリズムについては、「ひけらかし会」という謎の会合にて発表されたものが面白く聞けたかなと。理解するのは難しいかもしれないけれど、ただ説明自体は、それほど難しい話ではない気がするので、それなりには楽しかった。

"ひけらかし会(圧縮アルゴリズム)"

日本語を分析する

 元々、社会学とか哲学が好きだった関係もあって、「日本語分析」の話が好きだったりする。

 Google Tech Talkは、色んな分野の人が講演した記録を無料で公開するという、ちょっと贅沢な動画だったりする。英語だったりすると、過去に『JavaScript The Good Parts』の人が、JavaScriptでやっちゃいけないことを講演したりしている。基本的には英語なのだが、突然日本語の講演もアップロードされていたりする。有名なのはMozcの開発者の話なんだけど、こっちの話が、どちらかといえば面白いかなーっと思ったり。そういえば、自然言語分析だと、Pythonではこういうサイトが公開されていたりしますね。

Error 404 (Not Found)!!1

 ちなみに、他の日本語講演は"Google Tech Talk Japanese"で動画検索をかけるとたくさん見つかるので、興味のあるものを流し見てみるのがいいのではないかなと思ったりします。

Pythonアルゴリズムのお薦めのサイト

 で、こんな動画を聞きながら、何のサイトを見ていたかといえば、下のサイトのコードを写経していたりしたのでした。

M.Hiroi’s Home Page / Lightweight Language

 このサイトは、アルゴリズムを網羅し、そしてわかりやすく、実装の順番から説明しているのでとてもいいサイトだなあと思ったりした。高級言語だと、sort()って呼び出せばすぐに並び替えが出来ちゃうから、楽でいいなあと思ったりするんだけど、一度立ち止まって「自分で手作業でやってみるとどうなるのかな」って考えてみたりすると、ちょっとした気づきが得られるのかもしれないなあと思ったりした。

英語と数式は「コード」で理解するという手段

 で、日本語だと限界があるので、英語のサイトを見てみるのもいいかもしれない。前も書いた通り、俺は数学はほとんど分からない。シグマってヒグマの仲間?みたいな理解くらいしかしていない。でも、そんな人間でも、コードと図を見ていると、だいたい言わんとすることはわかったりもする。つーわけで、brpreiss.comという本がフリーで公開されています。ここに書いてあるPythonのコードリーディングをしていけば、だいたいのデータ構造って何?ってことがわかったりすると思う。でも、実際は「お薦めのサイト」で紹介した日本語のサイトでだいたい網羅されてたりするので、わざわざ?という気もしなくはないんだけど。

 |