Pregunta
¿Cómo puedes expresar que X de Y son verdaderas, en lógica booleana? una regla como 2 de las siguientes debe ser verdadera (A, B, C, D, E, F)
¿Es una forma de multiplicación u operaciones de configuración?
el resultado final es todas las permutaciones como AB O AC O AD, si dijiste 3 de los siguientes, es como ABC, ABD, ABE, etc., entonces es como (A, B, C) ^ 2?
¡gracias!
Solución
En lógica booleana ( v es OR, ' después del predicado NO):
A B C'D'E'F' v
A B'C'D'E'F v
A'B C'D'E'F' v
: : : : : :
<absolute bucketload of boolean expressions>
: : : : : :
A'B'C'D'E F
Con las permutaciones, hay muchas subexpresiones que necesitas escribir.
Por supuesto, si esta es una pregunta de programación, puede convertir los booleanos a 0 o 1, agregarlos todos y asegurarse de que el resultado sea 2.
Otros consejos
Suponiendo C # o algún otro lenguaje donde bool! = int:
bool nOf(int n, bool[] bs)
{
foreach(bool b in bs)
{
if((n -= b ? 1 : 0) <= 0) break;
}
return n == 0;
}
Python:
expressions = [A, B, C, D, E, F, G ]
numTrue = len(filter(None, expressions)
PHP:
$expressions = array(A, B, C, D, E, F, G);
$numTrue = count(array_filter($expressions));
Tienes la idea allí. Para expresar & Quot; k de n contiene & Quot; vas a necesitar enumerar todos los casos para los cuales se cumple k. Entonces, si tenemos variables A B C D E, y desea 3 de 5, necesitará
(A & B & C & ~D & ~E) |
(A & B & ~C & D & ~E) |
(A & B & ~C & ~D & E) | ...
(~A & ~B & C & D & E)
donde & amp; es " y " ;, | es " o " y ~ es " no " ;.
Suponiendo " A o más "
puedes mejorar un poco construyendo un árbol
2 : a&(b|c|d|e|f) | b&(c|d|e|f) | c&(d|e|f) | d&(e|f) | e*f
3 : a&(b&(c|d|e|f) | c&(d|e|f) | d&(e|f) | e*f) | b&(c&(d|e|f) | d&(e|f) | e*f) | c&(d&(e|f) | e*f) | d&e&f
o como código
bool AofB(int n, bool[] bs)
{
if(bs.length == 0) return false;
if(n == 0) return true;
foreach(int i, bool b; b[0..$-n])
if(b && AofB(n-1,b[i+1..$]) return true;
return false;
}
mejor aún
bool AofB(int n, bool[] bs)
{
foreach(bool b; bs) if(b && --n == 0) return true;
return false;
}
Los contaría. Sin embargo, si debe producir un predicado utilizando operaciones booleanas solo entonces podría tratar las entradas como bits en un sistema de sumadores.
Basic Half-Adder
A, B : 1st 2nd bits
O, C : unit output and carry to next unit
O := A xor B;
C := A and B;
Puede encontrar más ejemplos y enlaces en [Wikipedia] [ http://en.wikipedia.org / wiki / Half_adder (Half-Adder)]
Luego puede agrupar las seis variables en 3 pares, luego descubrir cómo usar esas salidas para acercarse a la respuesta y resolver el resto usted mismo.
Otra opción sería usar un circuito para encontrar el recuento de pop (agregar de lado) y verificar si el único bit coincide con 2. Un ejemplo famoso en el ensamblaje de puertas no lógicas es [Hakmem 169] [ http: // home.pipeline.com/~hbaker1/hakmem/hacks.html#item169 (popcount)].
Hace una diferencia si quieres decir " exactamente dos deben ser verdaderas " versus " al menos dos deben ser verdaderas " ;.
Para el conjunto de variables {A..F}, las respuestas de Pax y Charlie Martin cubrieron el & "; exactamente dos &"; situación (dos son verdaderas y el resto son falsas), mientras que la expresión en su pregunta parecía tratar con el & "; al menos dos &"; caso:
(A && B) || (A && C) || ... || (D && E) || (D && F) || (E && F)
es una expresión que es verdadera cuando, por ejemplo, A y B son verdaderas y las variables restantes son cualquier cosa (verdadero o falso).
Si lo que está pidiendo es una expresión similar a la teoría de conjuntos para describir la (s) situación (es) anterior (s), puede expresarla de esta manera:
#{x | x <- {A, B, C, D, E, F} | x} = 2
donde la notación funciona de esta manera:
#{...}
representa el tamaño del conjunto adjunto y el conjunto en sí:
{x | x <- {A, B, C, D, E, F} | x}
lee " el conjunto de x
, donde A
es uno de F
a <=
, y <=> es verdadero " ;. En otras palabras, dado el conjunto de variables <=> a <=>, el subconjunto formado por las variables con valores verdaderos tiene exactamente dos elementos. (Use <=> en lugar de '=' para expresar la otra interpretación de su pregunta).