首页 > 其他分享 >最小圆覆盖

最小圆覆盖

时间:2024-08-03 08:56:13浏览次数:13  
标签:边上 覆盖 最小 循环 我们 性质

性质一:最小圆覆盖是唯一的

证:若存在两个最小圆,如下

显然所有点只能存在于两个圆的交集中,于是以中间那条实心蓝线为直径做一个圆,这个圆显然更小而且能够覆盖所有点

性质二:若我们已经用最小覆盖圆覆盖了所有点,设这些点的点集为\(S\),现在我们新加入一个点\(p\),若\(p\)不在\(S\)的最小覆盖圆的内部,则\(p\)一定在{\(p\)}∪\(S\)的边上

证明:假设\(p\)在最小覆盖圆的外部,如下图:

由于\(C_2\)覆盖了\(S\),所以\(r_{C_2}≥r_{C_1}\),由性质一,有\(r_{C_2}>r_{C_1}\),于是可以将\(C_2\)不断缩小,使其同时包含\(S\)和\(p\),这与\(C_2\)是最小圆覆盖矛盾

求最小覆盖圆思路:首先将点随机化保证复杂度。然后循环,假设循环到\(i\),我们已经求出了\(1\) ~ \(i-1\)的最小覆盖圆,如果\(i\)在这个最小覆盖圆内部,则圆不变,否则的话由性质二可以知道\(i\)一定在新的最小覆盖圆的边上。开一个内层循环,假设循环到\(j\),我们已经求出了\(1\) ~ \(j-1\)且\(i\)在圆边上的最小覆盖圆(我们要求的是\(1\) ~ \(j\)且\(i\)在圆边上的最小覆盖圆),如果\(j\)在这个最小覆盖圆内部,则圆不变(此时即使多了条件\(i\)在圆边上,我们仍然可以类似证明性质一),否则的话\(j\)一定在新的最小覆盖圆的边上(此时即使多了条件\(i\)在圆边上,我们仍然可以类似证明性质二)。再开一个内层循环,假设循环到\(k\),我们已经求出了\(1\) ~ \(k-1\)且\(i,j\)在圆边上的最小覆盖圆(我们要求的是\(1\) ~ \(k\)且\(i,j\)在圆边上的最小覆盖圆),如果\(k\)在这个最小覆盖圆内部,则圆不变(此时即使多了条件\(i,j\)在圆边上,我们仍然可以类似证明性质一),否则的话\(k\)一定在新的最小覆盖圆的边上(此时即使多了条件\(i,j\)在圆边上,我们仍然可以类似证明性质二),而此时我们已经确定了三个点在圆边上,于是可以唯一确定圆,从而求出了\(1\) ~ \(j\)且\(i\)在圆边上的最小覆盖圆,进而可以求出\(1\) ~ \(i\)的最小覆盖圆

时空复杂度都是\(O(n)\)(具体证明见视频39:30)

如果要求最小覆盖球,则是“四点确定一个球”,其余类似

标签:边上,覆盖,最小,循环,我们,性质
From: https://www.cnblogs.com/dingxingdi/p/18340012

相关文章

  • 解密编程的八大法宝(四)(附二分查找、分治法和图论算法(深度和广度优先搜索、最短路径、最
    算法题中常见的几大解题方法有以下几种::暴力枚举法(BruteForce):这是最基本的解题方法,直接尝试所有可能的组合或排列来找到答案。这种方法适用于问题规模较小的情况,但在大多数情况下效率不高。贪心算法(GreedyAlgorithm):贪心算法在每一步都选择当前看起来最优的解,希望最终能......
  • 最小斯坦纳树
    什么鬼名字,不如叫做扩展最小生成树。定义规范定义像是专门不让人看懂来提高算法高级度的,这里说一说比较易懂的定义。在图上面指定一些点,让你在图上选择一些边,使得这几个点连通,允许有其它点存在。如果我们要求选择的边边权和最小,那么容易证明选出的点和边一定构成一棵树,这棵树就......
  • [学习笔记]最小割树 (Gomory-Hu Tree)
    本文是在作者阅读多篇博客后糅合而成的,部分内容有雷同。最小割树又称Gomory-Hu树,由RalphEdwardGomory和TeChiangHu于1961年发表的论文中共同提出。最小割树可以在\(n−1\)次最大流中构建,并通过树上RMQ求任意两点之间的最小割。板子题:P4897【模板】最小割树(G......
  • prim算法求最小生成树
    prim算法求最小生成树#include<bits/stdc++.h>usingnamespacestd;constintN=600;intg[N][N];//n的平方约等于m,所以用邻接矩阵,存放权值。g[i][j]表示边ij的长度为g[i][j]constintinf=0x3f3f3f3f;//无穷大0x3f3f3f3fintdist[N];//该点到集合里点的最小值boolst[N]......
  • 用selenium打开网页的最小模板
    前言环境:win10python3.10selenium4.12经常用selenium来实现一个打开网页的这样一个小功能,虽然代码很少,但每次重0开始写就很烦。所以这里记录下一个模板小模板importtimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.web......
  • 代码大全继承派生覆盖子程序,但没有任何操作
    派生后覆盖了某个子程序,但在其中没做任何操作,这种情况也值得怀疑这通常表明基类的设计中有错误。 举例来说,假设你有一个Cat(猫)类,它有一个Scratch()(抓)成员函数,可是最终你发现有些猫的爪尖儿没了,不能抓了。你可能想从Cat类派生一个叫scratchiesscat(不能抓的猫)的类,然......
  • 3111. 覆盖所有点的最少矩形数目
    给你一个二维整数数组 point ,其中 points[i]=[xi,yi] 表示二维平面内的一个点。同时给你一个整数 w 。你需要用矩形 覆盖所有 点。每个矩形的左下角在某个点 (x1,0) 处,且右上角在某个点 (x2,y2) 处,其中 x1<=x2 且 y2>=0 ,同时对于每个矩形都 必须 满足......
  • LeetCode 3111. 覆盖所有点的最少矩形数目(贪心、排序)
    题目:3111.覆盖所有点的最少矩形数目思路:只需关注横坐标,对横坐标进行升序排序,然后进行贪心,求得最少的矩阵数量classSolution{public:intminRectanglesToCoverPoints(vector<vector<int>>&points,intw){vector<int>v;for(inti=0;i<poi......
  • Leetcode每日一题 20240731 3111.覆盖所有点的最少矩阵数目
    题目描述给你一个二维整数数组point,其中points[i]=[xi,yi]表示二维平面内的一个点。同时给你一个整数w。你需要用矩形覆盖所有点。每个矩形的左下角在某个点(x1,0)处,且右上角在某个点(x2,y2)处,其中x1<=x2且y2>=0,同时对于每个矩形都必须满足x2......
  • 最小二乘法拟合空间直线
    一、空间直线方程1.1一般方程空间直线可以看成成两个平面的交线,设两个平面方程分别为\(A_1x+B_1y+C_1z+D_1=0\)和\(A_2x+B_2y+C_2z+D_2=0\),则直线\(l\)的一般方程可以表示为:\(\left\{\begin{matrix}A_1x+B_1y+C_1+D_1=0\\A_2x+B_2y+C_2+D_2......