Je sais comment chacun d'eux peut être converti, mais je n'ai jamais vraiment compris quelles sont leurs applications. L'opération d'infixe habituelle est assez lisible, mais où échoue-t-elle, ce qui a conduit à la création de la notation préfixe et postfixe
La notation infixe est facile à lire pour humains, tandis que la notation pré-/postfixe est plus facile à analyser pour une machine. Le gros avantage de la notation pré-/postfixe est qu'il ne se pose jamais de questions comme la priorité des opérateurs.
Par exemple, considérons l'expression infixe 1 # 2 $ 3
. Maintenant, nous ne savons pas ce que ces opérateurs signifient, il y a donc deux expressions de suffixe correspondantes possibles: 1 2 # 3 $
et 1 2 3 $ #
. Sans connaître les règles régissant l'utilisation de ces opérateurs, l'expression infixe est essentiellement sans valeur.
Ou, pour le dire en termes plus généraux: il est possible de restaurer l'arbre d'origine (analyse) à partir d'une expression pré/postfix sans aucune connaissance supplémentaire, mais il n'en va pas de même pour les expressions infixes.
La notation Postfix, également connue sous le nom de RPN , est très facile à traiter de gauche à droite. Un opérande est poussé sur une pile; un opérateur extrait son ou ses opérandes de la pile et envoie le résultat. Peu ou pas d'analyse est nécessaire. Il est utilisé par Forth et par certaines calculatrices (les calculatrices HP sont réputées pour utiliser RPN).
La notation des préfixes est presque aussi facile à traiter; il est utilisé dans LISP.
Au moins pour le cas de la notation de préfixe: L'avantage d'utiliser un opérateur de préfixe est que syntaxiquement, il se lit comme si l'opérateur était un appel de fonction
Un autre aspect du préfixe/postfix par rapport à l'infixe est que l'arité de l'opérateur (le nombre d'arguments auxquels il est appliqué) ne doit plus être limitée à exactement 2. Elle peut être plus, ou parfois moins (0 ou 1 lorsque les valeurs par défaut sont implicite naturellement, comme zéro pour l'addition/soustraction, un pour la multiplication/division).
En cas d'expression infixe, le temps requis pour l'évaluation est O (n ^ 2) La raison est la priorité des opérateurs. Ex: a + b * c En cela, nous n'évaluerons pas directement a + b D'abord, nous parcourons l'expression entière et trouvons l'opérateur ayant la priorité la plus élevée. Dans notre cas, il s'agit de *, donc nous évaluons d'abord b * c et nous suivons donc à nouveau la même procédure, jusqu'à ce que nous terminions l'évaluation de l'expression
Mais ce n'est pas le cas en cas d'expression postfixée ou infixée. le temps requis pour l'évaluation de l'expression du suffixe est O (n)
Conversion d'infixe en suffixe ==== O(n) Évaluation Postfix ==== O (n)
Temps total = O(n) + O (n) = O (n)
En cas d'évaluation postfix, nous n'aurons pas besoin de penser à la priorité des opérateurs. Il suffit d'évaluer de gauche à écrire
De même, en cas d'expression de préfixe, nous devons évaluer de droite à gauche