【计几】曼哈顿距离与切比雪夫距离

讲解链接: 距离 OI Wiki


曼哈顿距离与切比雪夫距离:为何要相互转化

  • 我们设 d M ( A , B ) d_M(A,B) dM(A,B) 为点 A A A 和点 B B B 的曼哈顿距离, d Q ( A , B ) d_Q(A,B) dQ(A,B) 为点 A A A 和点 B B B 的切比雪夫距离。

  • 那么我们有两点 A ( x 1 , y 1 ) , B ( x 2 , y 2 ) A(x_1,y_1),B(x_2,y_2) A(x1,y1),B(x2,y2)时,两点在映射前后的 M M M 距离和 Q Q Q 距离是相等的。

  • 碰到求切比雪夫距离或曼哈顿距离的题目时,我们往往可以相互转化来求解。两种距离在不同的题目中有不同的优缺点,应该灵活运用。

如何相互转化

  • 曼哈顿坐标系是通过切比雪夫坐标系旋转 45 ° 45° 45° 后,再缩小到原来的一半得到的。

  • 将一个点 ( x , y ) (x,y) (x,y) 的坐标变为 ( x + y , x − y ) (x+y,x-y) (x+y,xy) 后,原坐标系中的曼哈顿距离等于新坐标系中的切比雪夫距离。

  • 将一个点 ( x , y ) (x,y) (x,y) 的坐标变为 ( x + y 2 , x − y 2 ) (\frac{x+y}{2},\frac{x-y}{2}) (2x+y,2xy) 后,原坐标系中的切比雪夫距离等于新坐标系中的曼哈顿距离。




几个经典问题
  1. 二维非欧最远点对。
  2. 二维非欧最近点对。
  3. 多维曼哈顿最远点对。
  4. 多维曼哈顿最近点对。

二维非欧最远点对
  • 转化为切比雪夫距离后,我们知道

d Q = max ⁡ { ∣ x i − x j ∣ , ∣ y i − y j ∣ } d_Q=\max\begin{Bmatrix} |x_i - x_j|,|y_i - y_j|\end{Bmatrix} dQ=max{xixj,yiyj}

  • 那么
    a n s = max ⁡ i , j ∈ n { max ⁡ { ∣ x i − x j ∣ , ∣ y i − y j ∣ } } ans=\max\limits_{i,j\in n}\begin{Bmatrix} \max\begin{Bmatrix} |x_i - x_j|,|y_i - y_j|\end{Bmatrix}\end{Bmatrix} ans=i,jnmax{max{xixj,yiyj}} = m a x { max ⁡ i , j ∈ n { ∣ x i − x j ∣ } , max ⁡ i , j ∈ n { ∣ y i − y j ∣ } } = max\begin{Bmatrix} \max\limits_{i,j\in n}\begin{Bmatrix} |x_i-x_j| \end{Bmatrix},\max\limits_{i,j\in n}\begin{Bmatrix} |y_i-y_j| \end{Bmatrix}\end{Bmatrix} =max{i,jnmax{xixj},i,jnmax{yiyj}} = max ⁡ { m a x ( x ) − m i n ( x ) , m a x ( y ) − m i n ( y ) } =\max\begin{Bmatrix} max(x)-min(x), max(y)-min(y) \end{Bmatrix} =max{max(x)min(x),max(y)min(y)}

  • 扫一遍即可


二维非欧最近点对
  • 仿照多维非欧最近点对,树状数组即可。

多维曼哈顿最远点对
  • 对于二维曼哈顿距离,我们有公式 d ( A , B ) = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ = max ⁡ { x 1 − x 2 + y 1 − y 2 , x 1 − x 2 + y 2 − y 1 , x 2 − x 1 + y 1 − y 2 , x 2 − x 1 + y 2 − y 1 } = max ⁡ ( ( x 1 + y 1 ) − ( x 2 + y 2 ) , ( x 1 − y 1 ) − ( x 2 − y 2 ) , ( − x 1 + y 1 ) − ( − x 2 + y 2 ) ) , ( − x 1 − y 1 ) − ( − x 2 − y 2 ) \begin{aligned} d(A,B)&=|x_1 - x_2| + |y_1 - y_2|\\ &=\max\begin{Bmatrix} x_1 - x_2 + y_1 - y_2, x_1 - x_2 + y_2 - y_1,x_2 - x_1 + y_1 - y_2, x_2 - x_1 + y_2 - y_1\end{Bmatrix}\\ &= \max((x_1 + y_1) - (x_2 + y_2), (x_1 - y_1) - (x_2 - y_2),(-x_1 + y_1) - (-x_2 + y_2)) ,(-x_1 - y_1) - (-x_2 - y_2)\end{aligned} d(A,B)=x1x2+y1y2=max{x1x2+y1y2,x1x2+y2y1,x2x1+y1y2,x2x1+y2y1}=max((x1+y1)(x2+y2),(x1y1)(x2y2),(x1+y1)(x2+y2)),(x1y1)(x2y2)

  • 那么

a n s = m a x ( m a x { ( x + y ) − ( x j + y j ) ( x − y ) − ( x j − y j ) ( − x + y ) − ( − x j + y j ) ( − x − y ) − ( − x j − y j ) } , m a x ( . . . . . . ) , . . . . . . ) (2) ans=max(max\left\{\begin{matrix}(x+y)-(x_j+y_j)\\(x-y)-(x_j-y_j)\\(-x+y)-(-x_j+y_j)\\(-x-y)-(-x_j-y_j)\end{matrix}\right\} \tag{2},max(......),......) ans=max(max(x+y)(xj+yj)(xy)(xjyj)(x+y)(xj+yj)(xy)(xjyj),max(......),......)(2)

  • 也就是在四个状态下维护最大最小值,最后从四个状态中更新即可。

  • 多维也同理。详见 POJ 2926 题解


多维曼哈顿最近点对

我们用以前的思路发现,查询时ans为
a n s = m i n ( m a x { ( x + y ) − ( x j + y j ) ( x − y ) − ( x j − y j ) ( − x + y ) − ( − x j + y j ) ( − x − y ) − ( − x j − y j ) } , m a x ( . . . . . . ) , . . . . . . ) (2) ans=min(max\left\{\begin{matrix}(x+y)-(x_j+y_j)\\(x-y)-(x_j-y_j)\\(-x+y)-(-x_j+y_j)\\(-x-y)-(-x_j-y_j)\end{matrix} \right\} \tag{2} ,max(......),...... ) ans=min(max(x+y)(xj+yj)(xy)(xjyj)(x+y)(xj+yj)(xy)(xjyj),max(......),......)(2)
这样的式子,max没发现以前那样拆开,难以往下推。

如果像以前描的话,我们算出来的是每一行的max然后取min,不能保证和此式子等价。

正解:

  • 以查询点为原点,将空间分隔为八个卦限,最优解一定存在于某个卦限。我们可以以这个立体空间的8个角分别为原点坐标建立8个三维树状数组,树状数组维护前缀最大值。那么我们如果要得到最近的点,我们就去八个树状数组中查询小于等于当前值的最大值,做差取最小值即可。

【计几】曼哈顿距离与切比雪夫距离题集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值