Dada una expresión booleana que contenga los símbolos {true, false y, o, xor}, cuente el número de maneras de poner en paréntesis la expresión de modo que se evalúe como verdadera.recuento boolean parenthesizations implementación
Por ejemplo, solo hay 1 forma de paréntesis 'verdadero y falso xo verdadero' de tal manera que se evalúa como verdadero.
Aquí está mi algoritmo
we can calculate the total number of parenthesization of a string
Definition:
N - the total number of
True - the number of parenthesizations that evaluates to true
False - the number of parenthesizations that evaluates to false
True + False = N
Left_True - the number of parenthesization in the left part that evaluates to True
same to Left_False, Right_True, Right_False
we iterate the input string from left to right and deal with each operator as follows:
if it is "and", the number of parenthesization leads to true is
Left_True * Right_True;
if it is "xor", the number of parenthesization leads to true
Left_True * Right_False + Left_False * Right_True
if it is 'or', the number is
N - Left_False * Right_False
Here is my psuedocode
n = number of operator within the String
int[n][n] M; // save number of ways evaluate to true
for l = 2 to n
for i = 1 to n-l+1
do j = i+l-1
// here we have different string varying from 2 to n starting from i and ending at j
for k = i to j-1
// (i,k-1) is left part
// (k+1, j) is right part
switch(k){
case 'and': // calculate, update array m
case 'or': // same
case 'xor':
}
we save all the solutions to subproblems and read them when we meet them again. thus save time.
podemos tener una mejor solución?
¿Qué quiere decir con "¿Podemos tener una mejor solución"? Suponiendo que está pidiendo uno: defina "mejor". ¿Está buscando una solución más rápida, una que use menos código, menos uso de memoria ... Además, es posible que desee aclarar su pseudocódigo un poco más, por una vez me cuesta mucho averiguar cómo se supone que funciona exactamente (podría funcionar). ayuda si escribe lo que está ocurriendo dentro del interruptor – Grizzly
Estoy buscando una solución más rápida y menos implementación de código. Por ejemplo, es tedioso calcular la forma de paréntesis, los paréntesis conducen a verdadero y falso – SecureFish
Estoy confundido - '(verdadero y falso) xor true' y 'true and (false xor true)' ambos se evalúan como verdaderos. –