小さな 2D ゲームの物理演算をプログラミングしていて、画面上のすべてのオブジェクトを画面上の他のすべてのオブジェクトと照合する必要があります。それO(N^2)
は、私はあまり好きではありません。
私が考えていたこと:
for (var i = 0; i < objects.length; i ++)
for (var j = 0; j < objects.length; j ++)
if (collide(objects[i], objects[j])) doStuff(objects[i], objects[j]);
これは不要です。同じオブジェクトを相互に複数回チェックします。どうすればそれを回避できますか? (n がオブジェクトの数であると仮定すると)行列を持つことを考えたn*n
後、オブジェクトのペアにアクセスするたびに、次のようにします。
visited[i][j] = 1;
visited[j][i] = 1;
そして、私が訪れたオブジェクトのペアを常に知っていました。
これは機能しますが、最初n*n
にすべてを設定するためだけに、これらのセル、時間をすべて設定する必要があり0
ます。たぶん、すべてを に設定できますが[]
、これはまだ実行可能な解決策とは思えません。もっと良いものはありますか?
明らかに、私が選んだ言語は Javascript ですが、C、C++、および Python は比較的流暢に知っているので、それらで答えることができます (ただし、Javascript、C、および C++ の構文はほとんど同じです)。