If you found the convex hull for both the X
points and the O
points separately (i.e. you have two separate convex hulls at this stage) you would then just need to check whether any segments of the hulls intersected or whether either hull was enclosed by the other.
If the two hulls were found to be totally disjoint the two data-sets would be geometrically separable.
Since the hulls are convex by definition, any separator would be a straight line.
There are efficient algorithms that can be used both to find the convex hull (the qhull algorithm is based on an O(nlog(n))
quickhull approach I think), and to perform line-line intersection tests for a set of segments (sweepline at O(nlog(n))
), so overall it seems that an efficient O(nlog(n))
algorithm should be possible.
This type of approach should also generalise to general k-way
separation tests (where you have k
groups of objects) by forming the convex hull and performing the intersection tests for each group.
It should also work in higher dimensions, although the intersection tests would start to become more challenging...
Hope this helps.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…