Time complexity 下面检查点是否位于多边形内的时间复杂度是多少?是O(n)还是别的什么?
由于给定多边形中有n个顶点,因此是否存在时间复杂度O(n)的可能性? 我认为是因为这里没有使用for循环。仅当为多边形的n个顶点检查了条件并嵌套时,是否为O(n)? 我的解释正确吗? 或者是其他复杂的事情?我无法计算这个程序的复杂性。 谁能解释一下这个程序的时间复杂度的计算方法Time complexity 下面检查点是否位于多边形内的时间复杂度是多少?是O(n)还是别的什么?,time-complexity,Time Complexity,由于给定多边形中有n个顶点,因此是否存在时间复杂度O(n)的可能性? 我认为是因为这里没有使用for循环。仅当为多边形的n个顶点检查了条件并嵌套时,是否为O(n)? 我的解释正确吗? 或者是其他复杂的事情?我无法计算这个程序的复杂性。 谁能解释一下这个程序的时间复杂度的计算方法 static boolean onSegment(Point p, Point q, Point r) { if (q.x <= Math.max(p.x
static boolean onSegment(Point p, Point q, Point r)
{
if (q.x <= Math.max(p.x, r.x) &&
q.x >= Math.min(p.x, r.x) &&
q.y <= Math.max(p.y, r.y) &&
q.y >= Math.min(p.y, r.y))
{
return true;
}
return false;
}
static int orientation(Point p, Point q, Point r)
int val = (q.y - p.y) * (r.x - q.x)
- (q.x - p.x) * (r.y - q.y);
if (val == 0)
return 0; // colinear
return (val > 0) ? 1 : 2; // clock or counterclock wise
static boolean doIntersect(Point p1, Point q1,
Point p2, Point q2)
int o1 = orientation(p1, q1, p2);
if (o1 != o2 && o3 != o4)
return true;
if (o1 == 0 && onSegment(p1, p2, q1))
return true;
do
{
int next = (i + 1) % n;
if (doIntersect(polygon[i], polygon[next], p, extreme))
{
if (orientation(polygon[i], p, polygon[next]) == 0)
{
return onSegment(polygon[i], p,
polygon[next]);
}
public static void main(String[] args)
{
Point polygon1[] = {new Point(10,50),
new Point(90,20),
new Point(200,20),
new Point(270,50),
new Point(200,130),
new Point(90,130)};
int n = polygon1.length;
Point p = new Point(120,10);
if (isInside(polygon1, n, p))
{
System.out.println("Point 120,10 of polygon2 is inside Polygon1");
}
else
{
System.out.println("Point 120,10 of polygon2 is outside of polygon1 ");
}
静态布尔值分段(点p、点q、点r)
{
如果(q.x=数学最小值(p.x,r.x)和
q、 y=数学最小值(p.y,r.y))
{
返回true;
}
返回false;
}
静态整数方向(点p、点q、点r)
int val=(q.y-p.y)*(r.x-q.x)
-(q.x-p.x)*(r.y-q.y);
如果(val==0)
返回0;//共线
返回(val>0)?1 : 2; // 时钟还是逆时针
静态布尔doIntersect(点p1、点q1、,
点p2,点q2)
int o1=方向(p1,q1,p2);
如果(o1!=o2&&o3!=o4)
返回true;
if(o1==0&&onSegment(p1、p2、q1))
返回true;
做
{
int next=(i+1)%n;
if(doIntersect(多边形[i],多边形[next],p,极值))
{
if(方向(多边形[i],p,多边形[next])==0)
{
分段返回(多边形[i],p,
多边形[下一个];
}
公共静态void main(字符串[]args)
{
点polygon1[]={新点(10,50),
新点(90,20),
新点(200,20),
新点(270,50),
新点(200130),
新点(90130)};
int n=polygon1.length;
点p=新点(120,10);
if(isInside(polygon1,n,p))
{
System.out.println(“polygon2的120,10点在Polygon1内”);
}
其他的
{
System.out.println(“polygon2的120,10点在polygon1之外”);
}
也许可以开始格式化代码。如果你用标签粘贴代码,请先尝试将标签扩展到SPC中。我没有在这里粘贴完整的代码。我保留了一些主要循环和条件。我只需要计算时间复杂度。为了清楚理解,我在这里粘贴了部分代码。请告诉我时间复杂度。它非常复杂有必要了解这种复杂性。然后我建议格式化代码,使其可读。如果得到答案很重要,那么请尽可能回答您的问题。我的意思是,您需要发布“isInside(…)”的定义和上面截去的方向(…)的完整定义