上記のモデルがフェイステーブルリストに表示されています。ここで、F1, F2,...F_n
はモデルの面であり、それらの面番号はリスト配列のインデックスです。各リスト要素は、3つの頂点の別の配列です。x,y,z
また、各頂点は、その座標を表す3つの整数の配列です。
座標を持つ頂点のすべての隣接する面を見つけたいです(x2, y2, z2)
。私はこのタスクを実行すると信じているこのコードを思いついた:
List faceList; //say the faceList is the table in the picture above.
int[] targetVertex = {x2, y2, z2}; //say this is the vertex I want to find with coordinates (x2, y2, z2)
List faceIndexFoundList; //This is the result, which is a list of index of the neighbouring faces of the targetVertex
for(int i=0; i<faceList.length; i++) {
bool vertexMatched = true;
for(int j=0; j<faceList[i].length; j++) {
if(faceList[i][j][0] != targetVertex[0] && faceList[i][j][1] != targetVertex[1] && faceList[i][j][2] != targetVertex[2]) {
vertexMatched = false;
break;
}
}
if(vertexMatched == true) {
faceIndexFoundList.add(i);
}
}
タスクを実行するための複雑さはO(N ^ 2)であると言われました。しかし、私が持っているコードでは、O(N)だけのように見えます。targetVertex
ポリゴンごとに頂点が3つしかないため、の長さは3です。したがって、2番目の内部ループは単なる定数です。次に、外側のループだけを残しました。外側のfor
ループはO(N)のみです。
上記のコードの複雑さは何ですか?私は何を間違えたのでしょうか?