Time complexity 下面检查点是否位于多边形内的时间复杂度是多少?是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

由于给定多边形中有n个顶点,因此是否存在时间复杂度O(n)的可能性? 我认为是因为这里没有使用for循环。仅当为多边形的n个顶点检查了条件并嵌套时,是否为O(n)? 我的解释正确吗? 或者是其他复杂的事情?我无法计算这个程序的复杂性。 谁能解释一下这个程序的时间复杂度的计算方法

        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(…)”的定义和上面截去的方向(…)的完整定义