平面点集的凸包问题的算法分析

本文介绍了如何使用分治算法求解平面点集的凸包问题,该问题在图形处理中有广泛应用,如形状识别和碰撞检测。算法通过以最大纵坐标和最小纵坐标的点连线划分点集,递归地处理左右子问题,最终得到凸包。伪代码展示了处理过程,算法复杂度最坏情况下为O(n^2),但Graham扫描算法可以达到O(nlogn)。
摘要由CSDN通过智能技术生成

问题(平面点集的凸包) 给定大量离散点的集合Q,求一个最小的凸多边形,使得Q中的点在该多边形内或者边上。
convex

就是说多边形中的任意的两点的连线,依然要在集合里面

应用背景
图形处理中用于形状识别:字形识别、碰撞检测等

一、分治算法

  1. 以连接最大纵坐标点 ymax 和最小纵坐标点 ymin 的线段d={ymax,ymin}划
    分L 为左点集 Lleft 和右点集 Lright

  2. Deal (Lleft );Deal (Lright )

考虑 Lleft:确定距d 最远的点P
在三角形内的点,删除;
a 外的点与 a 构成 Lleft 的子问题;
b 外的点与 b 构成 Lleft 的子问题 .

二、伪码

Deal ( Lleft ) 
# 1.  以 d 和距离 d 最远点 P 构成三角
形,P加入凸包,另外两条边分别记
作 a 和 b   
# 2.  检查 Lleft 中其他点是否在三角形
内;在则从 L中删除;否则根据在 a 
或 b 边的外侧划分在两个子问题中 
3.Deal (a) 
4.Deal (b) 

三、算法分析

  • 初始用d 划分 O(n)
  • Deal 递归调用 W(n)

–找凸包顶点 P O(n)
–根据点的位置划分子问题 O(n)

  • W(n) = W(n-1) + O(n)
    W(3) = O(1)
    最坏情况为O(n2)
    最坏情况为O(n2)
    T(n) = O(n) + W(n) = O(n2)
  • Graham扫描算法 O (nlogn)

四、总结

  • 将原问题归约为子问题
    直接划分注意尽量均衡
    通过计算归约为特殊的子问题
    子问题与原问题具有相同的性质
    子问题之间独立计算
  • 算法实现
    递归或迭代实现
    注意递归执行的边界
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值