距离算法学习记录
作者:互联网
距离算法学习记录
https://www.luogu.org/blog/xuxing/Distance-Algorithm
一篇非常好的luogu日报。我从这里学来的。
欧几里得距离
定义上是两点之间不论地形的最短距离。
二维: \(|AB| = \sqrt{(x_1 - x_2) ^ 2 + (y_1 - y_2) ^ 2}\)
三维:\(|AB| = \sqrt{(x_1 - x_2) ^ 2 + (y_1 - y_2) ^ 2 + (z_1-z_2) ^ 2}\)
直接求就是了。
如果要找一个点,使得到\(n\)个点的欧几里得距离和最小的话,应该要用到模拟退火。
一般这种距离都是浮点数,没有什么特别的算法。
曼哈顿距离
定义上只能走直路,不能走斜路。
\(|AB| = |x_1 - x_2| + |y_1 - y_2|\)
不容易求最短曼哈顿距离,因为\(x\)最大的\(y\)不一定最大,\(x\)最小的\(y\)不一定最小。(但也能求,下面有)
虽然这样很麻烦,但在另一方面就有特别优秀的性质:可以对\(x\)和\(y\)分别计算贡献。(下面也有)
用这个性质,我们可以以\(O(n \log n)\)的复杂度找到一个点,使得到\(n\)个点的曼哈顿距离和最小。
切比雪夫距离
定义上是允许用与走直路同样的代价走斜路。
\(|AB|=\max(|x_1-x_2|, |y_1-y_2|)\) 证明很简单。
容易求最短切比雪夫距离,直接维护最大最小的\(x\)和\(y\)就可以了。
但是很难找到一个点,使得到\(n\)个点的切比雪夫距离和最小。特别复杂。
后两种距离的互换
我们可以通过重新建系定义点来实现距离的互换。证明就不写了
原坐标系\((x,y)\)的曼哈顿距离会等于新坐标系\((x+y,x-y)\)的切比雪夫距离。
原坐标系\((x,y)\)的切比雪夫距离会等于新坐标系\((\frac{x+y}{2}, \frac{x-y}{2})\)的曼哈顿距离。
例题
P5098 [USACO2004OPEN]Cave Cows 3 洞穴里的牛之三
一句话题意:求\(n\)个点中最大的曼哈顿距离。
法一:曼哈顿距离
对任意的两个点\((x_1,y_1)\)和\((x_2,y_2)\),按照绝对值讨论四种情况:
- \(x_1 \geq x_2,y_1 \geq y_2\),此时他们的曼哈顿距离为\(x_1- x_2 + y_1 - y_2\),即\((x_1+y_1)-(x_2+y_2)\)。
- \(x_1 \geq x_2,y_1 < y_2\),此时他们的曼哈顿距离为\(x_1-x_2+y_2-y_1\),即\((x_1-y_1)-(x_2-y_2)\)。
- \(x_1 < x_2,y_1 \geq y_2\),此时他们的曼哈顿距离为\(x_2-x_1+y_1-y_2\),即\((x_2-y_2)-(x_1-y_1)\)。
- \(x_1 < x_2,y_1 < y_2\),此时他们的曼哈顿距离为\(x_2-x_1+y_2-y_1\),即\((x_2+y_2)-(x_1+y_1)\)。
可以看出,这个最大值只与这些点的\(x+y\)与\(x-y\)有关。
所以所有点中的最大曼哈顿距离就等于\(\max((x+y)_{max} - (x+y)_{min}, (x-y)_{max} - (x - y)_{min})\)。
法二:转切比雪夫距离
每个点转换为新的点\((x+y,x-y)\),然后就变成了求这些新点中最大的切比雪夫距离。
由定义可知:答案就等于\(\max(x_{max} - x_{min},y_{max} - y_{min})\)。一次遍历找出\(x\)和\(y\)的最大最小值即可。
P3964 [TJOI2013]松鼠聚会
一句话题意:在\(n\)个点中找到一个点,使得到\(n\)个点的切比雪夫距离最小。
上边说了不好求,我们转换成曼哈顿距离,坐标变成\((\frac{x+y}{2}, \frac{x-y}{2})\)。
确定一个聚会地点,怎么快速算出路程之和?只要\(x\)跟\(y\)分开考虑贡献即可。
以\(x\)坐标为例,假如我们选中第\(i\)个点为聚会地点,那么其他点(设为点\(j\))的横坐标的贡献就有两种:
- \(x_j < x_i\),此时会有\(x_i - x_j\)的贡献。
- \(x_j > x_i\),此时会有\(x_j - x_i\)的贡献。
只要我们将新坐标中的\(x\)坐标从小到大排序,就可以在里面二分得到有多少个点是第一种贡献,多少个点是第二种贡献。
两种贡献都对应两个区间内的\(x\)值之和,我们用前缀和处理一下即可。
\(y\)坐标同理。
复杂度\(O(n \log n)\)。
标签:个点,记录,曼哈顿,max,比雪夫,最小,距离,算法 来源: https://www.cnblogs.com/Garen-Wang/p/11244159.html