美文网首页
求解2维凸包问题

求解2维凸包问题

作者: bazinga_dmc | 来源:发表于2020-12-02 20:52 被阅读0次

参照《数据结构、算法与应用(c++语言描述)》书中的算法,2维凸包求解分为三步:

  1. 处理退化情况(点集S的个数小于等于2的情形)

  2. 选定点集S内的一点,根据点集内所有点与之形成的极角由小到大排序(极角相同的点由近到远排序)

  3. 从y轴最小的点开始循环处理排序后的点集S,删除非极点的点

利用双向循环链表实现,算法的核心在于如何判断三个点的逆时针夹角是否小于或等于180度(三个点为p1,p2,p3,形成的向量为v1(p2 - p1)和v2(p3 - p2))。如果三个点逆时针夹角小于或等于180度,根据右手定则和v1、v2所指的方向,可知v1和v2的向量积方向应指向坐标轴的负向,即v1和v2的向量积不大于0)。完整代码传送门

原书中 Step3(删除非极点的点) 算法似乎有问题,原步骤如下:


当初始的x,rx,rrx逆时针夹角小于或等于180度时,rx = x(即rx = p),for循环直接退出,未达到删除非极点的点的目的。修改后的代码片段如下(当将链表遍历一圈发现均为有效极点时才退出循环):

相关文章

  • 分治法求解凸包问题

    求解二维凸包问题,时间复杂度为O(nlogn),即先通过点集中每个点的x值将点集划分为左右两部分,分别求解其凸包,...

  • 求解2维凸包问题

    参照《数据结构、算法与应用(c++语言描述)》书中的算法,2维凸包求解分为三步: 处理退化情况(点集S的个数小于等...

  • 《python算法教程》Day11 - 分治法求解平面凸包问题

    这是《python算法教程》的第11篇读书笔记,笔记主要内容是使用分治法求解凸包。 平面凸包问题简介 在一个平面点...

  • cvxopt 示例简单讲解

    Cvxopt 是基于 Python 语言的用于解决凸优化问题的免费包,可以用于求解纳什均衡问题的最优策略,好用但是...

  • 凸优化(四)——问题求解

    〇、说明 凸优化主要学习《凸优化》(Stephen Boyd等著,王书宁等译)[1]这本书。学习过程中,对其内容的...

  • 图像轮廓(2)

    1. 凸包 凸缺陷可以用来处理手势识别问题 points:轮廓clockwise:True:凸包按顺时针方向排列;...

  • 凸优化(五)凸问题与其解

    1. 概述 这期来讲一下凸问题,了解凸问题的结构便于我们来进行相应的求解。相信大家应该看过前几期了(ball ba...

  • 拉格朗日乘子法和KKT条件

    拉格朗日乘子法 要解决的问题 拉格朗日乘子法要解决的就是有等式限制条件的凸优化问题。形式如下: 求解方式 例如: ...

  • SVM中的拉格朗日算子

    SVM是一个凸线性空间上寻找最优解的问题(凸二次规划问题)。由于,SVM中约束条件为一系列的不等式,其二次规划求解...

  • 用人话讲明白支持向量机SVM(下)

    目录 4.求解超平面4.1几何间隔4.2凸二次规划4.3拉格朗日乘数法5.线性可分问题小结 4.求解超平面 上篇仅...

网友评论

      本文标题:求解2维凸包问题

      本文链接:https://www.haomeiwen.com/subject/jsnuwktx.html