四个问题:
一,Jarvis March算法借鉴了什么算法?
二,如何确定初始点
三,如何获取凸包的边?
四,Jarvis March算法的好处在哪里?
首先看第一个问题,
一,Jarvis March算法借鉴了什么算法?
Jarvis March算法借鉴了选择排序,从未排序的数组中,选出最大值,放入已排序数组的首部。
同样从上图可以看到,组成凸包的过程0/5->1/5->2/5->3/5->4/5->5/5,找到新的合适的点后依次首尾相连。
二,如何确定初始点?
万事开头难,从哪里开始呢?如果水平轴是X轴,竖直轴是Y轴,那么找最下面的,即Y最小的那个点,如果有若干个点都是最小的Y值,那么找最左边的,即,先找最下,再找最左,必定是凸包上的顶点。以此点为初始点。
三,如何获取凸包的边?
凸包上的点有特征,如果逆时针看,凸包的右侧必定为空。也就是说,其他的点必定在组成凸包的边的左侧。
这样可以通过连接凸包上的最后一个点和未组成凸包的点的连线,查看是否有在右侧的,如果有,则说明在右侧的点比当前点更适合做凸包的边。这样,总能找到最合适的下一条边。
四,Jarvis March算法的好处在哪里?
如上图所示,好处在于时间复杂度最差是O(n2),即所有的点都是凸包上的点。但是如果边数是常量,3个,4个或其他常量,时间复杂度就成了O(N)了。