Спроби дозволяють ефективно зберігати списки елементів. Префікси поділяються, щоб він був просторовим.
Я шукаю подібний спосіб ефективного зберігання дерев. Я хотів би мати можливість перевірити на приналежність і додати елементи, знаючи, чи дане дерево є піддеревнем деяких дерев, що зберігаються, або, якщо існує збережене дерево, є також піддеревом даного дерева.
Зазвичай я б зберігав близько 500 незбалансованих бінарних дерев висотою менше 50.
EDIT
Моя програма - це якась перевірка моделі, яка використовує якусь пам ятку. Уявіть, що у мене є стан та такі формули: f = ϕ і g = ( ϕ ∨ ψ ), причому ϕ є складною підформулою, і уявіть, що я спершу хочу знати, чи f тримається в s . Я перевіряю, чи має місце ϕ, і після тривалого процесу я виявляю, що це так. Тепер я хочу знати, чи g тримається в s . Мені хотілося б пам’ятати той факт, що f тримається, і помітити, що g ⇒ fтак що я можу вивести в і майже враз.
І навпаки, якщо я довів, що g не втримується в t , то я хочу сказати, що f майже не втримується в t .
Ми можемо побудувати частковий порядок на формулах і мати iff g ⇒ f . Для кожного стану s ми зберігаємо два набори формул; L ( s ) зберігає максимальні формули, що містять, а l ( s ) зберігає мінімальні формули, які не містять. Тепер, задавши стан s та формулу g , я бачу, чи ∃ f ∈ L ( s ) , f ⇒ g , чи ∃ f ∈ l ( s ) в такому випадку я закінчую, і я знаю безпосередньо, чи g тримається в s .
Наразі і l реалізуються як списки, і це явно не є оптимальним, оскільки мені потрібно повторити всі збережені формули окремо. Якби мої формули були послідовностями, і якщо частковий порядок був "префіксом", то трие може виявитись набагато швидше. На жаль, мої формули мають деревоподібну структуру на основі ¬ , ∧ , модального оператора та атомних пропозицій.
Як зазначають @Raphael та @Jack, я міг би послідовно ставити дерева, але я побоююся, що це не вирішить проблему, оскільки частковий порядок, який мене цікавить, не відповідав би "префіксу".