Próby pozwalają na efektywne przechowywanie list elementów. Prefiksy są wspólne, więc zajmuje mało miejsca.
Szukam podobnego sposobu skutecznego przechowywania drzew. Chciałbym móc sprawdzać członkostwo i dodawać elementy, wiedząc, czy dane drzewo jest poddrzewem niektórych przechowywanych drzew, czy też istnieje drzewo przechowywane, które jest poddrzewem danego drzewa.
Zazwyczaj przechowywałem około 500 niezrównoważonych drzew podwójnych o wysokości mniejszej niż 50.
EDYTOWAĆ
Moja aplikacja jest rodzajem sprawdzania modelu przy użyciu pewnego rodzaju zapamiętywania. Wyobrazić, że mają stan i z następujących wzorów: i z będący złożoną podstruktura i sobie wyobrazić, że najpierw chce wiedzieć, posiada w s . Sprawdzam, czy ϕ się utrzymuje i po długim procesie stwierdzam, że tak jest. Teraz chcę wiedzieć, czy g trzyma si . Chciałbym przypomnieć fakt, że f posiada i zauważyć, że g ⇒ f tak, że może pochodzić g w s prawie natychmiast.f = ϕ g = ( ϕ ∨ ψ ) ϕ f
I odwrotnie, jeśli udowodniłem, że nie utrzymuje wt , to chcę powiedzieć, że f nie utrzymuje wt prawie natychmiast.
Możemy budować częściowe porządki na formułach i mieć iff g ⇒ f . Dla każdego stanu s , możemy przechowywać dwa zestawy wzorów; L ( s ) przechowuje maksymalne formuły, które przechowują, a l ( s ) przechowuje minimalne formuły, które nie przechowują. Teraz biorąc pod uwagę stan si formułę g , widzę, czy ∃ f ∈ L ( s ) , f ⇒ g , czy czy ∃ f ∈ l ( s ) w którym to przypadku skończę i wiem bezpośrednio, czy g trzyma w s .
Obecnie i l są implementowane jako listy i nie jest to oczywiście optymalne, ponieważ muszę iterować wszystkie zapisane formuły osobno. Gdyby moje formuły były sekwencjami, a jeśli częściowa kolejność była „jest przedrostkiem”, wtedy trie mogłaby okazać się znacznie szybsza. Niestety moje formuły mają strukturę drzewiastą opartą na ¬ , ∧ , operatorze modalnym i twierdzeniach atomowych.
Jak wskazują @Raphael i @Jack, mógłbym sekwencjonować drzewa, ale obawiam się, że to nie rozwiąże problemu, ponieważ interesująca mnie cząstkowa kolejność nie odpowiada „przedrostkowi”.