私はグリッドマップのDFSを行うコードを書いています。私は多くのことを呼んで一つの機能は、指定したセルのすべてのネイバーを取得しますgetNeighbors(...)である:DFS/BFSアルゴリズムでネイバーを取得する際にメモリ割り当てを避けますか?
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 ...
}
私の質問は、私は、このプロセスは、すべての隣人の新しいリストを作成するために無駄なようだと感じていることです隣接セルのリストが1回だけ使用されるので、セルが処理される時間。毎回新しいリストを作成しないように書き直す方法の提案 - 主にコールごとに一度ネイバーを繰り返し処理するだけで済むという事実を利用するか?
パフォーマンスの差はごくわずかです。 'getNeighbours'を使うとメンテナンスが非常に簡単になりますので、問題はありません。これは早すぎる最適化であると言って間違っていますか? – byxor
ええ、あなたが正しいかもしれない、私は間違いなく、おそらく、最初に最適化するより大きな場所があることに同意する。背景の文脈では、私はGoをプレイするためのAIを書いており、getNeighbors(...)関数はコード内の多くの場所で呼び出されます。最適化の恩恵を受ける私のボットのモンテカルロツリー検索戦略を実装する予定だから、ただ速くしたいだけです。 – CowZow