凸包

写在前面

最近因为某道鬼题需要求凸包,吓得我赶紧去恶补了一发。

概念(copy自百度百科)

在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,…Xn)的凸组合来构造.
在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。
用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。
如下图:
这里写图片描述

求凸包

暴力

枚举两个点确定一条直线,然后判断其它的所有点是否在这条直线的一侧,如果是,则这两个点是凸包上的点。时间复杂度是 O(n3) 的。

当然还可以分治,(具体怎么做留坑)

Jarvis步进法

首先选择 x 坐标最小(相同x坐标时 y 坐标最小,下面不再解释)的一个点A,这肯定是凸包上一个点。以这个点为原点,构出一个新坐标系 xAy ,将剩余所有点按与 y 轴负方向的极角排序,取第一个点即为凸包上的点,然后继续以这个点建立坐标系,重复上述操作。时间复杂度 O(nk) k 为凸包上点的个数)。

Graham扫描法

也是先选择x坐标最小的点,然后也极角排序。和Jarvis步进法不同的是:我们维护一个单调栈,直接扫描,维护一个有向左转趋势的点集。

Melkman算法(以后再说)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值