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

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

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

0 ответов

Другие вопросы по тегам