dd50ee70’s blog

計算機科学を中心によしなしごとを

アルゴリズム学習のカベを乗り越える 〜自分に合った例題を作って納得〜

お詫び: 「天変地異」のシリーズは私よりもずっと上手に説明しているネットコンテンツが多数あり、私ごときがでしゃばるところでは無いとさとりました。というわけで一回だけで中止します。申し訳ありません。やはり、本業のコンピュータ関連で頑張ります。

 

 情報技術が注目され、プログラミング教育が小学校から始まる世の動きは、長年計算機・情報の分野にたずさわってきた者にとっては望ましいことです。しかし、情報技術をしっかり教えられる教員が不足しているのは心配です。私が最も懸念するのは、我流でプログラミングをやって(1日16時間✖️365日)それなりに動くソフトウェアを作るような方が増えていく。そのような方が我流で教えて同じ様なスキルの人を育てるわけですね。それでは、高度情報化、ソフトウェア化の世界に日本が食い込んで行けたとしても、中身は真っ黒け、超ブラック。その上、GAFA(Google、アップル、フェイスブック(現在メタ)、アマゾン)などが押さえる基本技術によって一番オイシイところは持っていかれる、というあまり嬉しくない未来が見えてきます。
 ある決まった問題を解くプログラムは、その問題を解くアルゴリズム、つまり解決の手順が厳密に示された手順書を、プログラミング言語の命令によって表現します。厳密なアルゴリズムは計算の理論により正しさ(常に与えられた問題の正しい解を出力する)の証明、停止すること(無限ループになったりしない)ことの保証、計算にかかる手順の総計が与えられるものです。もっとも、多くのプログラムには厳密なアルゴリズムは要りません。「ユーザがaを選んだら動作A、bを選んだらBを行う」「センサxの値が設定値yより大きければzに信号uを送る」といった手順を行うことが大半です。厳密なアルゴリズムを実行する場面、例えば、データを値が小さい順に並べ替えるとか、文字列が与えられたパターンを満足するかどうか判定する時も、それを行う出来合いのプログラムがライブラリにあることが多い。というわけで、アルゴリズムやその基礎である計算の理論をきちんと学ばなくても、我流である程度のプログラミングはできます。
 このように何んとなくわかってやっている状態では、新しいアルゴリズムを必要とする課題、性能をとことん追求する際には対応が難しくなるのはご理解いただけるでしょう。その前に、プログラミングでは同じことをやるにも方法が多数あるのが普通です。どのやり方を選ぶべきか、アルゴリズムの理論は一番良いやり方を教えてくれます。それにより「なんとなく」や「他の真似」するよりより、効率的で間違いも少ない、信頼できるプログラムが作成できます。きちんとアルゴリズム、計算の理論を学んだ技術者たちとそうでない人たちでは、一見同じ仕事をしている様で、実は差がついているのです。
 アルゴリズムを学習しようと思い立ったら、教科書はたくさんあります。例によって玉石混交ですが、下にリンクを貼った本はお勧めできます。アルゴリズムは解法を示した手順の集まりですから、理解するにはその手順を一つ一つ実行して例題を解いてみるのが一番です。教科書には例題は載っています。でもひとつか二つです。手順を実行する途中経過も飛び飛びにしか書いてありません。だから教師が役に立つわけで、途中経過を丁寧に説明したり、別の例ではどうなるか解説します。それで私もメシを食っていたわけです。これから何回かに分けて紹介するのは、アルゴリズムで解く問題例を自分で作成し、アルゴリズムの実行経過を1ステップずつ見ることができるプログラムです。アルゴリズムの動きをアニメーションのように見せるので「アルゴリズムアニメーション」*1と呼びます。解説入りのアルゴリズムアニメーションはYouTubeに投稿していく予定です*2

 

 

 

 

*1:これは私の造語ではなく、文献にあった言葉ですがその文献を今持っていないので引用できません。アニメーションを作るアルゴリズムではありません。

*2:動画としてはショボイものですが