尝试可以有效存储元素列表。前缀是共享的,因此节省了空间。
我正在寻找一种有效存储树的类似方法。我希望能够检查成员资格并添加元素,知道给定树是否为某些存储树的子树,或者是否存在存储树为给定树的子树也是可取的。
我通常会存储大约500棵高度小于50的不平衡二叉树。
编辑
我的应用程序是使用某种记忆的某种模型检查器。想象一下,我有一个状态和以下公式:和其中是一个复杂的子公式,并想象我首先想知道是否在成立。我检查成立,经过冗长的过程后,我确定是这种情况。现在,我想知道是否在成立。我想记住成立的事实,并注意到这样我几乎可以立即得出中。˚F = φ 克= (φ ∨ ψ )φ ˚F 小号φ 克小号˚F 克⇒ ˚F 克小号
相反,如果我已经证明不能满足,那么我想告诉我们不能立即满足。吨˚F 吨
我们可以在公式上建立偏序,并具有 iff。对于每个状态,我们存储两组公式;存储保存的最大公式,存储不保存的最小公式。现在给定状态和公式,我可以看到,或者在这种情况下我是完成后,我直接知道是否在成立。克⇒ ˚F 小号大号(小号)升(小号)小号克∃ ˚F ∈ 大号(小号),˚F ⇒ 克∃ ˚F ∈ 升(小号),克⇒ ˚F 克小号
目前,和被实现为列表,这显然不是最佳选择,因为我需要分别遍历所有存储的公式。如果我的公式是序列,并且如果偏序是“是...的前缀”,则特里证明可能更快。不幸的是,我的公式具有基于,模态运算符和原子命题的树状结构。升¬ ,∧
正如@Raphael和@Jack指出的那样,我可以对树进行排序,但是我担心它不能解决问题,因为我感兴趣的部分顺序不会对应于“是的前缀”。