Ich schreibe einen Code, der ein DFS einer Rasterkarte macht. Eine Funktion, die ich eine Menge nennen, ist die getNeighbors (...), die alle Nachbarn einer bestimmten Zelle bekommt:Vermeiden Sie Speicherzuordnungen, während Sie Nachbarn in einem DFS/BFS-Algorithmus erhalten?
public ArrayList<Point> getNeighbors(int i, int j) {
ArrayList<Point> result = new ArrayList<>();
for (Point n : upDownLeftRightDirections) {
int dx = i + n.x;
int dy = j + n.y;
result.add(new Point(dx, dy));
}
return result;
}
... Later in the code ...
for (Point neighbor : getNeighbors(i, j)) {
... Do stuff ...
}
Meine Frage ist, dass ich das Gefühl, dieser Prozess verschwenderisch scheint eine neue Liste von Nachbarn zu erstellen alle Zeit wird eine Zelle verarbeitet, zumal die Liste der Nachbarn nur einmal verwendet wird. Irgendwelche Vorschläge zum Umschreiben, um zu vermeiden, dass jedes Mal eine neue Liste erstellt wird - hauptsächlich, um die Tatsache auszunutzen, dass ich nur einmal pro Aufruf über die Nachbarn iterieren muss?
Der Leistungsunterschied ist minimal. Mit 'getNeighbours' ist es wesentlich einfacher zu pflegen, daher sehe ich kein Problem damit. Würde ich falsch sagen, dass dies eine vorzeitige Optimierung ist? – byxor
Hmm, yeah, du könntest recht haben, ich stimme definitiv zu, dass es wahrscheinlich größere Orte gibt, die du zuerst optimieren kannst. Der Hintergrundkontext ist, dass ich eine AI schreibe, um Go zu spielen, und die Funktion getNeighbors (...) wird an vielen Stellen in meinem Code aufgerufen; Ich möchte es einfach schnell machen, weil ich eine monte carlo tree Suchstrategie für meinen Bot implementieren möchte, die von der Optimierung profitieren würde. – CowZow