Ich habe eine Menge von Elementen (potentiell groß) mit einer Ordnungsrelation:
%Vor%und eine Menge häufiger Muster (möglicherweise groß) mit IDs:
%Vor%Ich habe eine Folge von geordneten Mengen:
%Vor%Ich möchte jeden Satz in der Sequenz mit den IDs der entsprechenden Muster vergleichen:
%Vor%Mein Ziel ist es, die Anzahl der Durchläufe über die Sequenz zu begrenzen, damit ich eine Datenstruktur erstellen kann, die ich während des Scans verwenden kann. Ich denke an einen Präfix-Baum:
%Vor%Ich scanne eine Menge in der Sequenz und gebe sie mehrmals durch die Baumstruktur rekursiv (set, set.tail, set.tail.tail ...), jedes Mal wenn ich einen Knoten I erreiche füge die entsprechenden IDs zu einem Array hinzu.
Vermisse ich irgendeinen besonderen Fall in meiner Argumentation (mir ist gerade klar geworden, dass ich mehrere Ids für Knoten von depth>2
setzen muss, wenn ich [a, c] nicht verpassen möchte, wenn [a, b, c] in existiert) der Satz) ?
Gibt es eine ausgeklügeltere Datenstruktur, mit der ich die Verarbeitungszeit verbessern kann?
Edit: Tatsächlich brauche ich in der Tiefe n 2^(n-2)
ids mit meiner Methode (wenn man bedenkt, dass mein Baum dicht ist). Ich bin mir nicht sicher, ob es ein guter Weg ist, es zu tun ...
Edit2: ein weiterer Ansatz, der Bitmaps jedes einzelnen Elements in der Sequenz zusammenführt, um jedes Muster zu erstellen (wie im Algorithmus SPADE verwendet).
%Vor%mit einigen Array-Manipulationen sollte ich in der Lage sein, dies mit den Elementen meines ursprünglichen Arrays zu vergleichen.
Wenn Sie einen Präfixbaum (alias Trie) erstellen, sind alle Knoten eindeutig. Daher sieht die Präfixstruktur für den Satz {a,b,c}
in alphabetischer Reihenfolge mit Kontinuität wie folgt aus:
Und es wird dem Präfix set { a, b, c, ab, bc, abc }
zugeordnet.
Die Baumraumkomplexität ist SUM k for k = 1..N ~ O(N^2)
.
Node.java
%Vor%MyTree.java
%Vor%Tags und Links algorithm