What is a postfix expression?

Postfix-notation: En komplet guide

23/07/2025

Rating: 3.91 (5953 votes)

Matematiske formler indeholder ofte komplekse udtryk, der kræver en klar forståelse af rækkefølgen af operationer for at blive evalueret korrekt. For at repræsentere disse udtryk bruger vi forskellige notationer, hver med sine egne fordele og ulemper. I denne artikel vil vi udforske tre almindelige notationsformer: infix, prefix og postfix. At forstå disse er afgørende, især inden for datalogi og programmering, hvor effektiv behandling af matematiske udtryk er en fundamental opgave for en kompilator. Vi vil se på, hvordan hver notation fungerer, og fokusere specifikt på postfix-notation, også kendt som omvendt polsk notation, og hvorfor den er så værdifuld for computere.

How to convert an infix expression to postfix form?
Write a program to convert an Infix expression to Postfix form. Infix expression: The expression of the form "a operator b" (a + b) i.e., when an operator is in-between every pair of operands. Postfix expression: The expression of the form "a b operator" (ab+) i.e., When every pair of operands is followed by an operator. Examples:
Indholdsfortegnelse

Hvad er Infix-udtryk?

Infix-udtryk er den matematiske notation, vi alle lærer i skolen og bruger i vores dagligdag. I denne notation placeres operatoren mellem sine operander. For eksempel er udtrykket "3 + 5" et infix-udtryk, hvor operatoren '+' er placeret mellem operanderne '3' og '5'.

Selvom infix-notation er intuitiv og let at læse for mennesker, kan den være udfordrende for computere at evaluere effektivt. Dette skyldes, at man skal tage højde for operatorrækkefølgen (også kendt som operatorpræcedens), og parenteser kan bruges til at tilsidesætte denne standardrækkefølge. For eksempel, i udtrykket "3 + 5 * 2", skal multiplikation udføres før addition, hvilket giver 13, ikke 16.

Regler for Operatorpræcedens

Infix-udtryk følger et sæt regler, der bestemmer, i hvilken rækkefølge operatorer evalueres. Uden disse regler ville udtryk være tvetydige. Generelt har multiplikation og division højere præcedens end addition og subtraktion. Eksponentiering har endnu højere præcedens, og parenteser har den højeste, da de kan tvinge en bestemt evalueringsrækkefølge.

Her er en tabel, der opsummerer de almindelige regler for præcedens:

OperatorPræcedens
Parenteser ()Højeste
Eksponentiering ^Høj
Multiplikation *Medium
Division /Medium
Addition +Lav
Subtraktion -Lav

Fordele og Ulemper ved Infix-notation

Fordele:

  • Naturligt for mennesker: Det er den mest velkendte og intuitive måde at skrive matematiske udtryk på.
  • Bred anvendelse: Understøttes af de fleste programmeringssprog og lommeregnere.

Ulemper:

  • Kræver parenteser: Nødvendigt for at undgå tvetydighed og specificere rækkefølgen af operationer.
  • Ineffektiv for computere: Parsing og evaluering kræver komplekse algoritmer og datastrukturer (som en stak) for at håndtere præcedens og parenteser.

Hvad er Prefix-udtryk (Polsk Notation)?

Prefix-udtryk, også kendt som polsk notation, er en matematisk notation, hvor operatoren kommer før sine operander. Den blev opfundet af den polske logiker Jan Łukasiewicz. I prefix-notation skrives operatoren først, efterfulgt af dens operander. For eksempel ville infix-udtrykket "3 + 5" blive skrevet som "+ 3 5" i prefix-notation.

What is a postfix expression?
Postfix expressions are also known as Reverse Polish Notation (RPN), are a mathematical notation where the operator follows its operands. This differs from the more common infix notation, where the operator is placed between its operands. In postfix notation, operands are written first, followed by the operator.

En af de store fordele ved prefix-notation er, at den eliminerer behovet for parenteser og regler for operatorpræcedens. Rækkefølgen af operationer bestemmes udelukkende af operatorernes position. Evaluering af prefix-udtryk er ligetil og kan effektivt implementeres ved hjælp af en stak.

Fordele og Ulemper ved Prefix-notation

Fordele:

  • Ingen parenteser nødvendige: Rækkefølgen er entydig.
  • Let at parse for en computer: Kan evalueres effektivt med en simpel algoritme.

Ulemper:

  • Uvant for mennesker: Kan være svær at læse og forstå uden tilvænning.
  • Mindre udbredt: Ikke så almindeligt anvendt som infix- eller postfix-notation i praksis.

Hvad er Postfix-udtryk (Omvendt Polsk Notation)?

Postfix-udtryk, bedre kendt som omvendt polsk notation (RPN - Reverse Polish Notation), er en notation, hvor operatoren følger efter sine operander. Ligesom prefix-notation eliminerer den behovet for parenteser. Infix-udtrykket "3 + 5" skrives som "3 5 +" i postfix-notation.

Denne notation er yderst effektiv for computere at evaluere. Processen involverer at læse udtrykket fra venstre mod højre. Når et tal (operand) stødes på, skubbes det til en stak. Når en operator stødes på, poppes det nødvendige antal operander fra stakken, operationen udføres, og resultatet skubbes tilbage på stakken. Det endelige resultat er det eneste tal, der er tilbage på stakken, når hele udtrykket er blevet behandlet.

Fordele og Ulemper ved Postfix-notation

Fordele:

  • Eliminerer parenteser og præcedensregler: Gør parsing og evaluering meget enklere og hurtigere for en maskine.
  • Effektiv evaluering med stak: Den stak-baserede algoritme er ligetil og ressourceeffektiv.
  • Mere udbredt end prefix: Anvendes i visse programmeringssprog (f.eks. Forth, PostScript) og i nogle lommeregnere (især fra HP).

Ulemper:

  • Kræver tilvænning for mennesker: Ligesom prefix er det ikke umiddelbart intuitivt at læse.
  • Kræver en stak-baseret algoritme: Selvom den er effektiv, kræver den en specifik implementering.

Sammenligning af Infix, Prefix og Postfix

For at give et klart overblik, lad os sammenligne de tre notationer på tværs af forskellige kriterier.

AspektInfix-notationPrefix-notation (Polsk Notation)Postfix-notation (Omvendt Polsk Notation)
LæsbarhedMeget letlæselig for menneskerMindre letlæselig, kræver tilvænningMindre letlæselig, kræver tilvænning
OperatorplaceringMellem operanderFør operanderEfter operander
Krav til parenteserOfte påkrævetIkke påkrævetIkke påkrævet
Håndtering af præcedensNødvendig, parenteser bestemmer rækkefølgeIkke nødvendig, fast rækkefølgeIkke nødvendig, fast rækkefølge
EvalueringsmetodeKompleks, kræver parsing af præcedensSimpel, fra højre mod venstreSimpel, fra venstre mod højre med en stak
Computer-effektivitetMindre effektiv pga. parsingMere effektiv, ingen parenteserMeget effektiv, ingen parenteser
AnvendelseAlmindelig i daglig matematik og de fleste programmeringssprogAlmindelig i datalogi og visse sprog (f.eks. LISP)Almindelig i datalogi, kompilatorer og visse sprog (f.eks. PostScript)

Konvertering fra Infix til Postfix

Da computere har lettere ved at arbejde med postfix-udtryk, er en almindelig opgave for en kompilator at konvertere bruger-indtastede infix-udtryk til postfix-format før evaluering. Denne proces undgår gentagne scanninger af udtrykket og forenkler evalueringslogikken betydeligt.

What is a postfix in C & C++?
Postfix is used for operations such as incrementation (++): Some examples for each: Infix: Postfix: Prefix (also called "unary" in C and C++): That function call f() is clearly prefix, don't you think? The operator f is being applied to the parameters in the parentheses.

Konverteringen udføres typisk ved hjælp af en stak til midlertidigt at opbevare operatorer. Her er algoritmen trin for trin:

  1. Opret en tom stak til operatorer og en tom streng til postfix-resultatet.
  2. Scan infix-udtrykket fra venstre mod højre, tegn for tegn.
  3. Hvis det scannede tegn er en operand (et tal eller en variabel), tilføjes det direkte til resultatstrengen.
  4. Hvis det scannede tegn er en venstreparentes '(', skubbes den til stakken.
  5. Hvis det scannede tegn er en højreparentes ')', poppes operatorer fra stakken og tilføjes til resultatstrengen, indtil en venstreparentes '(' findes. Begge parenteser kasseres.
  6. Hvis det scannede tegn er en operator:
    • Så længe stakken ikke er tom, og operatoren øverst på stakken har højere eller samme præcedens som den scannede operator, poppes operatoren fra stakken og tilføjes til resultatstrengen.
    • Efter løkken skubbes den scannede operator til stakken.
  7. Når hele infix-udtrykket er scannet, poppes eventuelle resterende operatorer fra stakken og tilføjes til resultatstrengen.

Lad os tage et eksempel: A * (B + C) / D

  • A: Operand, tilføj til resultat. Resultat: `A`
  • *: Operator, skub til stakken. Stak: `*`
  • (: Venstreparentes, skub til stakken. Stak: `* (`
  • B: Operand, tilføj til resultat. Resultat: `A B`
  • +: Operator, skub til stakken (top er '('). Stak: `* ( +`
  • C: Operand, tilføj til resultat. Resultat: `A B C`
  • ): Højreparentes. Pop '+' fra stakken. Resultat: `A B C +`. Pop '('. Stak: `*`
  • /: Operator. Præcedens af '/' er lig med '*'. Pop '*' fra stakken. Resultat: `A B C + *`. Skub '/' til stakken. Stak: `/`
  • D: Operand, tilføj til resultat. Resultat: `A B C + * D`

Endelig tømmes stakken. Pop '/'. Endeligt resultat: A B C + * D /

Ofte Stillede Spørgsmål (FAQ)

Hvorfor kaldes det 'omvendt polsk notation'?

Det kaldes 'omvendt' polsk notation, fordi operatoren kommer efter operanderne, i modsætning til den oprindelige 'polske notation' (prefix), hvor operatoren kommer før. Begge blev navngivet til ære for den polske logiker Jan Łukasiewicz.

Bruges postfix-notation i virkelige applikationer?

Ja, absolut. Det er fundamentalt i designet af kompilatorer og fortolkere. Sprogene PostScript (brugt i printere og PDF-filer) og Forth er stak-baserede og bruger postfix-notation direkte. Mange videnskabelige lommeregnere, især fra Hewlett-Packard, har også en RPN-tilstand, som mange ingeniører og forskere foretrækker for dens effektivitet.

Hvordan evaluerer en computer et postfix-udtryk?

En computer bruger en stak. Den læser udtrykket fra venstre mod højre. Når den ser en operand, skubber den den til stakken. Når den ser en operator, popper den de to øverste operander, udfører operationen og skubber resultatet tilbage på stakken. Det endelige svar er det tal, der er tilbage på stakken til sidst.

Konklusion

Selvom vi som mennesker er mest fortrolige med infix-notation, er prefix- og især postfix-notationer utroligt kraftfulde værktøjer i datalogiens verden. Deres evne til at eliminere tvetydighed uden brug af parenteser gør dem ideelle til computer-evaluering. At forstå, hvordan man konverterer et infix-udtryk til postfix, giver en dybere indsigt i, hvordan kompilatorer arbejder, og hvorfor datastrukturer som stakken er så fundamentale i programmering. Næste gang du skriver en simpel matematisk formel, kan du tænke på den elegante proces, der foregår bag kulisserne for at omdanne den til et format, en maskine nemt kan forstå.

Hvis du vil læse andre artikler, der ligner Postfix-notation: En komplet guide, kan du besøge kategorien Teknologi.

Go up