Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Minientrada

Simplificación de condiciones booleanas

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

Leave a comment  

name*

email*

website

Submit comment