Graphics 这段代码有多复杂?
我在上面的模型中有一个面表列表,其中Graphics 这段代码有多复杂?,graphics,geometry,complexity-theory,polygon,Graphics,Geometry,Complexity Theory,Polygon,我在上面的模型中有一个面表列表,其中F1,F2,…F_n是模型的面,它们的面编号是列表数组的索引。每个列表元素是另一个包含3个顶点的数组。每个顶点是一个由3个整数组成的数组,表示它的x,y,z坐标 我想找出顶点的所有相邻面,坐标(x2,y2,z2)。我提出了我认为可以完成任务的代码: List faceList; //say the faceList is the table in the picture above. int[] targetVertex = {x2, y2, z2};
F1,F2,…F_n
是模型的面,它们的面编号是列表数组的索引。每个列表元素是另一个包含3个顶点的数组。每个顶点是一个由3个整数组成的数组,表示它的x,y,z
坐标
我想找出顶点的所有相邻面,坐标(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);
}
}
List-faceList//假设faceList是上图中的表格。
int[]targetVertex={x2,y2,z2}//假设这是我想用坐标(x2,y2,z2)找到的顶点
列表faceIndexFoundList//这是结果,是targetVertex相邻面的索引列表
对于(int i=0;iFrom:
大O表示法用于描述当参数趋向某个特定值或无穷大时函数的极限行为
在这种情况下,您可能只运行一个for
循环。但是当多边形的顶点数接近无穷大时会发生什么?大多数情况是否会导致第二个for
循环运行或中断?这将确定您的函数是O(n)
还是O(n^2)
复杂性是(近似地)faceList.length*faceList[i]。length,它们是独立的,但都可以增长得很大,并且随着它们的增长,它们都将接近无穷大,在这一点(概念上)它们将收敛于n,导致复杂性为O(n^2)
如果顶点列表被明确限制为3,那么复杂性将变为faceList[i].length*3,即O(n)很明显,在最坏的情况下,您必须查看每个多边形的每个顶点
这只是post中的O(表的大小),它是所有行长度的总和或所有多边形顶点计数的总和,以您喜欢的为准
如果你说多边形的顶点不超过m个,并且有n个多边形,那么算法是O(mn)
FWIW使用更复杂的数据结构,完全不需要搜索就可以得到答案。请参见示例和其他。在这种情况下,您只需转到感兴趣的顶点并遍历连接所有相邻多边形的链接。输出中每个多边形的成本是恒定的
这些更奇特的多边形网格数据结构支持大量频繁使用的操作,效率极高。谢谢!对于每个j
顶点多边形,都会有j
相邻面。因此,如果有i
个面,那么的第二个循环将因i-j而中断代码>次数。那么在这种情况下,是O(n)
还是O(n^2)
?大O中接近无穷大的n
是指顶点的数量(第二个循环中的元素数量)还是面的数量(第一个循环中的元素数量)?不太确定,但我对答案感兴趣,所以我开始悬赏这个问题。大O符号很有意思,但我对细节不太清楚,所以希望我们能尽快找到更熟悉的人!没错。第一个循环运行faceList。根据描述,长度时间和第二个循环始终只包含三个顶点之前它总是运行3次。如此大的O变成faceList.Length*3=N*3=3N=O(N)
挑剔:如果两个不同的变量N
和m
“接近无穷大”,那么这并不意味着产品是O(N^2)
-这取决于两者之间的关系。例如,如果m
与n
的平方成比例增长,那么你会得到O(n^3)
@mikera:你当然是对的,我的描述非常简单,可以说明为什么(缺少其他数据)通常是O(n^2)