私はそれらのそれぞれがどのように相互に変換できるかを知っていますが、それらのアプリケーションが何であるかを実際には理解していません。通常のインフィックス操作は非常に読みやすいですが、どこで失敗するので、プレフィックスとポストフィックスの表記が開始されます。
5 に答える
中置記法は人間にとっては読みやすいのに対し、中置記法は機械にとっては解析しやすいものです。前後表記の大きな利点は、演算子の優先順位などの質問が発生しないことです。
たとえば、中置式を考えてみましょう1 # 2 $ 3
。さて、これらの演算子が何を意味するのかわからないので、2つの可能な対応する接尾辞式があります:1 2 # 3 $
と1 2 3 $ #
。これらの演算子の使用を管理する規則を知らなければ、中置式は本質的に価値がありません。
または、より一般的に言えば、追加の知識がなくても、前/後置式から元の(解析)ツリーを復元することは可能ですが、中置式には同じことが当てはまりません。
RPNとも呼ばれる後置記法は、左から右への処理が非常に簡単です。オペランドがスタックにプッシュされます。演算子は、そのオペランドをスタックからポップし、結果をプッシュします。解析はほとんど、またはまったく必要ありません。Forthおよび一部の計算機で使用されています(HP計算機はRPNを使用することで知られています)。
プレフィックス表記は、処理がほぼ同じくらい簡単です。Lispで使われています。
少なくともプレフィックス表記の場合:プレフィックス演算子を使用する利点は、構文的には、演算子が関数呼び出しであるかのように読み取られることです。
接頭辞/接尾辞と中置辞のもう1つの側面は、演算子のアリティ(適用される引数の数)を正確に2に制限する必要がなくなったことです。当然のことながら、加算/減算の場合はゼロ、乗算/除算の場合は1のようになります)。
中置式の場合、評価に必要な時間はO(n ^ 2)です。理由は演算子の優先順位です。
例:a+b*c
これでは、a + bを直接評価しません
。最初に、式全体をトラバースして、優先順位が最も高い演算子を見つけます。私たちの場合はそうです*
。したがって、最初に評価b*c
し、式の評価が完了するまで、同じ手順を再度実行します。
ただし、接尾辞または中置式の場合はそうではありません。接尾辞式の評価に必要な時間はO(n)です。
中置から後置への変換====O(n)
後置評価==== O(n)
合計時間=O(n)+ O(n)= O(n)
後置評価の場合、演算子の優先順位を考える必要はありません。左から右に評価する必要があります
同様に、プレフィックス式の場合、右から左に評価する必要があります