2011年10月1日土曜日

数学とアルゴリズム

いつだったか、プログラマーへ100の質問か何かに挑戦したとき、数学ができないプログラマーをどう思うかという問がありました。それに対して、アルゴリズムを立てられないほど数学ができないのは困るのでは、と答えた記憶があります。

その後、数学ができないとアルゴリズムでも困る例はどんなものかと考えてみたのです。

1.数値計算
説明不要かも知れませんが、数値計算及びそこから発展する計算物理学や各種モデルの構築に、数学は必要不可欠です。数学だけでは足りないこともままあります。シンプレクティック積分の理解には間違いなく物理の知識が必要でしょうし、一松法やMuller法の理解には極限やTaylor展開などの知識が必要だと思います。

2.アルゴリズムの解析
これまた説明不要かも知れません。何らかのアルゴリズムを評価するときに、統計的手法が必要な場合は少なくありません。特に、乱択アルゴリズムなどそうだと思います。解析を一切しないなら別ですが、基本的には数学が必要不可欠だと思います。

3.競技プログラミング
私の趣味の領域に入ってしまいますが、競技プログラミングでもある程度の数学は必要不可欠だと思いますし、楽に解けるかどうかということまで考えると、尚更数学の知識があるにこしたことはありません。Superconの過去問に格子点から面積を求める問題がありましたが、ピックの定理を知っていれば単なる数え上げに思います。

以上が、パッと思いつく例なのですが、基本的にアルゴリズムに簡単な数学を扱う力は必要不可欠なものであるように思います。

逆に、数学を用いてアルゴリズムを考えることも出来るように思います。とりわけ、数値計算・計算物理の方面はそんな「数学を用いた」アルゴリズムの宝庫ではないかと思います。また、暗号論も、数論の知識が不可欠な世界だと思います。圧縮も、単純な方法以外は数学が必要になるのではないでしょうか。

昔、数学が一番好きでした。今は一番とは言えないでしょうし、人並みか、あるいはそれ以下しかできませんが、アルゴリズムや数値計算を楽しいと思えるのは、昔数学が好きだったからだと思います。数学が好きで、アルゴリズムに興味があるという人には、自分の経験からも、数値計算と競技プログラミングを進めたいと思います。前者は学習として、後者は趣味としてですが、大いに楽しめる世界が待っていると思います。

最後に。数学とアルゴリズムについては、少なくとも高校や大学の大会の結果などを見る限り、かなり強い相関があるように思います。数学好きでアルゴリズムも好きな人は、気づかないうちにその両方の関連を感じているのではないでしょうか。

0 件のコメント: