さて、最後の回はアルゴリズムについて学ぼう。いつものように最初に動画をみてね。
今回、学ぶアルゴリズムって何かというと、アルゴリズムとはプログラムで問題を解くときのやり方のことだよ。プログラムは何かの目的をもってつくられ、その目的のためにゴールにむかってコンピュータに計算をさせるのだけど、このゴールに向かって、最初にこうして、次はこうして、こういう時には処理を繰り返してとコンピュータに指示を与える、そう正に前々回に勉強したフローチャートそのものがアルゴリズムなんだ。
みんな大好き(なハズの)ピタゴラスイッチの中でも、アルゴリズム体操というものがあるけど、あれも先頭にいる人から2番目、3番目に並ぶ人が皆、1秒遅れで規則正しく体操のフローチャットを実行するから、全員がぶつからないで行進できるんだね。
そして、このゴールに向かって計算する手順にはいろんなパターンがあるということがポイントなんだよ。このいろんなパターンのうち、一番効率のいいやり方になるフローチャートでプログラミングすることが重要なんだ。なぜなら、このあと説明するように計算の仕方によってコンピュータの処理スピードが大きく変わることになるからだよ。
例えば、1から100までの数を足すというプログラムを作ることを考えてみよう。普通に考えると1から順に足していくよね。
でも、あるときドイツのガウスっていう学者は、こう考えたんだ。「1と100をたしたら101、2と99をたしても101、3と98をたしても101、これをずっとくりかえして、50と51をたしても101、つまり1から100までの間に101が50個ある。だから101x50を計算したら、同じ答えの5050になるよね」
これをプログラムに書くためにフローチャートにしてみよう。
これが、ふつうに1から100を順番に足すフローチャートだよ。動画をみるとわかるとおり、このフローチャートを実行すると足し算の計算のために100回も反復処理しているんだ。ちょっとコンピューターからすると大変だよね。
一方、こちらがガウスの計算をフローチャートにしたもの。こちらも動画でみるとわかると思うけど、なんとこの方法だと順次処理の1回の流れで処理を終わらせることができるんだよ。
最近のコンピュータは頭脳にあたるCPUの処理性能が高いので、なかなかふつう計算とガウスの計算では差がみられないけれども、大きな数まで足し算をさせるとその差がでてくるはず。
Scratchで2つの計算方法をプログラムしてみたよ。スタートを押すといくつまで数える?と聞いてくるので、数を入力すると、その数までの足し算をふつう犬とガウス犬が計算をはじめ、横にいるホイッスルくんがかかった時間をいってくれるんだ。
中を確認したい場合はこちら
小さな数ではそれほど計算スピードに差はないのだけど、10,000,000くらいの数(0が7つなので1千万だね)をいれると明らかに差が大きくなって圧倒的にガウスの計算方法がはやいよ。
このように1から100まで足すやり方は、いくつかあって、計算スピードがかわることがわかるよね。つまり、この足し算をするという問題を解決するにはガウスの計算のほうが、いい解き方、いいアルゴリズムだといえるんだよ。
そして、このガウスの計算方法で1回の順次処理だけで答えにたどりつけたのは、途中にある(最後の数+1)x(最後の数÷2)という計算式のため。
今回はとても簡単な計算式だったけど、暗号化処理や人工知能といったプログラムでは、もっと高度な計算式を使うよ。そして、その高度な計算式をもちいることで、とても処理が早くなる、つまりいいアルゴリズムになるというわけさ。
なので、これからプログラムを学んで、どんどんいい作品をつくっていきたいみんなは、たくさん勉強して高校や大学に進んで、数式に強くなってね。
※いま学校でならっている算数は、中学校に進むと数学という呼び方にかわって、さらにたくさんの知識がえられるよ。
さて、今回をふくめて13回行ってきたScratchで学ぶプログラミングの基礎はこれで一旦おしまいだよ。でも、第1回から今回の分まで見返してみると、これだけでもプログラミングに必要な基本はかなりカバーできているはずだよ。
細かなことをいえば、プログラミング全体では、まだ最初に覚えてもらってほうがいいなということもあるけど、Scratchを学ぶ上では、まだ必要なかったりする知識もあるので、まずはここまでの学習内容をもとに、どんどんScratchでプログラミング作品をつくって慣れていこう。
明日のマークザッカーバーグ(Facebook創業者)、イーロンマスク(Paypal・テスラの創業者)がみんなの中からうまれることを願って。プログラミング頑張ってね!
Scratchで学ぶプログラミング基礎の一覧はこちら
コメント