曼哈顿距离与切比雪夫距离的互相转化 && 点对距离之和初步

曼哈顿距离:

$Manhattandis(i,$ $j)$ $=$ $|x_i$ $-$ $x_j|$ $+$ $|y_i$ $-$ $y_j|;$

切比雪夫距离:

$Chebyshevdis(i,$ $j)$ $=$ $\max$$(|x_i$ $-$ $x_j|,$ $|y_i$ $-$ $y_j|);$

曼哈顿距离和切比雪夫距离的互相转化:

$Manhattandis((x1,$ $y1),$ $(x2,$ $y2))$ $=$ $Chebyshevdis((x1$ $+$ $y1,$ $x1$ $-$ $y1),$ $(x2$ $+$ $y2,$ $x2$ $-$ $y2));$

$Chebyshevdis((x1,$ $y1),$ $(x2,$ $y2))$ $=$ $Manhattandis((\frac {x1 + y1} {2},$ $\frac {x1 - y1} {2}),$ $(\frac {x2 + y2} {2},$ $\frac {x2 - y2} {2}));$

证明详见 $\text{OI Wiki}$:

https://oi-wiki.org/geometry/distance/


再来引入较为简单的点对距离之和问题:

$1.$ 对于 $n$ 个数轴上的点,求两两之间的距离总和(要求 $O(n)$ 做法)

先将这 $n$ 个点排一下序(复杂度不算)。

设 $f_i$ 表示第 $i$ 个点到它左边的 $i$ $-$ $1$ 个点的总距离,$dis(i,\ j)$ 表示第 $i$ 个点和第 $j$ 个点之间的距离,那么容易发现答案就是 $Σ$ $f_i$ 。

那么考虑得出 $f_i$ 和 $f_{i\ -\ 1}$ 之间的关系。

容易发现第 $i$ 个点到前 $i$ $-$ $1$ 个点的距离都比第 $i$ $-$ $1$ 个点到前 $i$ $-$ $1$ 个点大了 $dis(i,$ $i$ $-$ $1)$ (其中一个点到自身的距离为 $0$)。

所以可以较为轻松地得出递推式:

$f_i$ $=$ $f_{i\ -\ 1}$ $+$ $(i$ $-$ $1)$ $*$ $dis(i,$ $i$ $-$ $1);$

因此就可以 $O(n)$ 地递推顺便再累加得出答案了。

$2.$ 对于 $n$ 个平面上的点,求两两之间的曼哈顿距离总和(要求 $O(n)$ 做法)

首先容易发现,求曼哈顿距离总和是可以拆成分别求横坐标之差的总和和纵坐标之差的总和的。

因此模仿数轴上的做法,先按横坐标排一下序,同数轴上做法求出横坐标之差的总和;再按纵坐标排一下序,同理求出纵坐标之差的总和。

因此答案就是将这两个值加起来。

$3.$ 对于 $n$ 个平面上的点,求两两之间的切比雪夫距离总和(要求 $O(n)$ 做法)

依照上面曼哈顿距离和切比雪夫距离的转换来将输入的点的坐标转换成对应的求曼哈顿距离的坐标,这样再按照上面的做法求一遍就可以了。

posted @ 2021-08-09 22:58  louis_11  阅读(317)  评论(0编辑  收藏  举报