Aller au contenu

Notation polonaise inverse

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Notation post-fixée)
Exemple d'utilisation de la pile en RPN.

La notation polonaise inverse (NPI) (en anglais RPN pour Reverse Polish Notation), également connue sous le nom de notation post-fixée, permet d'écrire de façon non ambiguë les formules arithmétiques sans utiliser de parenthèses, et sans que la priorité des opérateurs n'intervienne. Dérivée de la notation polonaise présentée en 1924 par le mathématicien polonais Jan Łukasiewicz, elle s’en différencie par l’ordre des termes, les opérandes y étant présentés avant les opérateurs et non l’inverse.

Cette notation est très utilisée en informatique. Elle permet de calculer les opérations à l'aide d'une structure pile.

Par exemple, sur une calculatrice, l’expression peut s'écrire en NPI sous la forme 10 Enter 5 + 3 x, ou encore sous la forme 3 Enter 10 Enter 5 + x.

Friden EC-132, premier calculateur à utiliser la NPI.

Dérivée de la notation polonaise utilisée pour la première fois en 1924 par le mathématicien polonais Jan Łukasiewicz[1], la NPI a été inventée par le philosophe et informaticien australien Charles Leonard Hamblin (en) dans le milieu des années 1950, pour permettre les calculs sans faire référence à une quelconque adresse mémoire[2].

Un des premiers ordinateurs conçu, le Zuse 4 utilisait une pile, et une arithmétique de type NPI dès 1945, avant même que le concept soit formalisé[3]. Puis d'autres ordinateurs comme le English Electric KDF9 ou le Burroughs B5000 en ont appliqué le principe dès 1963[3].

Mais la NPI se développera réellement sur les calculatrices, comme moyen de saisie interactif d'expression arithmétiques. Le premier calculateur électronique utilisant cette notation est la Friden (en) EC-132 en 1964[4],[5].

C'est à la fin des années 1960, qu'elle a été diffusée dans le public comme interface utilisateur avec les calculatrices de bureau de Hewlett-Packard (HP-9100), puis avec la calculatrice scientifique HP-35 en 1972[1].

Mise en pratique

[modifier | modifier le code]

Transformation d'une expression avec parenthèses vers une expression utilisant la notation polonaise inverse

[modifier | modifier le code]

Pour transformer une expression avec parenthèses en notation polonaise inverse, on regarde quelle est l'opération prioritaire, et on place ses deux opérandes puis son opérateur de gauche à droite, et on continue jusqu'à avoir traité toutes les opérations du problème.

Prenons par exemple l'expression . Son opération prioritaire est . On commence donc notre notation polonaise inverse sous la forme . Vient ensuite l'opération multiplication, avec pour opérande et . Notre notation polonaise devient . Enfin, on peut traiter l'opération , qui a pour opérande et . La notation polonaise inverse de l'expression est donc [6].

De manière plus formelle, l'algorithme de Shunting-Yard peut être utilisé[7].

Calcul d'une expression exprimée sous la forme notation polonaise inverse

[modifier | modifier le code]

En lisant de gauche à droite, on avance jusqu'au premier opérateur rencontré. On effectue alors son opération sur les deux nombres précédant l'opération. Le résultat remplace alors les trois éléments précédents dans la notation. On continue jusqu'à obtenir un seul nombre, le résultat final.

Prenons par exemple l'expression , qui s'écrit sous la forme en notation polonaise inversée. Le premier opérateur est , les deux nombres le précédent sont et  : on obtient donc , c'est-à-dire . Dans cette nouvelle expression, le premier opérateur est , et les deux nombres le précédent sont et  : on obtient . Enfin, dans cette nouvelle expression, le premier opérateur est , et on obtient , soit [8].

En informatique

[modifier | modifier le code]

En informatique, cette notation permet de traiter les expressions mathématiques à l'aide de la pile. Voici une implémentation en pseudo-code permettant de calculer le résultat d'une expression écrite en notation polonaise inverse[9] :

int i;
int n = longueur(expression)
pile P

Pour i allant de 0 à (n-1)
{
    Si expression[i] != operateur
    P.push(expression[i])
    Sinon
    {
        a = P.pop()
        b = P.pop()
        c = operation(a, b)
        P.push(c)
    }
}
return (P.pop())

Implications pratiques

[modifier | modifier le code]
  • l’écriture est raccourcie grâce à la suppression des parenthèses, et l'ordre dans lequel les opérations sont réalisés ne dépend que de leur place dans cette notation, et non plus de leurs opérateurs[10] ;
  • un résultat intermédiaire peut être réutilisé. Par exemple dans le calcul de on voit rapidement que l'expression est utilisée deux fois. On peut la dupliquer dans la pile, ce qui donne :
    • 3 Enter π * 4 / DUP SIN SWAP / avec DUP et SWAP des opérateurs de pile pour dupliquer et intervertir.
  • les calculs intermédiaires sont gérés sous forme de pile.
  • parce qu'elle permet de voir les résultats intermédiaires, elle permet de détecter plus facilement les erreurs et donc un débogage plus rapide ; à l’époque des premiers circuits intégrés, cela en diminuait la complexité (gestion d'une pile et d'opérateurs de pile).
  • ni l'opérateur, ni les parenthèses ne servant de séparateur, il faut en fournir entre deux opérandes successifs. Une espace devrait pouvoir suffire dans la majorité des cas ; sur une calculatrice, il s'agit de la touche Enter.

Quelques utilisations réelles de la NPI

[modifier | modifier le code]
Vidéo montrant la séquence de touches pour calculer huit fois six sur une calculatrice HP-32SII

Dans le domaines de processeurs

[modifier | modifier le code]

En 1963, le processeur B5000 de Burroughs suivait la structure de la notation polonaise inversée au niveau de son architecture. Cependant, cette pratique ne s'est pas développée. Notamment dans le domaine des microprocesseurs, cette structure a été abandonnée car son utilisation avec les registres n'était pas efficace[10].

Notes et références

[modifier | modifier le code]
  1. a et b (en) What is RPN?, sur le site hpmuseum.org, consulté le 19 mai 2013
  2. (en) Biographie de C.L.Hanblin, sur le site vukutu
  3. a et b Charles Eric LaForest, « Second-Generation Stack Computer Architecture »
  4. (en) Robert King, « The Evolution of Today's Calculator. », The International Calculator Collector, no 15 & 16,‎ hiver-printemps 1997
  5. ACONIT, « 1964, naissance de la Friden EC 130, un bijou électronique », sur Echosciences Grenoble, Recherche, industrie, informatique,
  6. Xavier Olive, « 4. Structures de données avancées », InfoPro,‎ , p. 49–59 (lire en ligne, consulté le )
  7. « PhysAlgo : Animations interactives en NSI », sur www.physalgo.fr (consulté le )
  8. a et b Pascal Lafourcade, Guenaëlle De Julis et Malika More, « 2. Calculatrice polonaise ☆ », Hors collection,‎ , p. 15–16 (lire en ligne, consulté le )
  9. Frédéric Butin, « Chapitre 6. Algorithmique 2 », Références sciences,‎ , p. 217–256 (lire en ligne, consulté le )
  10. a et b Dominique Houzet, « Microprocesseurs - Architecture et performances », Technologies logicielles Architectures des systèmes,‎ (DOI 10.51257/a-v2-e3555, lire en ligne, consulté le )
  11. Joël Bertrand, « Site officiel du langage RPL/2 ®, langage de programmation fonctionnel impur dédié au calcul scientifique », (consulté le )
  12. calc, sur le site gnu.org
  13. Bibliography style (.bst) files, lire en particulier la section 16
  14. Notons que le package BibLaTeX de LaTeX propose une syntaxe plus simple que celle de bst pour modifier les styles.
  15. Page de manuel de rrdgraph
  16. (en) « WarpScript, a language designed for analytics of time-series data », sur Warp10 (consulté le )

Articles connexes

[modifier | modifier le code]

Liens externes

[modifier | modifier le code]