清华计算几何-ConvexHull(凸包)-增量构造

增量构造

在前面两篇博客:

清华计算几何-ConvexHull(凸包)-求极点InTriangle/ToLeft Test

清华计算几何-ConvexHull(凸包)-求极边

分别介绍了EP(extremity point)和ED(extremity edge)求凸包的算法, 算法复杂度分别为O(n4)和O(n3). 这两种算法都是从一个集合里现存数据直接暴力求解出凸包. 

增量构造的思路可以帮助我们进一步优化算法复杂度, 基本思路是:

一个个元素添加, 看每步的增量是否满足凸包要求.和插入排序的理念相似.

In-Convex-Polygon Test

(上图里的流程只包含了求解新的点是否是极点,并没包含判断旧点从极点变为非极点的剔除过程)

在每次插入新点的时候, 需要判断新点是极点还是非极点,采用二分法查找最终化解为in-triangle-test问题.找到相应位置, 如果为极点,则插入。思路基本和二分查找插入排序一样。

查找算法复杂度O(logn), 而进行了N点加点。二分查找在这里意义不大,下面分析原因.

二分法的无效性

本质上来说二分查找法在这里是无意义的或者说意义不大, 因为二分查找插入排序和普通插入排序的算法度都是O(n2). 二分查找插入排序只是加快查找的效率, 比普通插入排序快, 但快得不多. 因为"二分"这个概念意味着必须使用类似数组的数据结构, 进行insert插入。而数组insert插入算法复杂度是O(n). 

极点模式判断法

判断新点为极点,并移除非极点

假设加入一个新点X, 如果新点X为新的极点,则满足如下图形

 逆时针来看, 将X和任意一个极点V相连, V存在前点A和后点B, 如果

对每个凸包的每个极点V做如下运算

如果X为新的极点,得到的V结果模式存在四种:

t: 两次toleft测试都为R,经过的xt线可称为切线

s: 两次toleft测试都为L,经过的xs线可称为切线

st: 两次toleft测试结果分别R和L,这部分的点后续被保留。

ts:  两次toleft测试结果分别L和R,这部分的点后续被剔除。

也就是新点X成为极点,并插入到点t和点s之间。

判断新点为非极点

如果一个新点X不为极点,在凸包的内部, 则为如下图形

用上面的逆时针二次left-test判断法,对于任意一点V,前后点to-left-test测试结果只是RL。

极点模式判断法的算法复杂度为O(n2)

参考资料

[1]清华计算几何 P17-P2

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值