Какие структуры данных / алгоритмы для эффективной замены выражений DNF друг на друга? - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь работать с системой, которая имеет несколько сотен логических литералов со связями между ними в дизъюнктивной нормальной форме (например, x1 = (x2 & x3) | x4; x2 = x5 | x6; и т. Д.).Я хочу упростить систему, подставляя некоторые из них во все остальные (я уже знаю примерно те замены, которые можно отследить).Но до сих пор я столкнулся с очень плохим масштабированием своих структур данных.Я представляю выражение как Set из BitSet s, что устраняет прямые дубликаты, но я все же в конечном итоге (на вид) трачу кучу времени на создание этих наборов, потому что я хочу с готовностью удалить любые избыточные дизъюнкты - например,(x1 & x2) | (x1 & x2 & x3) это просто (x1 & x2).

Есть ли лучший способ хранить или манипулировать ими, не требуя затрат O (n ^ 2) только на их создание?

...