Simplificación de condiciones booleanas

Pubicado enEnviar un comentarioCategoríasUncategorized

Hola a todos y bienvenidos a la sección de programación.

En mi primer artículo de esta nueva sección quisera empezar por algo básico. Algo tan básico que normalmente nos olvidamos que también puede ser simplificado o depurado, tanto por rendimiento como por legibilidad del código. Hablo de las condiciones booleanas.

Creo que todo el mundo se ha encontrado más de una vez con un if complejo, o cuando menos dificil de leer… de esos que tenemos que poner en varias líneas o dividirlo en varios if’s anidados para que se entiendan mejor.

Imaginaos la siguiente condición:

X, Y y Z serán condiciones, como por ejemplo edad > 18 o localidad_nacimiento = «Pamplona» o lo que vosotros queráis…

if(((X AND Y) OR (X AND Z)) AND (X OR NOT X AND Y))

Pues aplicando ciertas leyes de simplifiación que veremos a continuación podríamos dejar esta condición en…

if(X OR (Y AND Z) AND (X OR Y))

…que ejecutaría menos compraciones (7 contra 4 de la segunda opción) y seguramente sea más fácil de leer.

Para realizar esta simplificación se emplean los Teoremas de Boole, que expondré a continuación.

1. Regla del cero y la unidad

 x OR 0 = x
 x OR 1 = 1
 x OR 1 = 1
 x OR 1 = x


2. Idempotencia

 x OR  x = x
 x AND x = x


3. Complementación

 x OR NOT  x = 1
 x AND NOT x = 0


4. Involución

 NOT (NOT x) = x


5. Conmutatividad

x OR  y = y OR  x
x AND y = y AND x


6. Asociatividad

 x OR (y OR z)   = (x OR y) OR z
 x AND (y AND z) = (x AND y) AND z


7. Distributividad

 x OR (y AND z)   =  (x OR y) AND (x OR z)
 x AND (y OR z)   =  (x AND y) OR (x AND z)


8. Leyes de absorción

 x AND (x OR y)          = z
 x AND (NOT x OR y)      = x OR y
 NOT x AND (x OR y)      = NOT x AND y
 (x AND y) OR (x AND y)  = x
 x OR x AND y            = x
 x OR NOT x AND y        = x OR y
 NOT x OR x AND y        = NOT x OR y
 x AND y OR x AND NOT y  = y


9. Teorema de Morgan

 NOT x AND NOT y = NOT x OR NOT y
 x AND y         = NOT ( NOT x OR  NOT y)
 NOT x OR NOT y  = x AND y
 x OR y          = NOT (NOT x AND NOT y) 


10. Teoremas generalizados de Morgan

NOT (x AND y OR z AND m)   = (NOT x AND NOT y) AND (NOT z OR NOT m)
NOT((x OR y) AND (z OR m)) = NOT x AND NOT y AND NOT z OR NOT m


Si bien la mayoría de estas leyes son bastante simples y su entorno de aplicación es también tan sencillo que no merece la pena, podemos encontrarles bastante utilidad a los puntos 8, 9 y 10, es decir, las Leyes de absorción y Morgan, son muy prácticas a la hora de simplificar términos o de hacerlos más legibles.

Al menos yo los he usado en más de una ocasión en que necesitaba crear funciones ultrarrápidas.

Espero que os sirvan

Un saludo.

Fuente: Elaboración propia

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *