Estoy tratando de escribir un fragmento de código que pueda reducir al mínimo la LONGITUD de una expresión booleana, por lo que el código debería reducir el número de elementos en la expresión a la mínima posible. En este momento estoy atascado y necesito ayuda = [algoritmo - minimizando las expresiones booleanas
Esta es la regla: puede haber un número arbitrario de elementos en una expresión booleana, pero solo contiene operadores AND y OR, más corchetes.
Por ejemplo, si paso en una expresión booleana: ABC + BCD + DE, la salida óptima sería BC (A + D) + DE, que guarda 2 espacios de unidad en comparación con la original porque los dos BC son combinado en uno
Mi lógica es que intentaré encontrar el elemento que aparece con más frecuencia en la expresión, y lo descompongo. Luego invoco la función de manera recursiva para hacer lo mismo con la expresión factorizada hasta que esté completamente factorizada. Sin embargo, ¿cómo puedo encontrar el elemento más común en la expresión original? Es decir, en el ejemplo anterior, BC? Parece que tendría que probar todas las combinaciones diferentes de elementos y encontrar el número de veces que aparece cada combinación en toda la expresión. Pero esto suena realmente ingenuo. Segundo
¿Alguien puede dar una pista sobre cómo hacer esto de manera eficiente? Incluso algunas palabras clave que puedo buscar en Google servirán.
Usa el mapa de Karnaugh, Luke? –
@ Li-aungYip Ya he pensado en eso, pero eso solo si estás usando lápices y papel ¿no? ¿Cómo puedo hacer un código de computadora que lo haga? – turtlesoup
Con los paréntesis, BC (A + D) + DE y ABC + BCD + DE tienen la misma longitud. Estoy trabajando en el mismo problema ahora mismo. Este [enlace] (http://babbage.cs.qc.edu/courses/Minimize/) habla un poco sobre esto en la sección Algebraic Minimization. Creo que es solo hacer pases que aplican identidades booleanas a la fórmula. – douggard