随机增量算法

图片来自:我

1.random_shuffle

2.枚举增量:点i

圆 C;
for(i=1 to n)
{if(P[i] 不在 C 内){C = {P[i], 0};for(j=1 to i-1){if(P[j] 不在 C 内){C = {0.5*(P[i]+P[j]), 0.5*dist(P[i], P[j])};for(k=1 to j-1){if(P[k] 不在 C 内){C = 外接圆(P[i], P[j], P[k]);}}}}}
}

求外接圆:

求出A和B,B和C的中点p1,p2,再把两个向量B-A,C-B旋转90度(顺逆无所谓)

I=p1+t*v1

(p1+t*v1-p2)×v2=0(×表示叉乘)

所以:t=(p2-p1)×v2/(v2×v1)(叉乘乘法分配率)

I=p1+t*v1

注意回来更新半径r的值

复杂度:

random_shuffle,所以点的分布比较均匀

每个循环有n/3概率满足是外接圆3点之一

#include<bits/stdc++.h>
#define il inline
#define reg register int
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){char ch;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=100000+5;
int n;
struct po{double x,y;po(){x=0;y=0;}po(double xx,double yy){x=xx;y=yy;}po friend operator +(po a,po b){return po(a.x+b.x,a.y+b.y);}po friend operator /(po a,double c){return po(a.x/c,a.y/c);}po friend operator -(po a,po b){return po(a.x-b.x,a.y-b.y);}double friend operator *(po a,po b){return a.x*b.y-a.y*b.x;}double len(){return x*x+y*y;}
}p[N];
po rev(po a){swap(a.x,a.y);a.y=-a.y;return a;
}
po circle(const po &A,const po &B,const po &C){po lmd=(A+B)/2,rmd=(B+C)/2;po vel=rev(B-A),ver=rev(C-B);cout<<" mom "<<ver*vel<<endl;double t=ver*(rmd-lmd)/(ver*vel);vel.x*=t;vel.y*=t;return lmd+vel;
}
int main(){srand(20011023);int n;rd(n);for(reg i=1;i<=n;++i){scanf("%lf%lf",&p[i].x,&p[i].y);}random_shuffle(p+1,p+n+1);po o;double r=0.0;for(reg i=1;i<=n;++i){if((p[i]-o).len()>r){o=p[i];r=0;for(reg j=1;j<i;++j){if((p[j]-o).len()>r){o=(p[j]+p[i])/2;r=(p[j]-o).len();for(reg k=1;k<j;++k){if((p[k]-o).len()>r){o=circle(p[i],p[j],p[k]);r=(p[i]-o).len();}}}}}
//        cout<<" i "<<i<<" : "<<r<<" x "<<o.x<<" y "<<o.y<<endl;
    }printf("%.10lf\n%.10lf %.10lf",sqrt(r),o.x,o.y);return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*Date: 2019/4/30 20:32:29
*/

单点增量的思路,随机保证“暴力”复杂度。

转载于:https://www.cnblogs.com/Miracevin/p/10798132.html

[学习笔记]最小圆覆盖相关推荐

  1. 算法学习:最小圆覆盖

    [参考博客] https://www.cnblogs.com/bztMinamoto/p/10698920.html [定义] [圆]一个圆心和他的半径,就能够确定这个半径 [解决问题] 字面意思 给 ...

  2. java画笔覆盖在界面_Java学习笔记:swing画笔工具Graphics,刷新页面,键盘事件,随机数等【诗书画唱】...

    Graphics:画笔工具 setColor:设置画笔颜色 DrawRect:空心矩形 fillRect:实心矩形 DrawOavl:空心圆 fillOavl:实心圆 DrawLine:画线(注意) ...

  3. MySQL学习笔记 02、MySQL基础(覆盖基本知识点)

    文章目录 前言 一.Mysql介绍 1.1.了解Mysql 1.2.认识Socket 1.3.查看设置变量(以及全局) 二.SQL 2.1.DCL(数据控制语言) 2.2.DDL(数据定义语言)重要 ...

  4. AI Studio 飞桨 零基础入门深度学习笔记1-深度学习的定义

    AI Studio 飞桨 零基础入门深度学习-笔记 人工智能.机器学习.深度学习的关系 机器学习 机器学习的实现 机器学习的方法论 案例:牛顿第二定律 确定模型参数 模型结构介绍 深度学习 神经网络的 ...

  5. 算法训练营学习笔记1

    算法训练营学习笔记 贪心算法 心算法总是做出当前最好的选择,期望通过局部最优选择得到全局最优的解决方案.从问题的初始解开始,一步歩地做出当前最好的选择,逐步逼近问题的目标,尽可能得到最优解: 贪心本质 ...

  6. 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现

    批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...

  7. 笔记 | 吴恩达Coursera Deep Learning学习笔记

    向AI转型的程序员都关注了这个号☝☝☝ 作者:Lisa Song 微软总部云智能高级数据科学家,现居西雅图.具有多年机器学习和深度学习的应用经验,熟悉各种业务场景下机器学习和人工智能产品的需求分析.架 ...

  8. java Servlet学习笔记

    前言:开始学习java web了,选择一本java Web整合开发王者归来作为我的学习图书,我觉的光看是不管用的,还要把书上的代码实践一下,通过写学习笔记的形式,加快自己对于java的理解,加油. 学 ...

  9. 三代组装软件canu学习笔记

    三代组装软件canu学习笔记 (2017-08-07 14:17:43) 转载▼   分类: 三代 1:这个组装软件起源于PBcR包含在Celera Assembler中(http://wgs-ass ...

最新文章

  1. 明星企业内推+BAT面经,长三角的开发者联合起来!
  2. Hibernate C3P0连接池配置
  3. peewee mysql自动断开_flask+mako+peewee(下)(解决了Error 2006: MySQL server has gone away)
  4. IAR平台移植TI OSAL到STC8A8K64S4A12单片机中
  5. Android 系统(208)---OTA升级后概率性出现卡在开机动画界面无法退出
  6. bvp解算器是什么_几种飞控的姿态解算算法
  7. 日本人的幼儿教育,看一看还是有意…
  8. 移动端点击出现阴影 css解决方案
  9. 数据同步的设想-数据解耦
  10. 引用 使用Eclipse生成Java Doc
  11. 关于中职计算机专业,关于中职学校计算机专业改革探讨
  12. Excel数据透视表:多级数据透视表
  13. MYSQL数据库日志
  14. 5G关键技术之NFV
  15. 万年历黄历星座查询v3.6.9引流吸粉 实用工具 流量变现小程序
  16. linux 充电桩计费模块,充电桩及计费方法与流程
  17. wsl 搭建 ubantu环境
  18. 入职一个月老大教我如何在做测试中运用Linux
  19. 【App自动化测试】(八)三种等待方式——强制等待、隐式等待、显示等待
  20. matlab simca,SIMCA软件|SIMCA-多元数据分析软件

热门文章

  1. Android L 新特性
  2. 运维侠客行杭州站沙龙回顾 | 云时代下的运维管理实践(附干货下载)
  3. [LeetCode]题解(python):153-Find Minimum in Rotated Sorted Array
  4. Nginx+Lua服务端合并静态文件
  5. Spring 系列,第 2 部分: 当 Hibernate 遇上 Spring
  6. postgresql中DML操作
  7. 获取预制和获取gameObject
  8. 10 个有用的 PHP 代码
  9. PMP考前复习题 系列三
  10. java编程笔记8 面向对象三 内部类