O que é polonês reverso?

1. O que é polimento reverso?

A notação polonesa reversa, também conhecida como notação polonesa reversa (RPN), é um método usado em matemática e ciência da computação para representar expressões aritméticas. Sua característica é que o operador fica atrás do operando, não havendo necessidade de parênteses para alterar a prioridade da operação.

Por exemplo, a expressão aritmética que normalmente escrevemos é “2 + 3”. Na notação polonesa reversa, esta expressão seria escrita "2 3 +".

Uma grande vantagem da notação polonesa reversa é que ela elimina parênteses nas expressões e torna mais explícita a ordem em que as operações são executadas. Na ciência da computação, a notação polonesa reversa permite uma avaliação mais simples e eficiente das expressões. Por exemplo, expressões polonesas reversas podem ser facilmente avaliadas usando a estrutura de dados da pilha.

A notação polonesa reversa recebeu o nome do lógico polonês Jan Łukasiewicz. Enquanto sua "notação polonesa" original coloca o operador antes do operando (como "+ 2 3"), a "notação polonesa reversa" coloca o operador após o operando, o que facilita o uso prático, especialmente na ciência da computação.

Vejamos alguns exemplos de notação polonesa reversa (RPN). Aqui estão algumas expressões aritméticas comuns e suas representações polonesas reversas correspondentes:

Expressão regular: (7 - 4) * 2, representação RPN correspondente: 7 4 - 2 *

Explicação: Subtraia 4 de 7 e multiplique o resultado por 2.

Expressão regular: 5 + ((1 + 2) * 4) - 3, representação RPN correspondente: 5 1 2 + 4 * + 3 -

Explicação: Primeiro faça 1+2, depois multiplique o resultado por 4, depois some a 5 e, finalmente, subtraia 3 dele.

Expressão regular: (3 + 4) * (5 * 6), representação RPN correspondente: 3 4 + 5 6 * *

Explicação: Primeiro execute 3+4 e execute simultaneamente 5*6 e depois multiplique os dois resultados.

2. Calcule de acordo com a fórmula polonesa reversa

Este é um exemplo simples de calculadora Reverse Polish (RPN) implementada em Java. Esta calculadora pode lidar com expressões RPN que consistem em quatro operações aritméticas básicas.

import java.util.Stack;
 
public class RPNCalculator {
    
    
    public static int evalRPN(String[] tokens) {
    
    
        Stack<Integer> stack = new Stack<>();
 
        for (String token : tokens) {
    
    
            switch (token) {
    
    
                case "+":   //但是符号时,就进行运算
                    stack.push(stack.pop() + stack.pop());    //取出当前栈里面的2个元素,进行运算后,再push进去
                    break;
 
                case "-":
                    stack.push(-stack.pop() + stack.pop());
                    break;
 
                case "*":
                    stack.push(stack.pop() * stack.pop());
                    break;
 
                case "/":
                    int n1 = stack.pop(), n2 = stack.pop();
                    stack.push(n2 / n1);
                    break;
 
                default: // 如果是普通字符,则直接入栈
                    stack.push(Integer.parseInt(token));
            }
        }
 
        return stack.pop();
    }
 
    public static void main(String[] args) {
    
    
        String[] rpnExpression = {
    
    "2", "1", "+", "3", "*"};
        System.out.println(evalRPN(rpnExpression));
    }
}

Neste exemplo, a função evalRPN aceita uma matriz de strings, cada uma representando um elemento (um número ou um operador) na expressão RPN. Em seguida, ele usa uma pilha para armazenar e manipular números.

Para cada elemento, verifica se se trata de um operador ("+", "-", "*" ou "/"). Nesse caso, ele retira dois elementos da pilha, executa a operação apropriada e, em seguida, coloca o resultado de volta na pilha. Se o elemento for um número, ele o coloca na pilha.

Após todos os elementos terem sido processados, o elemento no topo da pilha é o resultado da expressão.

Na função principal, criamos uma matriz de strings de expressão polonesa reversa {"2", "1", "+", "3", "*"}, que é equivalente à expressão regular (2+1 )*3 , então chamamos a função evalRPN para calculá-lo. O resultado do cálculo será impresso.

Tome 3+4 como exemplo para analisar, a forma polonesa correspondente é 3 4 +:
1) De acordo com a forma polonesa, empurre para dentro da pilha
insira a descrição da imagem aqui
2) Após pressionar, retire os elementos da pilha de cima para baixo, geralmente o a camada superior deve ser um Operador
Quando o símbolo de operação é retirado da pilha, os 2 elementos a seguir serão retirados, operados e colocados na pilha.
Depois que o sinal + for retirado, 4 será retirado e então 3 é retirado e a operação é executada para obter 7 e então colocada na pilha

O estado da pilha neste momento:
insira a descrição da imagem aqui
3) Continue a empurrar os formulários poloneses subsequentes para a pilha, pressionando os números 5, 6 e * em sequência
insira a descrição da imagem aqui
4)
Continue a empurrar os formulários poloneses subsequentes para a pilha, pressionando 5, 6, e * números em sequência

Quando a camada superior da pilha é um símbolo, as operações precisam ser executadas novamente. Retire os 2 elementos a seguir e execute as operações.

5*6=30, coloque 30 na pilha

O estado da pilha neste momento:
insira a descrição da imagem aqui
5) Continue a enviar o conteúdo em polonês, que é o último sinal *

insira a descrição da imagem aqui
30*7 + 210

3. Como converter expressões comuns para a forma polonesa reversa

Como (3 + 4) * (5 * 6) se transforma em 3 4 + 5 6 * *?

Sabemos que A + B precisa ser classificado em: AB + Então o mesmo vale para fórmulas complexas, podemos considerar A como uma expressão (3+4), que é fácil de entender.

Em seguida, a ordem de processamento (3 + 4) * (5 * 6):
1) Converta primeiro o módulo grande (3 + 4) (5 * 6) *
1) Substitua 3 + 4 na etapa 1 por 3 4 +
2) Substitua 5 * 6 na etapa 1 por 5 6 *
3) Obtenha o 3 4 + 5 6 *** final

Nota :上面的是代数思想,不是计算机的处理方式,如过想写个程序进行计算,那么需要从左至右进行处理,基本原理和RPNCalculator 类似,只不过是反着写

referência

O que é polonês reverso?

Acho que você gosta

Origin blog.csdn.net/m0_45406092/article/details/131705613
Recomendado
Clasificación