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
5
A
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
heh, teraz pamiętam te rzeczy. "A - B" jest prawdziwe wtedy i tylko wtedy, gdy A jest prawdziwe, a B jest fałszywe. – goat
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