已知n个点坐标,求覆盖所有点的最小面积圆用什么算法?

ahuacxh 2002-05-14 10:38:11
是不是先求一个凸包,再对凸包的顶点枚举任三个点和任两个点确定的圆是否满足条件?
有什么高效的算法?
...全文
466 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangqiqi 2002-05-15
  • 打赏
  • 举报
回复
不对,待我回去想想。
wangqiqi 2002-05-15
  • 打赏
  • 举报
回复
取凸包中内角最小的三个顶点,作圆,即可。
starfish 2002-05-15
  • 打赏
  • 举报
回复
最简单的算法是任取三个点做一个圆,验证其他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)。
nethermit 2002-05-15
  • 打赏
  • 举报
回复
两位的算法本质上和我说的那个一样
row 2002-05-15
  • 打赏
  • 举报
回复
在n个点中找出A B两点,A B两点满足|AB|距离是n个点中距离最大的两点。
求取A B的中点C点,
1.如果其它的点到C点的距离都小于|AB|/2的话
则以C为圆心,R=|AB|/2为半径,就是所求的圆。
2.如果其它的点中存在到C点的距离大于|AB|/2
遍历其它所有的点,计算角AXB,求取使张角AXB最小的点X,
则以 A X B三点确定的圆即为所求圆。
atlantis13579 2002-05-15
  • 打赏
  • 举报
回复
求出两两的距离,找距离最大的两点AB,以此线段为直径作圆;
如所有点在此圆内,此圆就是所求圆;
否则求出中点M,找到离M距离最大的点P,作过PAB的圆.
nethermit 2002-05-15
  • 打赏
  • 举报
回复
连结两个距离最大的点,以此线段为直径作圆;
如所有点在此圆内,此圆就是所求圆;
如不是,取圆外点与该两点夹角最小的点,三点作圆,可得所求圆。
证明从略……

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧