Finding largest subset of points forming a convex polygon

前端 未结 4 798
名媛妹妹
名媛妹妹 2021-02-05 12:24

I\'m looking for an algorithm for finding largest subset of points (by largest i mean in number) that form a convex polygon from the given set of point. I think this might be so

4条回答
  •  余生分开走
    2021-02-05 13:07

    This is my a Dynamic Programming O(N^4) algorithm with idea from Andrew's Algorithm posted by Nuclearman, i'm still looking for a O(N^3) algorithm

    upper_hull(most left point, previous point, current point)
    {
        ret = 0
        if (current point != most left point)   /* at anytime we can decide to end the upper hull and build lower_hull from current point ending at most left point */
            ret = min(ret,lower_hull(most left point, -1, current point)) 
        for all point on the right of current point /* here we try all possible next point that still satisfy the condition of convex polygon */
            if (cross(previous point,current point,next point) >= 0) max(ret,1+upper_hull(most left point, current point, next point))
        return ret;
    }
    
    lower_hull(most left point, previous point, current point)
    {
        if (current point == most left point) return 0;
        ret = -INF /* it might be impossible to build a convex hull here, so if it does it will return -infinity */
        for all point on the left of current point and not on the left of most left point
            if (cross(previous point,current point,next point) >= 0) max(ret,1+lower_hull(most left point, current point, next point))
        return ret;
    }
    

    First sort the point based on x axis then for tie sort by y axis, then try all point as most left point to run the upper_hull(p,-1,p) , please tell me if there's any flaw in this algorithm

提交回复
热议问题