Resolvendo expressões lógicas em Java com iterações mínimos

disser:

Eu estou trabalhando em resolver as expressões lógicas em Java compreendendo de E , OU , e NÃO operadores.

O programa tem a saída se a entrada foi TRUEpara quaisquer valores booleanos das variáveis incluídas. Eu tenho feito isso com sucesso, mas não é o suficiente eficiente.

Minha solução atual é assim:

Faça uma tabela de verdade para cada variável na expressão e avaliar linha por linha.

(p ∧ ¬q) ∨ (r ∧ s) ∨ (¬p ∨ u)

No exemplo acima, eu vou ter que avaliar a expressão inteira com uma tabela verdade de variáveis p q r s.

Agora, eu estou pensando em implementar uma solução alternativa que diz assim: Considere o exemplo acima.

Podemos notar que, mesmo por apenas resolver a p ∧ ¬qparte, toda a expressão vem a ser TRUE. Isso nos poupa o incômodo de 3 variáveis extras.

Agora a minha pergunta é essa. Como programar isso em Java? Como eu mesmo começar a saber se a entrada tem um padrão como acima? Ou é apenas uma expressão que eu tenho que avaliar para toda a tabela de verdade? Como a abaixo

(p ∨ ¬q) ∧ (r ∨ (s ∧ (¬p ∨ u)))
Sam:

Este é um problema NP-completo bem conhecido, ver booleana satisfabilidade problema .

Isto significa que há não é conhecida solução em tempo polinomial, mas há muitas> soluções P lá fora.

Você terá que força bruta-lo e curto-circuito onde você pode. (ex: se todos os operadores são ore você encontrar um truevalor que você pode parar de computação)

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=201972&siteId=1
Recomendado
Clasificación