What is prefix/postfix notation?

Præfiks Notation: Matematik Uden Parenteser

27/06/2006

Rating: 4.03 (13936 votes)

Vi lærer alle fra en tidlig alder at skrive matematiske udtryk på en bestemt måde: 1 + 2. Tallet, handlingen vi vil udføre, og derefter det næste tal. Denne metode, kendt som infix-notation, virker intuitiv for os mennesker. Men for en computer kan den være tvetydig og kræve komplekse regler for at blive forstået korrekt. Hvad nu hvis der fandtes en anden måde? En mere logisk og strømlinet metode, der eliminerer behovet for parenteser og regler om operatorpræcedens? Velkommen til en verden af præfiks- og postfiks-notation, også kendt som Polsk og Omvendt Polsk Notation.

Disse notationer er især populære inden for datalogi og programmering for deres evne til utvetydigt at udtrykke rækkefølgen af operationer. I stedet for at placere operatoren (som +, -, *, /) mellem operanderne (tallene), placerer man den enten før (præfiks) eller efter (postfiks). Selvom det kan se mærkeligt ud ved første øjekast, er det en utrolig effektiv måde at strukturere beregninger på for en maskine. Denne artikel vil dykke ned i, hvordan disse systemer fungerer, hvorfor de er så nyttige, og hvordan man konverterer mellem de forskellige notationer.

Indholdsfortegnelse

Hvad er Forskellen: Infix, Præfiks og Postfiks?

For at forstå styrken ved præfiks og postfiks, lad os først sammenligne de tre notationsformer med et par eksempler. Den grundlæggende idé er simpel: Det handler udelukkende om placeringen af operatoren i forhold til dens operander.

  • Infix-notation: Dette er den standardform, vi bruger i hverdagen. Operatoren står imellem de to operander. Eksempel: 5 + 3.
  • Præfiks-notation (Polsk Notation): Operatoren står før sine operander. Eksempel: + 5 3.
  • Postfiks-notation (Omvendt Polsk Notation): Operatoren står efter sine operander. Eksempel: 5 3 +.

Forskellen bliver tydeligere med mere komplekse udtryk. Lad os tage udtrykket (5 - 6) * 7. I infix-notation er parenteserne nødvendige for at fortælle os, at vi skal udføre subtraktionen før multiplikationen. Uden dem (5 - 6 * 7) ville standardreglerne for regnearternes hierarki (PEMDAS/BODMAS) betyde, at vi skulle gange først, hvilket giver et helt andet resultat.

I præfiks- og postfiks-notation er denne tvetydighed fuldstændig fjernet. Parenteser er unødvendige.

Sammenligningstabel

Infix UdtrykPræfiks ÆkvivalentPostfiks Ækvivalent
(5 - 6) * 7* - 5 6 75 6 - 7 *
5 - (6 * 7)- 5 * 6 75 6 7 * -
(A + B) / (C - D)/ + A B - C DA B + C D - /

Som tabellen viser, definerer rækkefølgen af operatorer og operander i præfiks- og postfiks-notation entydigt, hvilken operation der skal udføres først. Der er intet behov for at huske komplekse regler om hierarki.

Evalueringsalgoritmen: Hvordan en Computer Tænker

Den virkelige elegance ved disse notationer ligger i, hvor let en computer kan evaluere dem ved hjælp af en simpel datastruktur kaldet en stak (stack). En stak fungerer efter "sidst ind, først ud"-princippet, ligesom en stak tallerkener – du tager altid den øverste tallerken først.

Lad os se på, hvordan en computer evaluerer et præfiksudtryk som * - 5 6 7:

  1. Computeren læser udtrykket fra højre mod venstre.
  2. Den støder på '7' og lægger det på stakken. Stak: [7]
  3. Den støder på '6' og lægger det på stakken. Stak: [7, 6]
  4. Den støder på '5' og lægger det på stakken. Stak: [7, 6, 5]
  5. Den støder på operatoren '-'. Den tager de to øverste tal fra stakken (5 og 6), udfører operationen (5 - 6 = -1) og lægger resultatet tilbage på stakken. Stak: [7, -1]
  6. Den støder på operatoren '*'. Den tager de to øverste tal fra stakken (-1 og 7), udfører operationen (-1 * 7 = -7) og lægger resultatet tilbage på stakken. Stak: [-7]
  7. Udtrykket er slut, og det endelige resultat er det eneste tal tilbage på stakken: -7.

For postfiks-notation (f.eks. 5 6 - 7 *) fungerer processen på samme måde, men udtrykket læses fra venstre mod højre. Denne mekaniske, trin-for-trin proces er ekstremt hurtig og ressourceeffektiv for en computer, hvilket er en af hovedårsagerne til, at disse notationer er så udbredte i systemer på lavt niveau.

Konvertering Mellem Notationer

Selvom computere elsker præfiks og postfiks, foretrækker mennesker ofte infix. Derfor er det nyttigt at vide, hvordan man konverterer mellem formaterne. En systematisk tilgang kan gøre processen overskuelig.

Fra Infix til Præfiks/Postfiks

En pålidelig metode er at tilføje parenteser fuldt ud til infix-udtrykket for at gøre evalueringsrækkefølgen helt eksplicit og derefter flytte operatorerne.

Lad os konvertere (A * B) - (C / D) til præfiks:

  1. Fuldt parentetiseret: Udtrykket er allerede opdelt i klare "termer": ((A * B) - (C / D)).
  2. Inderste venstre term:(A * B). Flyt operatoren * til fronten: * A B. Udtrykket er nu: (* A B - (C / D)).
  3. Næste inderste term:(C / D). Flyt operatoren / til fronten: / C D. Udtrykket er nu: (* A B - / C D).
  4. Yderste term: Den yderste operation er subtraktion mellem resultatet af de to første termer. Flyt operatoren - helt til fronten.
  5. Endeligt Præfiks Resultat:- * A B / C D.

For at konvertere til postfiks følges samme logik, men operatoren flyttes til slutningen af termen i hvert trin, hvilket ville give: A B * C D / -.

Fra Præfiks til Infix

At konvertere tilbage til infix kan gøres ved gentagne scanninger. Find en operator, der er direkte efterfulgt af det korrekte antal operander (typisk to), og erstat denne gruppe med et parentetiseret infix-udtryk.

Lad os konvertere - * A B / C D tilbage til infix:

  1. Scan: Vi finder * A B. Dette er en operator med to operander.
  2. Erstat: Erstat * A B med (A * B). Udtrykket er nu: - (A * B) / C D.
  3. Scan igen: Vi finder / C D.
  4. Erstat: Erstat / C D med (C / D). Udtrykket er nu: - (A * B) (C / D).
  5. Sidste scan: Vi har nu operatoren - med de to "operander" (A * B) og (C / D).
  6. Endeligt Infix Resultat:((A * B) - (C / D)). Parenteserne kan ofte forenkles afhængigt af de normale præcedensregler.

Anvendelser i den Virkelige Verden

Dette er ikke blot en teoretisk øvelse. Præfiks- og postfiks-notation har mange praktiske anvendelser:

  • Programmeringssprog: Mange sprog, især dem i Lisp-familien, bruger præfiks-notation (S-expressions). Stack-orienterede sprog som Forth og PostScript (der bruges i printere og PDF-filer) er bygget op omkring postfiks-notation.
  • Lommeregnere: Visse videnskabelige lommeregnere, især ældre modeller fra Hewlett-Packard (HP), er berømte for at bruge Omvendt Polsk Notation (RPN/postfiks). Brugere indtaster de to tal og trykker derefter på operatorknappen, hvilket mange finder hurtigere for komplekse beregninger, da det undgår massiv brug af parenteser.
  • Compilere: Når en compiler oversætter menneskeligt læsbar kode (ofte skrevet i infix) til maskinkode, konverterer den ofte udtrykkene til en intern præfiks- eller postfiks-lignende struktur (et abstrakt syntakstræ), fordi det er meget lettere at evaluere og optimere.

Ofte Stillede Spørgsmål (OSS)

Hvorfor kaldes det "Polsk Notation"?
Navnet kommer fra den polske logiker Jan Łukasiewicz, som opfandt notationen omkring 1924. Formålet var at skabe en parentesfri notation for propositionel logik, hvilket forenklede bevisførelse og manipulation af logiske udsagn. "Omvendt Polsk Notation" er simpelthen den samme idé, men med operatoren placeret efter operanderne.
Er præfiks eller postfiks bedre?
Ingen af dem er fundamentalt "bedre" end den anden. De løser det samme problem med tvetydighed og evalueres på en meget lignende måde. Postfiks (RPN) har historisk set været lidt mere populær i visse applikationer som lommeregnere og stack-baserede sprog, men de er konceptuelt ækvivalente i deres effektivitet.
Skal jeg bruge dette i min daglige matematik?
For de fleste mennesker er svaret nej. Infix-notation er dybt forankret i vores uddannelsessystem og er fuldt ud tilstrækkelig til manuelle beregninger. Værdien af præfiks og postfiks ligger primært i deres anvendelse inden for datalogi, hvor maskinens effektivitet og entydighed er afgørende.

Hvis du vil læse andre artikler, der ligner Præfiks Notation: Matematik Uden Parenteser, kan du besøge kategorien Teknologi.

Go up