初心者のJavaプログラミング

プログラミングガチ初心者がIT業界を目指して頑張ります。

【基本情報】逆ポーランド表記法

今日習ったとこで面白いなーと思ったところ。

逆ポーランド表記法(後置表記法)

例えばこんな式があったとします。

Y = (A + B) * (C / D - E)

かっこでくくってあるので計算の順番が分かりますね。
でも、この方法だとコンピュータは分かりにくいみたいです。分かりにくいというより、
かっこの処理に時間がかかってしまうんだそうです。

そこでこの式をコンピュータが分かりやすいように翻訳するやり方があります。
それが逆ポーランド表記法というものです。
上の式を逆ポーランド表記法で表記すると以下のようになります。

YAB+CD/E-*=

意味不明だと思うので解説をしていきます。
やり方があっているか分からないですが、私のやり方を書いていきますw

1.()をブロックとしてとらえる

Y = (A + B) * (C / D - E)
この式を大きく見ると
Y = ● * ▲
というように見えてくると思います。

2. 演算子を後ろにやる

Y = ● * ▲
をまたまた大きなブロックで見てあげると、
Y = ■
と見えてきますよね。

ここで逆ポーランド表記法の後にかっこ書きで後置表記法と書いていたのを覚えていますか。
後置というのは文字通り後ろに置くということです。

普段使っていた演算式は中置表記法と言います。
Y = ● * ▲
とかのことですね。
左辺と右辺の間に演算子があります。

では、ここから推測するに後置表記法とはどのようにして式を表記する方法なのでしょうか。
答えはこうです。
Y = ●▲*
これが逆ポーランド表記法、つまり後置表記法になります。

これらの説明をふまえた上で
Y = ■
はどうなるかというと、こうなりますね。
Y■=

3. ■の中身を戻していく

2で
Y■=
となりましたね。
この■を戻していきます。

Y●*▲=

となります。
ここで■のときと同様に演算子を後ろにしてやります。
Y●▲*=

4. ●の中身を戻していく。

Y(A + B)▲*=
演算子プラスが出現しましたね。
注意)ここはY*(A+B)じゃないことに注意

ここも同様に演算子を後ろにやります。
YAB+▲*=

5. ▲の中身を戻していく

YAB+(C / D - E)*=

ちょっとややこしいですが、落ち着けば大丈夫です。

YAB+CD/E-*=

となり変換終了です。

樹構造

漢字あっているかなw
イメージこんなです。
f:id:fightingneetkun:20140804163239p:plain

問題の
Y = (A + B) * (C / D - E)
を樹構造で書くとこのようになります。

f:id:fightingneetkun:20140804165935p:plain
これを青で書いた番号順に並べると逆ポーランド表記法になります。

書き方ですが、これは慣れるしかないらしいです。
ブロックで分けて演算子を基点に左右に振り分けていくイメージでやってます。
逆ポーランド歴1日で何偉そうなこといってんだwww

ウルトラ分かりにくいかもしれませんが、コンピュータはこのような構造の処理が得意らしいです。
これは検索にも関係してくるみたいです。
この三角で囲んだ処理が全部同じような処理を行っているんですね。
同じような処理はコンピュータの得意分野です。
まあ、参考までに。
f:id:fightingneetkun:20140804171036p:plain



では今日はこれくらいで。