月別アーカイブ: 2013年7月

「ガリレオ温度計」買ってきました。


先日、東急ハンズ渋谷店で気になっていたものをいくつか買ってきました。

本当は低温度差スターリングエンジンを探しに行ったのですが、そちらは今は置いてありませんでした。

東急ハンズ戦利品

今回の注目は左上の品。「ガリレオ温度計」です。浮きに温度が書いてあり、浮き沈みで温度を計るようになっています。

実験用とかではなく、完全なインテリア用です。

花にそえてみたの図

花にそえてみたの図

続きを読む


「クイックソートをHaskellで書くと5行、C++で書くと35行!」←いやそんなにかからないだろ


(この記事はC++メインの内容です。)

関数型言語のセンスも身につけておかないと、と思ってHaskellの簡単なお勉強をしようと思いました。

圏論のような背景や文法から把握するのもひとつのルートですが、まずは適当な例を見てみようと思ったわけです。
「関数型言語だとこんなことができる!」みたいな驚きがあったほうが楽しいですしね。

Taken by Robert Scarth, Flickr

Taken by Robert Scarth, Flickr

まずはHaskellでのクイックソートの実装例を探してみました。クイックソートというのはアルゴリズムの勉強を1からすると必ずと言っていいほど登場するほどのものですし、比較もできて面白そうです。

さて、「Haskell クイックソート」でGoogle検索にかけてみると、「C++だと35行のところがHaskellは5行で書ける」だの、「最も美しいコードのひとつ」だのとなかなか景気の良い記事が出てきます。

ところがもう少し読んでみると、「Haskellの5行クイックソートはクイックソートではない」みたいな議論がされているページがいくつか出てきます。

Togetterにいろいろな主張のまとめがありました。曰く、

「In-placeソートでないからだめ」「というか遅い」「いやHaskellに効率を求めてはいけない」「5行の例はPivotingをしていないのでだめ」「Pivotingはクイックソートの本質ではない」「メモリを抽象化していて扱えていないのでとても遅い」「Haskellでメモリの議論をするべきでないしIn-placeソートでなくてもよい」「Haskellでクイックソートをしっかり書きたいなら手続き型風に書くのが良い」

といった感じで、さっそく頭が痛くなってきました。

まあ今回はHaskellについては一旦置いておいて、その途中で出てきた「C++のクイックソートは35行」の部分についての話です。C++で普通に書いてももっと短くなっていいはずです。

結果から書きますと、普通に書いても9行くらいになりました。

続きを読む


マンデルブロー集合へ飛び込む


先日のマンデルブロー集合の10の200乗倍で作成したプログラムがあるので、今回はマンデルブロー集合の様々な地点へ飛び込んだ動画を作ってみました。

前回の記事を見ていない方はそちらからどうぞ:

[フラクタル] マンデルブロー集合 10の200乗倍への挑戦

今回訪れる地点は計5箇所です。どの点も拡大していく最中に集合全体と同じ形が現れます。フラクタルらしくて面白いと思います。

具体的には以下の点です。緑は前回の場所。それぞれ個性的な場所だと思います。

Mandelbrot Set with Circles (Picture from Wikimedia)

Mandelbrot Set with Circles (from Wikimedia)

この集合はフラクタルなので自己相似の図形ではあるのですが、ただ単純にどこでも同じ形を持っているわけではありません。拡大する場所を変えると景色が一変してしまいます。

肝心の動画はこちら。ニコニコ動画はこちら

続きを読む