作业帮 > 数学 > 作业

ACM:给定点集S,求S中周长最小的三角形(点集中点数N

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/24 08:17:18
ACM:给定点集S,求S中周长最小的三角形(点集中点数N
用分治就可以过了.楼主可以参考一下最近点对问题的算法:
算法如下:先将所有的点按x坐标排序,然后每次分成左右两个部分,分别递归求解这两个点集中的最小周长.最后考虑跨越这两个点集的3个点的最小周长,用当前求得的最优解可以缩小枚举的范围.
再问: 先算分治算出出左右两个点集的最小周长min,然后将中位线两边距离中位线不大于(min/2)的点加入中间枚举范围,这样做可以么,主要想问下枚举的部分怎么做
再答: 将这些点按y坐标排序,然后在这堆点里面枚举三角形的3个顶点,枚举的时候保证3个点的x,y坐标差不超过 |min/2|,这样就可以把枚举量控制在很小的范围以内了。思想和最近点对问题几乎是完全一样的。 核心算法如下: minimum_perimeter(S): if |S| < 3 then { 如果S中点数少于3个,就直接返回 } return m = S中所有点的x坐标的中位数 L = S中所有x坐标小于m的点构成的集合 R = S \ L { R包含S中排除L后剩下的元素 } minimum_perimeter(L) { 分别递归求解 L 和 R 中的最小周长三角形 } minimum_perimeter(R) { 求解的结果保存在变量 min 中 } T = {(x,y): |x-m|