逆ポーランド記法とは?仕組みやメリット・デメリットとポーランド記法との違いを解説

こんにちは。ゆうせいです。

私たちは普段、数学や日常生活の計算で「1 + 2」のように、数字と数字の間に演算記号を挟んで記述しています。しかし、コンピューターの世界では、この記述方法とは異なる「逆ポーランド記法」という計算の表現方法が広く使われています。プログラムや計算機の仕組みを学ぶ上で重要となる逆ポーランド記法について、基礎から客観的な事実に基づいて解説します。

演算子の配置による3つの記法とポーランド記法の存在

計算式において、足し算や引き算などの記号を「演算子」、計算の対象となる数字を「被演算子」と呼びます。演算子と被演算子の配置方法には、主に3つの種類が存在します。

1つ目は、私たちが日常的に使用している「中置記法(ちゅうちきほう)」です。演算子を被演算子の間に配置する方法で、「1 + 2」のように記述します。

2つ目は、演算子を被演算子の前に配置する「ポーランド記法」です。この記法は前置記法とも呼ばれます。ポーランドの論理学者によって考案されたことに由来して、ポーランド記法と名付けられました。記述としては「+ 1 2」のようになります。したがって、「ポーランド記法もあるのか」という疑問に対する答えは、明確に「存在する」となります。

3つ目が、今回の主題である「逆ポーランド記法」です。演算子を被演算子の後ろに配置する方法で、後置記法とも呼ばれます。記述としては「1 2 +」のようになります。

高校数学の関数で考える記法の違い

3つの記法の違いを理解するために、高校数学で習う「関数」を比喩として考えてみましょう。

中置記法である「1 + 2」は、私たちが慣れ親しんだ表現ですが、関数として捉えると少し特殊な形をしています。

一方で、ポーランド記法「+ 1 2」は、高校数学で用いる関数 f(x, y) の f を「+」に、x, y を「1, 2」に置き換えた形、つまり「+(1, 2)」と同じ構造です。

逆ポーランド記法「1 2 +」は、データを先に準備して、後から「+」という命令を適用する構造になります。

逆ポーランド記法の仕組みとスタック

逆ポーランド記法で書かれた式をコンピューターが計算する際、「スタック」というデータ構造(データの管理方式)が使用されます。

スタックの仕組みは、机の上に本を順番に積み重ねていく様子に例えられます。本を積むときは常に一番上に重ね、本を取り出すときも一番上にある最新の本からしか取り出せません。スタックというデータ構造において、データを追加する操作を「プッシュ」、データを取り出す操作を「ポップ」と呼びます。

例として、逆ポーランド記法で書かれた「1 2 +」という式をコンピューターが処理する手順は次の通りです。

  • 最初の数字「1」を読み込み、スタックにプッシュします。
  • 次の数字「2」を読み込み、スタックにプッシュします。この時点でスタックは下に「1」、上に「2」が積まれた状態になります。
  • 演算子「+」を読み込みます。演算子が現れたら、スタックから数字を2回ポップします。まず一番上の「2」が取り出され、次に「1」が取り出されます。
  • 取り出した数字を足し算し、計算結果である「3」を再びスタックにプッシュします。

このように、左から順番に文字を読み進めるだけで、迷うことなく計算を実行できる仕組みになっています。

逆ポーランド記法のメリット

逆ポーランド記法には、計算処理の面で明確な事実としてのメリットが存在します。

  • 括弧(カッコ)が不要になる中置記法で計算の優先順位を変えるには、括弧を使用する必要があります。例えば、分数を表す式\frac{a + b}{c}を中置記法で一行のテキストとして書く場合、(a + b) / c と括弧を付ける必要があります。しかし、逆ポーランド記法では a b + c / と表現でき、括弧を一切使わずに正しい計算順序を指定できます。
  • コンピューターの処理効率が向上する中置記法では、式全体を見渡して括弧の有無や、足し算より掛け算を優先するといったルールを解析しなければなりません。逆ポーランド記法であれば、式を左から右へ一度読み込むだけで計算を完了できるため、プログラムの構造が単純になり、計算機のメモリや処理の負担を軽減できます。

逆ポーランド記法のデメリット

一方で、逆ポーランド記法には以下のような事実としてのデメリットもあります。

  • 人間にとっての視認性が低い人間は幼少期から中置記法に慣れ親しんでいるため、逆ポーランド記法で書かれた長い数式を直感的に理解することは困難です。数式に間違いがあった場合、人間が目視でその間違いを発見するのに時間がかかります。
  • スタック領域のエラーのリスクがある計算が複雑になり、スタックに数字を積み上げる回数が多くなりすぎると、計算機が用意しているメモリ領域を超えてしまう「スタックオーバーフロー」というエラーを引き起こす原因になります。

まとめと今後の学習ステップ

逆ポーランド記法は、演算子を後ろに配置することで、括弧を使わずにコンピューターが効率よく計算できるように工夫された記法です。対して、演算子を前に配置するポーランド記法も存在します。それぞれの記法には、計算機の処理効率向上というメリットと、人間の視認性の低下というデメリットが客観的な事実として存在します。

逆ポーランド記法の仕組みをより深く理解するための、今後の論理的な学習ステップは以下の通りです。

  1. 自分で中置記法の数式(例:3 * (4 + 5))を準備し、それを逆ポーランド記法に手動で変換する練習を行う。
  2. 変換した逆ポーランド記法の式を、ノートにスタックの図(箱のイラストなど)を書きながら、プッシュとポップの動きを1ステップずつ追跡してみる。
  3. プログラミング言語に触れる機会があれば、配列の機能(pushやpopのメソッド)を利用して、逆ポーランド記法の数式を入力すると自動で計算結果を出力するプログラムを構築してみる。

以上のステップを順番に進めることで、データ構造やアルゴリズムの基礎知識を体系的に身に付けることができます。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。