Skip to content

曼哈顿距离 & 切比雪夫距离 笔记 ​

一、定义 ​

曼哈顿距离:|x1−x2|+|y1−y2|。

优势:容易快速计算。

具体的,sort 一遍然后用前缀和即可计算 ∑|xi−xj|。

cpp
int calc(int d[]) {
    sort(d + 1, d + n + 1);
    for (int i = 1; i <= n; i++)
        q[i] = q[i - 1] + d[i];
    int ret = 0;
    for (int i = 1; i <= n; i++)
        ret += (d[i] * i - q[i]);
    return ret * 2;
}

切比雪夫距离:max(|x1−x2|,|y1−y2|)。

优势:限定距离后,与坐标轴平行,容易进行扫描线 / CDQ 分治。

二、转化 ​

1. 曼哈顿距离 → 切比雪夫距离 ​

结论:将 (xi,yi) 转化为 (xi+yi,xi−yi) 后计算切比雪夫距离。

证明:

dis(i,j)=|xi−xj|+|yi−yj|=max((xi+yi)−(xj+yj),(xj+yj)−(xi+yi),(xi−yi)−(xj−yj),(xj−yj)−(xi−yi))=max(|(xi+yi)−(xj+yj)|,|(xi−yi)−(xj−yj)|)

2. 切比雪夫距离 → 曼哈顿距离 ​

结论:将 (xi,yi) 转化为 (xi+yi2,xi−yi2) 后计算曼哈顿距离。

证明:咕咕咕。

三、应用 ​

1. P10633 BZOJ2989 数列/BZOJ4170 极光 ​

将曼哈顿距离转为切比雪夫距离,打上坐标系,二维差分后 CDQ 分治。

最近更新