평가판을 사용하면 요소 목록을 효율적으로 저장할 수 있습니다. 접두사는 공유되므로 공간 효율적입니다.
나무를 효율적으로 저장하는 비슷한 방법을 찾고 있습니다. 주어진 트리가 저장된 트리의 하위 트리인지 또는 주어진 트리의 하위 트리 인 저장된 트리가 존재하는지 알고, 멤버쉽을 확인하고 요소를 추가 할 수 있기를 원합니다.
일반적으로 높이가 50 미만인 불균형 이진 트리 약 500 개를 저장합니다.
편집하다
내 응용 프로그램은 일종의 메모를 사용하는 일종의 모델 검사기입니다. 나는 상태가 상상 다음과 같은 공식 : F = φ 와 g = ( φ ∨ ψ ) 와 φ는 복잡한 subformula되고, 그리고 내가 먼저 알고 싶은 상상 f는 보유 의 . 나는 ϕ이 붙었 는지 확인 하고 오랜 과정을 거친 후에 그것이 사실임을 알게됩니다. 이제 g 가 s 에 있는지 알고 싶습니다 . 나는 f가 가지고 있다는 사실을 기억하고 g ⇒ f그래서 나는 도출 할 수있는 에서 의 거의 즉시.
반대로, 만약 g 가 t 에 붙지 않는다는 것을 증명했다면 , f 가 t를 거의 즉시 붙잡고 있지 않다고 말하고 싶습니다 .
우리는 공식에 부분 순서를 만들 수 있으며 iff g ⇒ f 입니다. 각 상태가 이야 , 우리는 공식의 두 세트를 저장; L ( s ) 은 보유하는 최대 공식을 저장하고 l ( s ) 는 보유하지 않은 최소 공식을 저장합니다. 현재의 상태가 주어지는 S 및 화학식 g는 , I가 보이면 ∃ F ∈ L ( S ) , F ⇒ g 경우 또는 ∃ F ∈ L ( S ) 이 경우에 나는 g 가 s에 들어 있는지 직접 알 수 있습니다.
현재 과 l 은 목록으로 구현되며 저장된 모든 수식을 개별적으로 반복해야하기 때문에 분명히 최적이 아닙니다. 내 수식이 시퀀스이고 부분 순서가 "접두사"인 경우 trie가 훨씬 빠릅니다. 불행히도 내 수식에는 ¬ , ∧ , 모달 연산자 및 원자 명제를 기반으로 한 구조와 같은 트리가 있습니다 .
@Raphael과 @Jack이 지적했듯이 트리를 순차적으로 만들 수는 있지만 관심있는 부분 순서가 "접두사입니다"에 해당하지 않기 때문에 문제가 해결되지 않을까 걱정됩니다.