我在平面上有一小组N
个点,其中N < 50
。
我想枚举集合中形成不包含其他点的三角形的所有三元组。
虽然显而易见的暴力解决方案对于我的这个小N
可能是可行的,但它的复杂度为O(N^4)
。
您知道降低时间复杂度的方法吗?例如降到O(N³)
或O(N²)
,并保持代码简单? 不允许使用库。
令人惊讶的是,这样的三角形数量相当大。以任意一个点为中心,并按其周围角度递增排序其他点。这形成了一个星形多边形,提供了N-1
个空三角形,因此总共有Ω(N²)
个三角形。已经证明此界限是紧的[Planar Point Sets with a Small Number of Empty convex Polygons,I. Bárány和P. Valtr]。
对于形成凸多边形的点,所有三角形都是空的,因此为O(N³)
。快速算法的机会正在降低 :(
N(N-1)N(2)/3
个可能的三角形。 - user1196549