我、京大生ぞ

現役理系京大生ゲーテの雑記。プログラミング、数学・物理、コンピュータサイエンス、筋トレ、大学受験、音楽、英語、映画などなどカバー範囲は無限大

プログラミングに数学が必要な理由


こんにちは、京大生ブロガーのゲーテ(@goethe_kyodai)です。


プログラマーなのに「プログラミングに数学は必要ない」なんて思っちゃったりしてませんか?(笑)


プログラミングの背景には、コンピュータ・サイエンスという学問があります。そのそのコンピュータ・サイエンスの理解には数学が必須です。


「数学が必要ない」と本気で思ってる人は、コンピュータ・サイエンスが分かってなくてもできるレベルの仕事を任されているだけです。仕事のレベルが限定されるので一流プログラマーにはなれません。


プログラミングをやっていると、数学が大切だと思うことがたくさんあります。


プログラミングに数学が必要な理由 を語っていきます。

 



目次

[表示]

アルゴリズムの理解に数学が必要


プログラミングで絶対つかうのがアルゴリズムです。


よく使うソートアルゴリズムの理解は必須です。ライブラリーがあるから詳しい中身は理解しなくてもいい、という人もいますが、ライブラリーの中身のアルゴリズムを理解していなければ応用ができません。


応用というのは、現実の問題に合わせてアルゴリズムを少し変えて適用することです。それができないプログラマーは、ライブラリーをそのまま使うだけで済む仕事しか任されず、プログラマーとして上には登れません。


そんなアルゴリズムの理解に数学が絶対必要です。具体的には、アルゴリズムの計算量の解析アルゴリズムのメモリ消費量の解析計算困難問題かどうかの判定などです。これらはlogや指数関数が分かってないと理解不可能です。


計算量がわからない人は説明はコチラの記事が分かりやすいです。


qiita.com


アルゴリズムで解けない問題というのがあって、問題がアルゴリズムで解けないことの証明にも数学が使われています。


あと、全てのソートアルゴリズムの計算量がO(nlogn)以上であることを知ってますか?あれは二分木を使えば証明できるのですが、これはグラフ理論という数学の一分野のおかげです。


こんな風にアルゴリズムを応用できるレベルまで理解するには数学が必須なのです。

数学のおかげでアルゴリズムの計算量が激的に減る


そのアルゴリズムの計算量は、数学を知っているか知っていないかで激的に変わることがあります。


具体例を出しましょう。


1からNまでの自然数の和を求めるプログラムを書くとしましょう。


普通にやったらこんな風にfor文のループで計算するでしょう。この場合の計算量はO(N)です。

int sum = 0;

for( int i = 1; i <= N; i++){
       sum = sum + i;
}


しかし、自然数の和の公式(k=1Nk=N(N+1)2)というものを知ってる人だったら、こんな風にもっと簡単に書きます。

int sum = N*(N+1)/2;


式一発で求められちゃいますし、計算量もO(1)なので一瞬で求められます。


似た例ですが、nの階乗、n!を求めるプログラムを書くとしましょう。これもfor文で書けて、O(n)の計算量になります。


でもスターリングの近似公式を使えば、近似ですが、O(n)ではなくO(1)の計算量で求められます。


もう一つだけ例を出します。


素数を判定するプログラムを書くとしましょう。色々アルゴリズムがありますが、「エラトステネスのふるい」というのを使うと計算量はO(log(logn))くらいです。他のアルゴリズムでもそれとそんなに変わらないです。


ですが、リーマン予想という未解決問題が解かれると、素数の一般公式が証明されるので、自然数の総和みたいに計算量O(1)で一発で計算できちゃいます。


例から分かるように、数学を知っている・知らないでプログラムの計算量は激的に変わってきます。

アルゴリズムを考えるのに数学の証明のアイデアが役立つことがある


実務で、自分でアルゴリズムを考えなければいけない場面があると思います。そんな時に数学の証明のアイデアがヒントになって良いアルゴリズムを思いつくことがあります。


自分も課題や競プロで一からアルゴリズムを考えなければいけない時がありますが、数学の証明のアイデアがヒントになったことはたくさんありました。

機械学習や人工知能の学習に必要


最近機械学習や人工知能のエンジニアがかなり需要があるようです。生き残るためにそれらの勉強としているプログラマーもいるでしょう。


そんな機械学習や人工知能の理解に数学は必須です。機械学習や人工知能では、データを学習させます。そしてそのデータは行列の形で表して色々いじるんです。


だから、理解には行列を扱う線形代数という分野が必要です。
  


 


   
  

 
↓ランキング参加中です!ぽちっとお願いします!
にほんブログ村 科学ブログへ
にほんブログ村


科学ランキング