凸壳:已知的点数但不是点本身

时间:2016-07-07 09:05:38

标签: algorithm geometry computational-geometry convex-hull convex

我需要找到一个算法,该算法根据大小为n的给定点S计算凸包。 我知道来自S正好6点形成了凸包。

计算此功能的最佳和最有效的方式是什么?

我考虑过从@GET @Path("{id}") @Produces(MediaType.APPLICATION_JSON) public List<Lots> getLotByChantier(@PathParam("id") String id) { List<Lots> listLots = faL.findAll(); for (Lots lot : listLots) { if (!lot.getChantier().getId().equals(Long.parseLong(id))) { listLots.remove(lot); } } return listLots; } 生成所有可能的点组合(这将是n选择6个点),这将需要O(n ^ 6),然后检查这是否是一个凸包,这将需要O (n)但导致总运行时间非常糟糕。肯定有更好的办法。任何提示?

2 个答案:

答案 0 :(得分:5)

如果只有6个点位于凸包上,那么Jarvis March或礼品包装算法将非常有效。它在O(nh)时间运行,其中h是凸包上的点数。

答案 1 :(得分:1)

正如已经建议的那样,Jarvis March / Gift-wrapping算法在这种情况下非常快,因为与格雷厄姆扫描中的O(nh)相比,时间复杂度为O(nlogn)

唯一可以更快思考的算法是在O(nlogh)中运行的Chan算法,但由于h非常小,因此差异很小。详细了解Chan&#39的算法here