見出し画像

アルゴリズム

アルゴリズムに関する書籍を、難しいと感じますか?
難しいと感じるけれども、魅力を感じますか?理解したいですか?

では、小学校の算数を復習しましよう。

冗談を言っているのではありません。

「アルゴリズム」の語源は、9世紀前半のイスラム世界の科学者・アルーフワーリズミーの名に由来しています。アルーフワーリズミーは、それまでに存在した計算の技法を、書籍『インドの数の計算法』にまとめたことで知られています。『インドの数の計算法』はヨーロッパでラテン語に翻訳され、ヨーロッパの大学の数学の教科書として500年ほども使用されました。

アルゴリズムは、数学そのもの・数学的な考え方の基本と深く結びついています。その基本は計算にあります。計算の基本は小学校の算数で学びます。

アルゴリズムの本を「難しい」「読めない」と感じるとき、それは端的に言えば

 『算数でつまづいている』

と言っても過言ではありません。

エンジニアの方ならわかりますよね。プログラムの最小単位が「関数」と呼ばれていたり、関数の中では何かしらの値をほぼ四則演算やその延長線上で加工しているだけだってこと。

でも、だからといって算数ドリルを買いに走る必要はありません。まず、小学校の算数の時間を思い出してみてください。

・わかりやすいことは、正しいことでしたか?
・1年生にできる基本的なアプローチは6年生になっても有効でしたか?
・「正しさ」を決めるものは、いつも同じでしたか?

答えはいずれも「No」であるはずですが、小学校の算数の授業ではその理由が明確に説明されているとはかぎりません。むしろほとんど「そういうものだ」と決めつけられていて説明されていないことのほうが多く、なんともいえない「モヤモヤ感」の原因となっているはずです。

算数でつまづきやすいポイントの1つに、分数の割り算があります。

 (1/2) ÷ (2/3)

を計算するとき、正しい方法は

 (1/2) × (3/2)

と、割る数(除数)の分子と分母を逆にして掛け算を行うことです。

なぜそうすることが正しいのか説明できますか?

ほとんどの人はおそらく答えられず「そういえば…」「えー…なんでだろう」というのではないでしょうか。ひょっとすると小学生の時点でなぜこうするのが正しいのか理解できず、なんとなくモヤモヤしたままそうしないとテストで点を取れないからという理由だけで教科書や先生が「正しい」というとおりにしてきた人もいるかも知れません。

しかし、分数の割り算が出てくるあたりから、算数には

 「なぜそうしなくてはならないのか理解するのが少し難しく、
  自然な感じ方に基づくと正解に到達できない」

という内容が増えてきます。

たとえば、面積や体積を求めるための公式もそうではなかったでしょうか。

三角形や台形の面積であれば、面積を求める公式の導き出し方を理解するのは、それほど困難なことではありません。しかし円の面積となると「自然に理解できる」というほど容易ではなくなっています。現在、中学1年で教えられる円の面積の公式である

 半径 × 半径 × 円周率

の導き出し方は、それ自体が「曲線を含んだ図形の面積の求め方を長方形の面積の求め方に落としこんで計算を容易にする」という優れたアルゴリズムなのですが、今、「どうしてこうなるの?」と質問してくる小学生・中学生に説明できるほど明確に記憶している方は、決して多くないでしょう。

「学校の勉強をしっかりやりなさい」

とエラそうに言っている親御さんのいったい何割が、こうした説明をできるでしょう。意外と大人って、子供にエラそうなこと言っている割に、子供の解く問題を解けないんです。

体積が出てくると、謎はさらに深まります。
四角柱の体積は、

 底面積 × 高さ

です。四角錐の体積は

 底面積 × 高さ ÷ 3

です。このことを説明するための優れた教具が、古くから存在します。正四角柱を分解して組み立て直すと、同じ底面積と高さの正四角錐が3つ作れます。

このような教具で教えられれば、直感的に「この公式は正しい」と理解することができます。

同じ公式は、四角錐の形状によらず成り立ちます。

さらに円柱と円錐が出てきます。

このあたりで小学生・中学生を混乱させるには充分すぎるほどです。中学数学ではコンピューターの世界では当たり前のように使われている「変数」という概念(文字式)が導入されて円周率は「兀」という表現でよくなり、毎度毎度「3.14をかける」という計算からは解放されます。

しかし「この未知数をxと置いて」と言われたとき、あなたはそれを素直に飲み込めたでしょうか?

文字式・方程式・関数・集合…・・・といった新しい概念の1つひとつにモヤモヤ感を感じながら、「言われたとおりにすればテストで点をとれるから」と飲み込むか、「こんな訳のわからない数学なんて嫌いだ!」と数学嫌いになるかのいずれかだったのではないでしょうか。

「算数」までは誰でもできるのに「数学」になった瞬間、ことさら苦手になって理系嫌いになる人が出てくるのはそのためです。

中学校や高校レベルで出てくる問題を、方程式を使用せずに解くことはできません。しかし方程式は言ってみれば「共通部品」みたいなもので、中身はブラックボックスでも使えてしまいます。

受験のためにはそれでいいかもしれませんが、そのアルゴリズム…解法を正しく理解していないまま大人になるから、大人になっても何1つ理解しないままです。

味方につければ、方程式は強力なツールです。便利です。楽です。

しかし正しく妥当な結果を導く方法は必ずしもわかりやすくありません。

 「なぜその方法が正しいのか」
 「妥当な結果が得られるのか」

を理解するには、感覚的な「自然なわかりやすさ」から論理と根拠によって少し高みに抜け出す必要があります。アルゴリズムとはその"高み"を抽象化した仕組みなのです。

ロジカルシンキング(論理的思考)のいいところは、こうした理屈を一つひとつ順序だてて、筋道を通しながら考えられることです。これは他の方法ではなかなかできません。

唯一、ロジカルシンキングだけが持っている考え方と言っていいでしょう。

そのぶん

 「わかりやすさ」

は犠牲にしてしまうかもしれません。今まで知らなくてもよかったことまで一つずつ知るということなので、ときには煩わしさも感じるでしょう。

ですが、そうすることで絡まった毛糸がほどかれたかのようなスッキリとした理解を得られることになります。そしてその基本部分さえ押さえてしまえば、様々なことに応用できるスキルも身につきます。

再現性の高い「仕組み」にすることだって容易になります。

いざという時ロジカルに頼れない人は、感覚、感情、勢いなどで何とかしようとします。よほど実力が伴っていなければ、おそらく二度、三度と再現することが難しい成功も多いのではないでしょうか。

いただいたサポートは、全額本noteへの執筆…記載活動、およびそのための情報収集活動に使わせていただきます。