手順ということば
あなたは、もう知っている
紙の辞書で「みどり」を引くとき、あなたは1ページ目からめくりません。まんなかへんを開いて、「は行か——行きすぎ」と手前に戻るはずです。ところが今日の日記を昨日のノートからさがすなら、最後のページから逆にめくるでしょう。
つまりあなたは、さがし物の手順を複数持っていて、相手によって使い分けています。このコースの主役は、その「手順」です。手順のことを、プログラミングの世界ではアルゴリズムと呼びます。
手順が「アルゴリズム」と呼ばれる条件
ただし、どんな手順でもアルゴリズムと呼べるわけではありません。条件は2つです。
- 曖昧さがない — 「いい感じのページを開く」は手順になりません。「残りの範囲の、まんなかのページを開く」なら手順です
- 必ず終わる — 「見つかるまでてきとうにめくる」は、運が悪いと永遠に終わりません
コース1で、プログラムは「曖昧さのない文」だと学びました。関係を言っておくと、アルゴリズムは手順そのもの、プログラムはそれをことばにしたものです。同じ辞書の引き方を日本語でもにわ語でもJavaScriptでも書けるように、同じアルゴリズムは、どの言語でも書けます。
手順を、場面の列として見る
このコースの実験室は、手順を1歩ずつ再生して見せてくれます。まずは中身の説明ぬきで、ながめてください。バラバラの数の列が、ならんでいきます。
ならべる前。左はしの1枚は、それだけで「そろっている」
「再生する」のかわりに「1歩すすむ」を押すと、好きな速さで進められます。手順は、こうして場面の列としてぜんぶ広げて見られます——どの場面でも、やっていることは曖昧さのない1歩だけです。
「くらべた回数」という物差し
実験室の右上に、くらべた回数が出ていたのに気づきましたか。このコースでは、手順の良し悪しをこの回数で測ります。
なぜ秒で測らないのか。秒は、コンピュータの速さで変わってしまうからです。10年後の速い機械なら、どんな手順でも速く終わります。でもくらべる回数は、手順そのものが決めます——機械を取りかえても、1回も変わりません。手順の「かたち」を測りたいなら、物差しも手順の側に置くのです。
⟡ よりみち:アルゴリズムという名前
この不思議な響きのことばは、9世紀のバグダッドで計算の手順書を書いた数学者、アル=フワーリズミーの名前がなまったものです。コンピュータより1000年以上年上の、由緒ある考え方です。
✎ 演習:自分の手順を、ことばにする
トランプの手札が7枚、バラバラの順で配られたとします。あなたがいつも無意識にやっている「並べる手順」を、曖昧さのない日本語で3行ほどで書いてみてください。書けたら、「曖昧さがない」「必ず終わる」の2条件を満たしているか、自分で点検します。
ヒント1(考え方)
多くの人は「左から順に1枚ずつ手に取り、すでにそろっている部分の正しい位置に差しこむ」という手順を使っています。さっき実験室で再生されていたのが、まさにこれです。
こたえ(のひとつ)
「2枚目のカードを手に取り、左のカードと小さい順になる位置に差しこむ。3枚目も同じく、左のそろった部分の正しい位置に差しこむ。最後の1枚まで、これをくりかえす」——どのカードでも迷いなく実行でき(曖昧さがない)、枚数ぶんで必ず終わります。あなたの書いた手順が違うかたちでも、2条件を満たしていれば立派なアルゴリズムです。
このレッスンで分かったこと
- アルゴリズムとは、曖昧さがなく・必ず終わる手順のこと
- アルゴリズムは手順そのもの。プログラムは、それをことばにしたもの
- 手順は場面の列として、1歩ずつ広げて見られる
- 手順の良し悪しは、秒ではなくくらべた回数で測る——物差しを機械から切り離すため