Hallo Leute, ich bin neu hier im Forum und wollte mal so frech sein und mich direkt mit ner kleinen Frage vorstellen.
Ich bin grad an nem Projekt für die Uni dran und ein Teil davon ist die folgende Methode.
Die Frage bezieht sich auf mein Zwischenspeicher ArrayList. Ich wollte wissen, ob es elegantere Methoden gibt um die zwei kleinsten knoten zwischen zu speichern und wenn nicht, ob es Sinn macht das Zwischenspeicher ArrayList zu schluss zu leeren, wenn ja, dann wie? Denn mein versuch
scheitert kläglich.
Währe nett, wenn mir jemand mit nem weisen Rat zur Seite stehen könnte. :rtfm:
Ich bin grad an nem Projekt für die Uni dran und ein Teil davon ist die folgende Methode.
Java:
public INode createTree(String text) {
ArrayList<INode> nodes = new ArrayList<INode>();
ArrayList<INode> nodesZS = new ArrayList<INode>(); //Zwischenspiecher für die zwei kleinsten Objekte
int asciiCode; //Variable für die Nummer des Buchstabens
int min; //Variable für das kleinste Gewicht (wie oft der buchstabe im Text vorkommt)
int pos; //Variable für die Position des kleinsten Knoten im nodes Array
int posZS=0; //Variable zum leeren des nodesZS Arrays
Node nodeZS1; //Zwischenspeicher für den Knoten mit dem geringsten Gewicht im nodes Array
int[] bstL = getFrequencies(text).clone(); //bstL == Buchstaben Liste
//die Schleife durchläuft das komplette bstL Array und speichert alle Zeichen, die mind einmal vorkommen im ArrayList nodes.
for(int i=0; i < bstL.length; i++) {
asciiCode = bstL[i];
if(asciiCode > 0) {
Node node = new Node(null, null, asciiCode, (char)(i));
nodes.add(node);
}
}
//dieser Abschnitt erstellt einen Baum, der sich nach der Anzahl der vorkommenden Buchstaben richtet.
while(nodes.size() > 1){
for(int k=0; k < 2; k++){
min = nodes.get(0).getWeight(); //Die methode getWeight() gibt wieder wie oft der Buchstabe im Text vorkommt.
pos = 0;
for(int i=1; i < nodes.size(); i++){
if(nodes.get(i).getWeight() < min) {
min = nodes.get(i).getWeight();
pos = i;
}
}
//das Objekt nodeZS1 wird mit den die Initialien des kleinstens Knotens aus dem ArrayList erstellt
nodeZS1 = new Node(nodes.get(pos).get0(), nodes.get(pos).get1(), nodes.get(pos).getWeight(), nodes.get(pos).getSymbol());
nodesZS.add(nodeZS1); //ind den Zwischenspeicher ArrayList gespeichert
nodes.remove(pos); //Aus dem ArrayList nodes entfernt
posZS +=1;
}
//hier werden die zwei kleinsten Knoten miteinander "verschmolzen" und wieder in den ArrayList nodes hinzugefügt
nodes.add(nodesZS.get(posZS-2).merge(nodesZS.get(posZS-1)));
}
return nodes.get(0);
}
Die Frage bezieht sich auf mein Zwischenspeicher ArrayList. Ich wollte wissen, ob es elegantere Methoden gibt um die zwei kleinsten knoten zwischen zu speichern und wenn nicht, ob es Sinn macht das Zwischenspeicher ArrayList zu schluss zu leeren, wenn ja, dann wie? Denn mein versuch
Java:
posZS=0;
while(nodesZS.size() > 0) {
nodesZS.remove(posZS);
posZS++;
}
scheitert kläglich.
Währe nett, wenn mir jemand mit nem weisen Rat zur Seite stehen könnte. :rtfm: