計算のパズル:逆ポーランド記法
6分04秒 | FE
基本情報技術者試験の頻出テーマを解説した動画コンテンツです。
トランスクリプト(字幕テキスト)
さあ、今日のテーマに早速入っていきましょう。今回はコンピュータサイエンスの世界からちょっと不思議な計算パズル 逆ポーランド記法っていうのを皆さんと一緒に見ていきたいと思います。 さて、早速ですが、こちらをご覧ください。左がまあ僕たち人間が普通に書く計算式ですよね。で、右がなんと コンピュータが好むとされる書き方なんです。いや、全然違いますよね。なんだか暗号みたいでパッと見、意味がわからないですよね。 でもなんでコンピュータはわざわざこんな分かりにくい書き方をするんでしょうか? 何か特別な理由があるはずですよね。よし、今日は皆さんと一緒にこの謎を解き明かしていきましょう。 このパズルを解くための最初のヒント、それはですね、僕たちにとっては当たり前の存在なんですけど、 コンピュータからするとちょっと厄介なもの。そう、「カッコ」です。ここに秘密が隠されてるんですよ。 というのも、コンピュータって基本的には物事をシンプルに、左から右へずっと順番に読んでいきたいんです。 でも、カッコがあると、おっと、こっちが先だって、そのスムーズな流れが止まっちゃうんですよね。 だから、コンピュータとしては、このカッコも取っ払っちゃいたいんです。 そして、その願いを叶えてくれるのが、まさにこの一見へんてこな書き方なんです。 ある資料によれば、これは 「カッコがいらない魔法の記法」なんだそうですよ。さて、じゃあその魔法の正体って何なのか、 それを理解するために、まずは計算式をちょっと違う見方でビジュアル化してみましょう。 その鍵を握るのがこちら。「式の木」と呼ばれるものです。 式の木っていうのは、計算式を表すための1つの方法なんですけど、考え方はすごくシンプルです。 足すとか掛けるとかの記号、つまり演算子が「親」、そして、計算される数字がその「子供」になる。 まあ、親子関係みたいなものですね。例えば、1+2だったら、 こんな感じの可愛らしい小さな木で表現できるわけです。さあ、いよいよここからが本番ですよ。 この式の木から、一体どうやってあの不思議な「1 2 +」という文字列が生まれるのか、 その魔法の瞬間を一緒に見ていきましょう。 この木をたどっていくためのルールは、驚くほど簡単で、たったの3つだけです。 まず、左の子供に行く。次に、右の子供に行く。で、最後に、親に戻る。 左、右、親。これだけ覚えてください。よし、じゃあ実際に このルール通りに木をなぞってみますよ。まず、左の子供から。 ここに行くと、見てて下さいね、ほら、1が下にポトンと落ちてきた。 これがあの文字列の先頭になります。左が終わったので、次は、そう、右の子供ですね。 同じようにたどっていくと、はい、2が隣に並びました。だんだん形になってきましたね。 そして、左、右ときたら、最後に訪れるのは、親である「+」です。 ここに来ると、はい、最後にプラスが落ちてきて、見てください、「1 2 +」。 あの暗号みたいな文字列がここに現れました。これだったんですね。 さて、魔法の文字列は手に入りました。でもこれだけじゃまだ計算できませんよ。 ここからがパズルの最後のピースです。コンピュータはこの文字列をどうやって計算するのか、 その秘密兵器がこの「スタック」という道具なんです。 スタックっていうのは、データを一時的に置いておくための箱みたいなものだと思ってください。 後から入れたものが先に出てくるっていう、ちょっと変わったルールがあります。 よく例えられるのが、お皿を重ねていくイメージですね。一番上に置いたお皿から取りますよね。 まさにあれです。後入れ先出し。このスタックを使った計算、 まあ、ゲームみたいなものなんですけど、ルールはめちゃくちゃシンプル。たったの2つです。 まず、もし数字が出てきたらスタックに「プッシュ」、つまり積む。 もし、「+」みたいな演算子が出てきたら、スタックから2つ数字を「ポップ」、つまり取り出して計算する。 で、その答えをまたスタックにプッシュして戻す。これだけ。簡単でしょ? じゃあ実際に、「1 2 +」を計算してみましょう。まず文字列の先頭は「1」。 これは数字ですね。なので、ルール通り、スタックにプッシュ。はい、積みました。 次は「2」。これも数字です。なので、さっきの1の上に同じくプッシュ。 はい、これで2段になりました。さあ、最後にきました「+」。 これは演算子です。さあ、ルールを思い出してください。 演算子の場合は、スタックの上から2つ、ポップポップと取り出します。 で、取り出したこの2と1を足し算します。答えは3ですよね。 そして、この計算結果の3をもう一度スタックにプッシュと戻すんです。 はい、これでスタックに残った最後の数字3が、最終的な計算結果になります。 見事パズルが解けましたね。こうやって見てみると面白いですよね。 式の木とスタック、この2つを組み合わせることで、 コンピュータはあの面倒なカッコが一切なくても、ただ左から右に読んでいくだけで、 どんなに複雑な計算だって、ちゃんと正しくできちゃうんです。 実はこれ、皆さんが普段使っている関数電卓とか、プログラミング言語の裏側で 実際に動いている仕組みなんですよ。いや、まさに魔法の記法ですね。 さて、最後にちょっと想像を膨らませてみませんか。 コンピュータは僕たちの世界を理解するために、今回見たような魔法の記法とか、 賢いトリックを他にも隠し持っているんでしょうか? 僕たちが普段何気なく使っているテクノロジーの裏側には、 きっとまだまだ面白いパズルがたくさん眠っているはずです。
このコンテンツは Web society で視聴・学習できます。