如何求minimun enclosing circle

monthbird 2002-07-22 12:11:16
如何求minimun enclosing circle问题,越详细越好
...全文
8 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
starfish 2002-07-22
最小覆盖圆

最简单的算法是任取三个点做一个圆,验证其他n-3个点是否在该圆内,并取遍所有的三个点的组合,记录其中最小的圆。这个算法的复杂度是O(n^4)。
另一种较好的算法是Shamos提出的算法,复杂度是O(nlogn)。

S1. 计算点集S的凸壳CH(S);
S2. 计算CH(S)的直径,设为p[i]p[j],以p[i]p[j]为直径做圆C,如果S中的点都在圆C内,则C就是所求的最小覆盖圆;否则转S3;
S3. 计算点集S的最远点意义下的Voronoi图即Vor(S);
S4. 设v是Vor(S)中的一个Voronoi点,以v为圆心,v至S点集中3个最远点的距离为半径做圆,该圆就是所求。

S1可以在O(nlogn)内完成,S2需要O(n)时间,S3需要O(nlogn)时间,S4的复杂度是O(n),所以整个算法的复杂度是O(nlogn)。
回复
atlantis13579 2002-07-22
若要求S的minimun enclosing circle

1.计算S的直径p,以p为直径做圆O
2.如果S中所有的点都在O内,则O为S的minimun enclosing circle,结束;
3.计算S最远意义下的Voronoi图并从中找点v,在v和S的N个顶点中任两个组成的三点的的所有外接圆中找出半径最小的一个.则这个圆就是S的minimun enclosing circle
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告