当前位置: 首页 > news >正文

凸包及其算法

概念

凸包:一个能够将所有给定点围住的最小周长封闭图形
稳定凸包:在当前组成凸包的点集 V0V_0V0 中新增一个不在凸包上的点,形成新点集 V1V_1V1,若可以使 V1V_1V1 中所有点都在 V1V_1V1 的点的凸包上,则这个凸包不稳定。反之,则是稳定凸包。

求解凸包

问题

给定在平面直角坐标系中 nnn 个点 Pi(xi,yi)P_i(x_i,y_i)Pi(xi,yi),求解这些点的凸包。

思考

因为凸包是最小周长的封闭图形,所以凸包一定是由多条线段构成的,毕竟两点之间直线最短。

也就是说,凸包一定是多边形说了跟说了一样

暴力算法

可以发现,对于凸包的一条边,这条边所在的直线一定使得所有点都在其左边或者右边。

所以枚举两个点 P0,P1P_0, P_1P0,P1,判断所有点是否在 P0P1P_0P_1P0P1 同一边。

时间复杂度 O(n2)O(n^2)O(n2)

分治

横坐标最大和最小的两点一定在凸包上。而且这两点将凸包分为上凸和下凸。

然后分别对上凸包和下凸包用分治进行求解。

若是上凸包,假设当前分治到点 Pl,PrP_l, P_rPl,Pr 之间,则 PmidP_{mid}Pmid 为在 PlPrP_lP_rPlPr 上方离 PlPrP_lP_rPlPr 最远的节点,然后继续分治 PlPmid,PmidPrP_lP_{mid}, P_{mid}P_rPlPmid,PmidPr

若是下凸包,则 PmidP_{mid}Pmid 为在 PlPrP_lP_rPlPr 下方离 PlPrP_lP_rPlPr 最远的节点。其他同理。

时间复杂度 O(nlog⁡n)O(n\log n)O(nlogn)

Graham扫描法

P0P_0P0yyy 坐标最小的点。(然后将 yyy 坐标最小的点从 PPP 中删除)

将除 P0P_0P0 外点按照以 P0P_0P0 为极点、任意一条从 P0P_0P0 出发的射线为极轴的极坐标排序。(此处按逆时针方向排序)

然后将 P0P_0P0 丢入当前凸包。

接下来假设 PPP 已经按照极坐标排序,DDD 表示凸包内的点(DDD 内点按照加入顺序排序,即 D0D_0D0 是第一个加入的)。

将排好序的点依次访问,更新凸包,假设当前点为 PiP_iPi,当前凸包内点为 D0,D1,...,DdD_0,D_1,...,D_dD0,D1,...,Dd

由于是逆时针排序的,所以 DDD 中点按顺序组成的每条边相对与上一条边一定往左偏。

我们判断 PiDdP_iD_dPiDdDdDd−1D_dD_{d -1}DdDd1 的关系。若 PiDdP_iD_dPiDd 相当于 DdDd−1D_dD_{d -1}DdDd1 往右偏,则 DdD_dDdPiDd−1P_iD_{d-1}PiDd1 左侧,我们将 DdD_dDd 删除,然后 ddd 减一。

PiDdP_iD_dPiDd 相当于 DdDd−1D_dD_{d -1}DdDd1 往左偏,则不需要删除。继续 Pi+1P_{i+1}Pi+1

http://www.lryc.cn/news/8258.html

相关文章:

  • 计算机网络学习笔记(二)物理层
  • 为什么职称要提前准备?
  • MyBatis详解1——相关配置
  • 字节青训营——秒杀系统设计学习笔记(三)
  • 每天一道大厂SQL题【Day10】电商分组TopK实战
  • 最全的免费录屏工具,这 19 款录屏软件绝对值得你收藏
  • vb.net计算之.net core基础(2)-发布应用
  • 微服务项目【商品秒杀接口压测及优化】
  • 1997. 访问完所有房间的第一天
  • 通达信交易接口以什么形式执行下单的?
  • CobaltStrike上线微信通知
  • 喜茶、奈雪的茶“花式”寻生路
  • Xstream使用教程
  • 【正点原子FPGA连载】第十一章PL SYSMON测量输入模拟电压 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 纷享销客百思特 | 数字化营销赋能企业新增长沙龙圆满落幕
  • oracle查看具体表占用空间 oracle查看表属于哪个用户
  • 2.Visual Studio下载和安装
  • 「4」线性代数(期末复习)
  • IDEA中使用tomcat8-maven-plugin插件
  • 2023年妇女节是哪一天 妇女节是2023年几月几日?
  • 如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践
  • 尚医通(十四)Spring Cloud GateWay网关 | 跨域 | 权限认证
  • PO模式在Selenium中简单实践
  • KubeSphere
  • JAVA基础阶段面试题(关键点)必备
  • Shiro简介
  • cmu 445 poject 3笔记
  • CHAPTER 2 Zabbix界面操作
  • keep-alive的使用-及遇到的问题
  • 华为OD面试经验分享,尤其注意机试题部分