Resolver expresiones lógicas en Java con iteraciones mínimos

dirán:

Estoy trabajando en la solución de las expresiones lógicas en Java que comprende de Y , O y NO operadores.

El programa tiene a la salida si la entrada era TRUEpara cualquier valor de Boole de las variables incluidas. Lo he hecho con éxito, pero no es lo suficientemente eficiente.

Mi solución actual es como sigue:

Hacer una tabla de verdad para cada variable en la expresión y evaluar fila por fila.

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

En el ejemplo anterior, voy a tener que evaluar la expresión completa con una tabla de verdad de las variables p q r s.

Ahora, estoy pensando en implementar una solución alternativa que dice así: Considere el ejemplo anterior.

Podemos notar que incluso con sólo la solución de la p ∧ ¬qparte, la totalidad de la expresión viene a ser TRUE. Esto nos ahorra la molestia de 3 variables adicionales.

Ahora mi pregunta es esta. Cómo programar esta en JAVA? ¿Cómo puedo incluso llegar a saber si la entrada tiene un patrón como el anterior? O es sólo una expresión que tengo que evaluar para toda la tabla de verdad? Como la siguiente

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

Este es un conocido problema NP-completo, consulte booleana satisfacibilidad problema .

Esto significa que no se conoce solución tiempo polinómico, pero hay muchas soluciones> P que hay.

Tendrá que la fuerza bruta y corto circuito donde se puede. (Por ejemplo: si todos los operadores ory encontrar un truevalor que puede dejar de cómputo)

Supongo que te gusta

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