2012-05-22 22 views
5

Tengo un universo de elementos organizados en n conjuntos no disjuntos. Tengo expresiones m construidas usando estos conjuntos, usando operadores union/intersection/difference. Entonces, dado un elemento, necesito evaluar estas expresiones m, para descubrir cuál de los conjuntos "derivados" contiene el elemento. No quiero calcular el conjunto "derivado" porque será muy ineficiente en tiempo y espacio. ¿Hay alguna manera de decir si un elemento se encontrará en uno de los conjuntos derivados simplemente observando su expresión? Por ej. si la expresión es C = A U B y el elemento se encuentra en el conjunto A, entonces puedo decir que estará en el conjunto C. ¿Hay alguna biblioteca C para realizar cálculos de esta naturaleza?Evaluar expresiones de conjuntos

Respuesta

4

si no im error, Sea E = el elemento

reemplazar cada conjunto A, B con cierto si e está en el conjunto, falso si no lo es. Luego, convierta los operadores establecidos a sus equivalentes lógicos y evalúe la expresión como booleana. Todo debería corresponder bien a operadores booleanos, incluso xor y demás.

por ejemplo, no si E es tanto en AB, pero d

C = (A U B) xor D 

sería en C porque

C = (true or true) xor false 
->  (true)  xor false 
-> true 

Eso podría ser muy rápido si se puede encontrar rápidamente si un elemento está en un conjunto

+0

heh, estoy recordando esto ahora. 'A - B' es verdadero si y solo si A es verdadero y B es falso. – goat

+0

¡Es una solución excelente, gracias! Ya tengo un mapa de los elementos y los conjuntos a los que pertenecen, por lo que el cálculo debe ser rápido. – Oceanic