Jarvis算法的输入比Graham(凸壳)快

时间:2014-08-03 23:05:39

标签: algorithm computational-geometry cgal convex-hull grahams-scan

Jarvis:对于具有h个极值点的n个输入点,该算法在最坏的情况下需要O(nh)时间。

格雷厄姆:O(nlogn)在最糟糕的情况下。

Source CGAL的引用,我使用这两种算法。

这意味着当h小于logn时,Jarvis对于数据集可以更快(让我们说2维)。但是,我希望看到它在行动,但我找不到为此目的的数据集。有人知道吗?

谷歌搜索产生这个link,它实际上支持我上面声称的内容。

2 个答案:

答案 0 :(得分:4)

我刚刚做了类似的事情,所以即使有一个接受的答案,我也会发布答案,只是为了数字...

使用CGAL的实施,船体上有10 ^ 6点和3点,格雷厄姆需要~150ms,Jarvis~87ms,见设置(蓝色方块是所有其他点): enter image description here

船体上有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。贾维斯在这里要快得多。