闵可夫斯基和(内含证明)
闵可夫斯基和
定义
两个点集的闵可夫斯基和 \(A+B\) 定义为 \(\{a+b|a\in A,b\in B\}\)。
性质
- 交换律:显然,易证。
- 对于两个凸包 \(A,B\),则 \(A+B\) 为凸包。
性质二证明
引理 1:对于一个凸图形,图形内任意两点之间的连线都在图形内部,反之亦然(即为充要条件)。
引理 2:(等和线)对于两个平面向量 \(\vec A, \vec B\) 和一个实数 \(t\),总有 \(t\vec A + (1-t)\vec B\) 的终点在直线 \(AB\) 上。明显的,若 \(t \in[0,1]\),其会在线段 \(AB\) 上。
由于 \(A,B\) 均为凸包,则有
对于任意 \(\vec a,\vec b\in A,\;\vec c,\vec d\in B,\; t\in [0,1]\),\(t\vec a+(1-t)\vec b\in A,\; t\vec c+(1-t)\vec d\in B\)。
因此, \(t\vec a+(1-t)\vec b + t\vec c+(1-t)\vec d \in A+B\)。
因式分解,得 \(t(\vec a + \vec c)+(1-t)(\vec b + \vec d)\in A+B\)。
显然,\(\vec a + \vec c\) 可以表示 \(A+B\) 中任意一点(从定义出发),同理 \(\vec b + \vec d\)。所以 \(A+B\) 为凸图形,即凸包。
求法
易证(即不想证) \(A+B\) 的所有端点都是由 \(A\) 的端点和 \(B\) 的端点运算构成的,于是我们得到了一个 \(\mathcal O(|A||B|)\) 的算法。
又(不)易证 \(A+B\) 的所有边都是由 \(A,B\) 中某一凸包端点和另一凸包的一条边构成,于是所有的边都可以由 \(A,B\) 中的边平移得到,又由于其凸性,可以直接按斜率排序(即极坐标排序),可以得到一个 \(\mathcal O((|A|+|B|)\log(|A|+|B|))\) 的算法,用归并排序,可以优化到 \(\mathcal O(|A|+|B|)\)。
对于如上不易证内容的证明:
- 若是存在 \(\vec a\in A,\vec b\in B\) 使得 \(\vec a\) 不在 \(A\) 的边上或 \(\vec b\) 不在 \(B\) 的边上(后假设不在 \(A\) 的边上),且 \(\vec a+\vec b\) 在 \(A+B\) 的边上,则不可能对于任意方向的单位向量 \(\vec e\),存在 \(\zeta > 0\) 满足 \(\vec a + \vec b + \zeta \vec e\) 都在 \(A+B\) 中。但很明显是存在 \(\zeta > 0\) 满足 \(\vec a + \zeta \vec e \in A+B\),即存在 \(\zeta > 0\) 满足 \(\vec a + \vec b + \zeta \vec e\) 都在 \(A+B\) 中,矛盾。所以至少是由 \(A,B\) 的边所构成。
- 对于 \(A,B\) 的两条边,他们所构成的图形是平行四边形,而可能对 \(A+B\) 的边有影响的只有平行四边形的边。至此,证毕。

浙公网安备 33010602011771号