Jarvis:对于具有h个极值点的n个输入点,该算法在最坏的情况下需要O(nh)时间。
格雷厄姆:O(nlogn)在最糟糕的情况下。Source CGAL的引用,我使用这两种算法。
这意味着当h小于logn时,Jarvis对于数据集可以更快(让我们说2维)。但是,我希望看到它在行动,但我找不到为此目的的数据集。有人知道吗?
谷歌搜索产生这个link,它实际上支持我上面声称的内容。
答案 0 :(得分:4)
我刚刚做了类似的事情,所以即使有一个接受的答案,我也会发布答案,只是为了数字...
使用CGAL的实施,船体上有10 ^ 6点和3点,格雷厄姆需要~150ms,Jarvis~87ms,见设置(蓝色方块是所有其他点):
船体上有3个点:
points| Jarvis | Graham
10^7 | 850ms | 1820ms
10^6 | 87ms | 150ms
10^5 | 10ms | 15ms
船体上有5个点:
points| Jarvis | Graham
10^7 | 1500ms | 1820ms
10^6 | 139ms | 150ms
船体上有6个点:
points| Jarvis | Graham
10^7 | 2560ms | 1820ms
10^6 | 170ms | 150ms
但除了这几个特殊情况之外,格雷厄姆还要比贾维斯快得多。
答案 1 :(得分:2)
让我们假设我们有一个很大的问题,里面有很多要点。船体上的点数(即h)为3.如果内部的点数非常大,则h = 3小于log n。贾维斯在这里要快得多。