Codelogy

« 2007年11月 | メイン | 2008年01月 »

2007年12月 アーカイブ

2007年12月08日

0からはじめる計算幾何学 第03回 パソコン甲子園の問題に挑戦する

日本の ICPC の幾何問題は、世界のそれと比べてレベルが高いという話を聞いたことがあります。
日本が幾何を得意としているのかどうか私には分かりかねますが、ここでふと、パソコン甲子園にも面白い幾何の問題があったことを思い出しました。
今日はパソコン甲子園2005本選問題28「ケーキ屋」を紹介しましょう。

問題はパソコン甲子園公式サイトの例題ページにて公開されていますが、こちらにも転載します。

ケーキ屋さんが、まちまちな大きさのロールケーキをたくさん作りました。 あなたは、このケーキを箱に並べる仕事を任されました。 ロールケーキはとてもやわらかいので、他のロールケーキが上に乗るとつぶれてしまいます。 ですから、全てのロールケーキは必ず箱の底面に接しているように並べなければなりません。 並べ替えると必要な幅も変わります。

ファイルから、n個のロールケーキの半径・・・・・・・・と箱の長さを読み込み、それぞれについて、箱の中にうまく収まるかどうか判定し、並べる順番を工夫すると箱に入る場合は "OK"、どう並べても入らない場合には "NA" を出力して終了するプログラムを作成してください。
ロールケーキの断面は円であり、箱の壁の高さは十分に高いものとします。 ただし、ロールケーキの半径は3以上10以下の整数とします。 つまり、ケーキの半径に極端な差はなく、図 (b) のように大きなケーキの間に小さなケーキがはまり込んでしまうことはありません。 また、ケーキの個数 n は12個以下とします。
00301.png

続きを読む "0からはじめる計算幾何学 第03回 パソコン甲子園の問題に挑戦する" »

2007年12月09日

XMLライブラリの紹介 (1)

某所からの「Codelogy にエントリを投稿しろ」という圧力が大きくなってきたので、自作の XML ライブラリでも紹介してお茶を濁そうかと思います。 とは言っても、業務に使用しているものなので、ちゃんと使えるレベルには仕上がっています。

続きを読む "XMLライブラリの紹介 (1)" »

2007年12月12日

Haskell でバグの出にくいプログラミング (2)

前回のエントリ では、副作用を分離することで、バグを減らすことができる、という話から、Haskell がそのような副作用の分離に向いているということについて書きました。
今回は、IO 制御の分離について、Haskell のコード 2 つを比較しながら書いてみようと思います。

続きを読む "Haskell でバグの出にくいプログラミング (2)" »

2007年12月16日

ソートアルゴリズム

「一番好きなソートアルゴリズムは何ですか?」
この質問に対する回答により、人間は以下のように分類することができます。

クイックソート
→ 何をおいてもパフォーマンスだろ派
マージソート
→ エレガントなアルゴリズムが好きです派
選択ソート
→ 簡単に書けるのがいいよ派
ボゴソート
→ いくらなんでもひねくれすぎです。

……という冗談はさておき、今回は私が使用しているソート (クイックソートの変種) を紹介します。

1. 一般的なソートアルゴリズムの問題点

例えば、クイックソートが行う比較の回数は、要素数 n に対し O(nlogn) のオーダとなります。(最悪ケースでは O(n2) まで増加しますが、話の本筋とは関係ないので考慮には入れません。)
クイックソートに限らず、広く使用されているアルゴリズムでは、比較時に (必要であれば) 要素値の入れ換えも行います。 従って、要素値のコピー回数のオーダも、比較のそれと同じ O(nlogn) となります。 要素が構造体などデータサイズの大きいものである場合、このコピーにかかる処理コストはかなり大きくなります。

そこで、クイックソートを使いつつ、要素のコピー回数をできるだけ少なくする工夫をしてみました。

続きを読む "ソートアルゴリズム" »

2007年12月21日

GPUで並列処理をやってみる

この間のインタプリタをはじめから・・・で問題がありご指摘を受けました。
ですので次回より修正を行い、今回は GPGPU を使った計算についてやりたいと思います。

今回 nVidia の GeForce 8800 GTX というボードが手に入りましたので、専用の言語 (現在 GF8x 系のみで動作可能) であるCUDAを利用したいと思います。

続きを読む "GPUで並列処理をやってみる" »

About 2007年12月

2007年12月にブログ "Codelogy" に投稿されたすべてのエントリーです。 過去のものから新しいものへ順番に並んでいます。

Prev: 2007年11月
Next: 2008年01月

メインページアーカイブページもご覧ください。