2010-08-04 14 views
6

Aquí hay un problema de algoritmo interesante. El problema está en cierto modo relacionado con la simulación de diseños electrónicos.Problema con el algoritmo interesante

Digamos, por ejemplo, tengo una estructura que contiene algunas puertas. decir una puerta Y de 3 entradas. Hay 8 entradas posibles es decir

000 
001 
... 
111 

Fuera de estos 8 entradas, si sólo se alimentan en dos entradas y (000)(111), consigo tanto las salidas posibles es decir 0 y 1.

Por lo tanto, el conjunto mínimo de vectores de entrada que produce los estados '0' y '1' en la salida son {000, 111}.

El problema se da un diseño, una cierta disposición de puertas, da un algoritmo para encontrar el conjunto mínimo de vectores de entrada que produce ambos estados (es decir, 0 y 1) en la salida final.

+1

por curiosidad: ¿esto está relacionado de alguna manera con VHDL? – Scoregraphic

+3

Para un circuito dado, es posible que no sea posible (es decir, x y no x) producir ambos estados de salida. –

+0

¿Las puertas siempre son AND de 3 entradas, o podrían ser cualquier tipo de puerta? – mbeckish

Respuesta

13

Tu problema es equivalente a resolver el boolean satisfiability problem. Por lo tanto, es NP-completo.

Para obtener una de las entradas, puede elegir una entrada arbitraria y ver si da 0 o 1. Para encontrar una entrada que proporcione la otra salida, necesita un solucionador SAT.

Wikipedia sugiere algún algorithms que se puede utilizar:

Si no desea ponerlo en práctica, existen herramientas que están dispuestos a utilizar SAT solucionadores:

  • CVC3 (LGPL de código abierto)
  • Yices (gratuito para uso no comercial)
+2

Bueno, si probamos el primer vector de entrada, ya hemos resuelto la mitad del problema :-) –

+0

@Louth Blissett: +1 ¡Buen punto! Será mejor que lo mencione en la respuesta. –

5

Esto se resuelve con el algoritmo de Quine McCluskey. También hay algunos JavaScripts y Herramientas que pueden resolver su problema.

+0

Cuestiones relacionadas