2012-05-22 12 views
5

Mam wszechświat elementów zorganizowanych w n nierozłącznych zestawów. Mam m wyrażeń zbudowanych przy użyciu tych zestawów, używając operatorów union/intersection/difference. Tak więc biorąc pod uwagę element, muszę ocenić te wyrażenia m, aby dowiedzieć się, który z "wyprowadzonych" zestawów zawiera ten element. Nie chcę obliczać zestawu "pochodnego", ponieważ będzie to czas i przestrzeń nieefektywna. Czy istnieje sposób, aby powiedzieć, czy element będzie leżeć w jednym z zestawów pochodnych tylko patrząc na jego wyrażenie? Dla np. jeśli wyrażenie to C = A U B, a element leży w zbiorze A, to mogę powiedzieć, że znajdzie się on w zbiorze C. Czy są jakieś biblioteki C do wykonywania obliczeń tego rodzaju?Ocena wyrażeń zestawu

Odpowiedz

4

jeśli im nie myli, Niech E = element

zastąpić każdy zestaw A, B z prawdą, jeśli e jest w zestawie, jeśli nie jest fałszywy. Następnie przekonwertuj operatory zestawu na ich logiczne odpowiedniki i oceń wyrażenie jako boolean. Powinien dobrze mapować do operatorów boolowskich, nawet xor i innych.

na przykład, jeśli nie e jest zarówno AB, ale D

C = (A U B) xor D 

byłoby w C bo

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

To może być dość szybko, jeśli można szybko znaleźć jeśli element jest w zestawie

+0

heh, teraz pamiętam te rzeczy. "A - B" jest prawdziwe wtedy i tylko wtedy, gdy A jest prawdziwe, a B jest fałszywe. – goat

+0

To całkiem niezłe rozwiązanie, dzięki! Mam już mapę elementów i zestawów, do których należą, więc obliczenia powinny być szybkie. – Oceanic