¿Cómo puedo tomar una tabla de verdad y convertirla en un bloque if compactado?
Por ejemplo, digamos que tengo esta tabla de verdad donde A y B son condiciones y x, y y z son acciones posibles:
A B | x y z
-------------
0 0 | 0 0 1
0 1 | 0 0 1
1 0 | 0 1 0
1 1 | 1 0 0
Esto podría transformarse en el siguiente bloque si:
if(A)
{
if(B)
{
do(x)
}
else
{
do(y)
}
}
else
{
do(z)
}
Esta es una muestra fácil, pero con frecuencia tengo varias condiciones que combinadas de diferentes maneras deberían producir diferentes salidas y se hace difícil encontrar la forma más compacta y elegante de representar su lógica en un bloque if.
Respuestas:
Si está diseñando desde un mapa de Karnaugh, entonces el código también puede verse así:
fuente
En C # .NET, puede usar una clase de diccionario para obtener el resultado sin IF IFSE de la siguiente manera: lo bueno de esto es:
Si no tiene un equivalente de Clase de diccionario, puede hacer lo mismo en una función de búsqueda / búsqueda binaria.
fuente
Lo que quieres es un algoritmo Rete . Esto combina automáticamente un conjunto de reglas y las prioriza en un árbol de la manera que usted describe.
Existen varios sistemas comerciales de "motor de reglas" que hacen esto a gran escala (millones de reglas) donde la velocidad de ejecución es esencial.
fuente
Aquí está su biblioteca :) Y no necesita pasar la tabla K completa, solo los campos que le interesan :) Asume que es el operador AND en la tabla de verdad. Si desea utilizar más operadores, debería poder reescribirlo. Puedes tener cualquier cantidad de argumentos. Escrito
python
y probado.fuente
Asigne las entradas en un solo valor y luego actívelo:
fuente
Una tabla de búsqueda que contiene punteros de funciones puede funcionar bien en algunas situaciones. En C, por ejemplo, puede hacer algo como esto:
Esta es una buena solución cuando el número de entradas es relativamente pequeño, ya que el número de entradas en la tabla tiene que ser 2 ^^ n donde n es el número de entradas. 7 u 8 entradas pueden ser manejables, 10 o 12 comienzan a ponerse feas. Si tiene tantas entradas, intente simplificar por otros medios (como los mapas de Karnaugh) primero.
fuente
Mire el software "Gorgeous Karnaugh": puede aceptar tablas de verdad bastante exactas como su muestra, aceptar definiciones de fórmulas booleanas analíticas, aceptar secuencias de comandos Lua para construir tablas de verdad. A continuación, el software "Gorgeous Karnaugh" dibuja los K-Maps para la entrada tomada, que puede minimizar manualmente o usando el minimizador lógico "Espresso", y produce salida para C / C ++ y algunos lenguajes de hardware. Consulte la página de características de resumen para "Gorgeous Karnaugh": http://purefractalsolutions.com/show.php?a=xgk/gkm
fuente
if
s vacíos después de ingresar a una tabla de verdad.