Ich habe erfolgreich ein Java-Programm implementiert, das zwei gemeinsame Datenstrukturen verwendet: a Tree
und Stack
zusammen mit einer Schnittstelle, die es einem Benutzer ermöglicht, in einem Baum Node-ID einzugeben und Informationen darüber in Bezug zu erhalten zu seinem Elternteil. Sie können hier auf die neueste Version des Programms schauen at my GitHub src for this programVergleichen von strukturierten Daten in Java
Hintergrund
Diese Ad-hoc-Programm, das ich schrieb verwendet wird, um die Entwicklung der Genfluss über Hunderte von Organismen zu untersuchen, indem Daten in einer Datei zu vergleichen, die aus von: FeatureIDs = String
Grundelemente (weiter unten sind diese in der ersten Spalte als "ATM-0000011"
, "ATM-0000012"
usw. aufgeführt) und besteht aus den Bewertungen, die mit ihrer Anwesenheit oder Abwesenheit an einem bestimmten Knoten im Baum verknüpft sind, und diese sind double
Primitive. Hier
ist, was die Datendatei wie folgt aussieht:
"FeatureID","112","115","120","119","124",...//this line has all tree node IDs
"ATM-0000011",2.213e-03,1.249e-03,7.8e-04,9.32e-04,1.472e-03,... //scores on these lines
"ATM-0000012",2.213e-03,1.249e-03,7.8e-04,9.32e-04,1.472e-03,...//correspond to node ID
"ATM-0000013",0.94,1.249e-03,7.8e-04,9.32e-04,1.472e-03,...//order in the first line
... //~30000 lines later
"ATM-0036186",0.94,0.96,0.97,0.95,0.95,...
Das Problem
Bisher war es gut genug, um nur eine 2D-Array von Doppel zu machen aus der Datendatei (das Array Die erste Zeile in der Datei und die FeatureIDs wurden ausgeschlossen, da es sich um Strings handelt. Verwenden Sie das 2D-Array, um dann double
Stacks zu erstellen. Die Stapel würden für Eltern- und Kindknoten erstellt, wie durch Benutzereingabe und Tree
bestimmt.
Die Daten im Eltern- und Kindstapel würden dann zur gleichen Zeit gelöscht werden (wodurch sichergestellt wird, dass dieselben FeatureIDs verglichen werden, ohne diese Daten tatsächlich in den DS aufnehmen zu müssen) und ihre Werte basierend darauf verglichen werden Sie erfüllten eine definierte Bedingung (dh wenn beide Werte> = 0,75 waren). Wenn sie das taten, würde ein Zähler inkrementiert werden. Sobald die Vergleiche beendet waren (die Stapel waren leer), gab das Programm die Anzahl (n) zurück.
Jetzt was ich tun möchte, anstatt nur zu zählen, ist eine Liste (n) zu machen, deren FeatureIDs die Vergleichskriterien erfüllen. Anstatt also den Zähler zurückzugeben, der sagt, dass 4100 FeatureIDs zwischen Knoten A und Knoten B die Kriterien erfüllten, möchte ich eine Liste aller 4100 FeatureID Strings
, die die Kriterien erfüllt, die zwischen Knoten A und Knoten B verglichen werden. Ich werde Speichern Sie diese Liste später als Datei, aber das ist hier nicht wichtig. Dies bedeutet, dass ich wahrscheinlich das double
2D-Array/double
Stack-Schema aufgeben muss, das vorher so gut funktioniert hat.
Die Frage
Zu wissen, was das Problem ist, gibt es eine clevere Lösung, um dieses Problem, wo ich eine Änderung der Eingabedatendatei machen könnte, oder irgendwo in meinem Code (tlacMain.java), ohne Hinzufügen von viel mehr Daten in den Prozess? Ich brauche nur Ideen.
Wo zählen Sie die Feature-IDs, warum fügen Sie sie nicht zu einer List-Struktur wie einer ArrayList hinzu? –
(Dies gilt auch für @felixbr) das Problem mit diesem Ansatz ist, dass die Methoden für Vergleiche verwendet in einem übergeordneten und untergeordneten Stack des Typs, die nicht die FeatureID Informationen enthält. Siehe Implementierung in meinem Code auf Github https://github.com/asobin/sobin/blob/master/PhyloTLaC/src/tlacMain.java#L253 –