最近は羽島市の正木小学校で放課後のプログラミング講座をさせていただいています。30名を超える大人数で大変ですが、小学生の子たちも楽しんで講義を受けてくれています。また、昨今の小中学校ではIT(情報処理)がにわかに活気を帯びてきています。
すでに東京や名古屋などの大都市では小学生を対象にしたプログラミング講座も盛んに行われています。
ここ羽島市でもIT化が進めば、情報処理が授業に組み込まれるかもしれません。
そうそう、正木小学校では今年度から新しいパソコンになりました。タブレット型のWindows8ですが(汗)。なぜあえてWindows8に・・・と”わなわな”しました。だって、Windows8なんてほんの少ししか触ったことがなかったからです。正直、トラブルに見舞われたらどうしようと思ってました。このOSは経験が浅いため、全てのトラブルに対処できないからです。
Windows7だったら万全だったんですけどね・・・。
特にWindows8はこれまでの「XP」「Vista」「7」と違い、画面構成が大きく異なっているからです。過去のOSからWindows8に乗り換えるとものすごく戸惑います。でも、長年の経験で何とかなりました。人は追い詰められると何とかなるもんなんですね。
さて、本日の講義は「アルゴリズムって何?」です。アルゴリズムと聞くと何だか難しそうなものですが、何てことはありません。
今回はアルゴリズムの初歩の初歩から初めてもらいました。
アルゴリズムって何?
アルゴリズムとは簡単にいうと「目的を達成するための手順、又はその方法」です。
下記に簡単な例題があります。興味のある方は挑戦してみてください。
例題1
道路の手前にAさんがいます。道路の向こう側であるB地点に行くのが目標です。あなたならどのような手順で行動しますか?
ここに一例を書いておきます。これを参考にして考えてみてください。
・「橋を渡る方法」 橋を見つける → 橋まで移動する → 階段を上る → 橋を渡る → 階段を下りる → B地点まで行く
大切なことは、頭の中でイメージした行動を順番に並べてみることです。上記の「橋を渡る方法」以外にもたくさんあります。道路の近くには他に何があるでしょうか?考えてみてください。このページの最後の方に他の回答を載せておくので参考にしてみてください。
例題2
Aさんはいま家にいます。喉がものすごく乾きました。とにかく何かを飲みたい!あなたならどのような手順で行動しますか?
ここに一例を書いておきます。これを参考にして考えてみてください。
・「蛇口を使う方法」 蛇口を見つける → 蛇口を開く → 水をすくう → 水を飲む
この問題の解答はかなりのバリエーションがあります。小学校での講義では以下の面白い答えがいくつもでました。
「雨の水を飲む」「コンビニに行ってドリンクを買う」「ドリンクバーに行く」「サボテンの水を飲む」「血を飲む」「自動販売機に買いに行く」「隣の家の人に飲むものをもらいに行く」中には「冷凍庫の氷を溶かす」なんてものもありました。
「血を飲む」というのは、適切な答えではないかもしれません。しかし、極限の状況では、人はどんな行動をとるのか誰にもわかりません。
「127時間」という映画があります。実際に起こったアーロン・ラルストン(書籍:奇跡の6日間)という人の遭難事故を映画化したものです。
アメリカ・ユタ州のキャニオンランズ国立公園の崖から落ちた男性が岩と岩の谷間に落ち、運悪く腕が挟まり身動きできない状態に・・・。家族にも友人にも行き先を告げずその場所を訪れ、また携帯電話も持っていない。人里離れた場所なので当然誰もおらず、助けも呼べない。彼がそんな状況からどのように脱出を図り、飢えや渇きをしのぎ、孤独と向き合い、死の恐怖と戦ったかを再現した映画です。
彼は、そんな状況の中で5日間近く生き延びたそうです。
持っていた手持ちの水が無くなってからは、凄まじく襲い掛かる喉の渇きを潤すべく「自分のおしっこを飲む」、「腕を噛み切り血を飲む」、そんな目をそらしたくなるような場面もリアルに描写されています。
動きたくても腕が挟まれているので身動きができず、刻々と迫る命のタイムリミット・・・。彼は最終的にどのような判断を下したのか・・・。それは映画をご覧になってください。
書籍はこちらです。「アーロン・ラルストン奇跡の6日間」
話が少しそれましたが、「血を飲む」という発想は極限状態ではありうる事なのです。
アルゴリズムは目的を達成できれば、それで正解なのです。間違いなんてありません。逆に目的を達成できなければ、それは「手順がおかしい」「方法がおかしい」ということになります。あとは、効率の問題です。「1時間かけて何かを達成する方法」と「1分かけて何かを達成する方法」はどちらが良いでしょうか?
誰でも「1分かけて何かを達成する方法」を選択するはずです。
一番身近なもので言えばレトルト製品です。便利ですよね~。レンジでチンするだけで、あるいは鍋でボイルするだけで料理ができてしまう。もっとも効率を重視したものと言えます。皆さんはどうだったでしょうか?いくつ方法と手順を思いつきましたか?
アルゴリズムはこんな単純な発想から学んでいきます。小学生の子たちもワイワイ考えてくれて楽しんでくれた様子でした。さて、次回は第二ステップに移行です。今度はより実践的にアルゴリズムを体験してもらう予定です。
取り急ぎ、今日はこのへんで。ではまた!
例題1の回答
- 「地下道を使う方法」 地下道を見つける → 地下道に行く → 階段を下りる → 地下道を渡る → 階段を上る → B地点に行く
- 「横断歩道を使う方法」 横断歩道を見つける → 横断歩道にく → 信号をみる → 信号が青 → 横断歩道を渡る → B地点に行く
例題2の回答
- 「蛇口を使う方法」 蛇口を見つける → 蛇口を開く → 水をすくう → 水を飲む
- 「自動販売機で買う方法」 お金を用意する → 玄関に移動する → 扉を開ける → 扉をしめる → 自動販売機に向かう → お金を入れる → ボタンを押す → ジュースを取り出す → ジュースを飲む
- 「氷を解かす方法」 冷蔵庫に向かう → 冷凍庫から氷を取り出す → コップを入れる → 待つ → 溶けて水になったら飲む
(※自動販売機に向かう箇所は多少省略しています)