作者:henu_wxj
链接:https://blog.nowcoder.net/n/90cf725051a84bddb75a8e049c892397
来源:牛客网
前情提要:
1978年,M.I.Shamos在论文《Computational Ceometry》中介绍了一种寻找凸多边形直径的线性算法。
Shamos的算法就像绕着多边形旋转一对卡壳,因此便有了术语——旋转卡壳。旋转卡壳是一种高效的算法。被广泛运用在解决一些与凸包相关的问题。旋转卡壳充分利用了凸包的凸性,通常可以在线性时间内内解决问题。
有关概念:
1.支撑线:如果一条直线L,通过凸多边形P的一个顶点,且多边形在这条直线的一侧,称L是P的支撑线。
2.对踵(zhong,三声)点:如果过凸包上的两个点可以画一对平行直线,使凸包上所有点都夹在两条平行线之间||落在平行线上,那么这两个点称为一对对踵点。两条平行的支撑线所过的两点就是一对对踵点。可以证明,一个凸
边形的对踵点最多只有
(对上取整)对。
3.凸多边形的直径:将一个凸多边形上任意两点间的距离的最大值定义为多边形的直径。确定这个直径的点对数可能多于一对。事实上,对于拥有
个顶点的多边形,就可能有n对“直径点对”存在。
存在一个凸多边形直径定理&