\(\\\)

曼哈顿距离


对于两个点\((x_1,y_1),(x_2,y_2)\),定义他们的曼哈顿距离为\(|x_1-x_2|+|y_1-y_2|\),即两坐标轴分别讨论差值再求和。

对于曼哈顿距离相同的点,他们分布在同一横纵截距且截距相同的直线上。

图中每一个正方形边界上的整点到原点的曼哈顿距离相同。

\(\\\)

切比雪夫距离


对于两个点\((x_1,y_1),(x_2,y_2)\),定义他们的曼哈顿距离为\(max\{|x_1-x_2|,|y_1-y_2|\}\),即两坐标轴分别讨论差值取最大。

对于切比雪夫距离相同的点,他们分布在以原点为中心的正方形边界上。

图中每一个正方形边界上的整点到原点的曼哈顿距离相同。

\(\\\)

曼哈顿距离转切比雪夫距离


考虑曼哈顿距离的表达式:\(|x_1-x_2|+|y_1-y_2|\),其实可以表示成:

\(\begin{align}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\}\end{align}\)

考虑将两个点变化为\((x_1+y_1,x_1-y_1),(x_2+y_2,x_2-y_2)\)

那么变化后两点的切比雪夫距离为\(max((|(x_1+y_1)-(x_2+y_2)|,|(x_1-y_1)-(x_2-y_2)|)\)

若原来两点曼哈顿距离为\(x_1-x_2+y_1-y_2\)或\(x_2-x_1+y_2-y_1\)时,都可以表示为\(|(x_1+y_2)-(x_2+y_2)|\)

若原来两点曼哈顿距离为\(x_1-x_2+y_2-y_1\)或\(x_2-x_1+y_1-y_2\)时,都可以表示为\(|(x_1-y_1)-(x_2-y_2)|\)

将每一个点\((x,y)\)转化为\((x+y,x-y)\),新坐标系下的切比雪夫距离即为原坐标系下曼哈顿距离。

\(\\\)

切比雪夫距离转曼哈顿距离


按照刚才的思路再还原回去即可。

将每一个点\((x,y)\)转化为\((\frac{x+y}{2},\frac{x-y}{2})\),新坐标系下的曼哈顿距离即为原坐标系下切比雪夫距离。

这个转化一般比较常用,曼哈顿距离一般可以通过排序前缀和的方式降低计算复杂度。

注意到除法如果向下取整可能会使答案不正确,所以考虑先不除以\(2\),最后求完答案再除以\(2\)也是一样的,形象的理解可以说成,曼哈顿坐标系是通过切比雪夫坐标系旋转\(45^{\circ}\)后,再缩小到原来的一半得到的。

\(\\\)

一道例题


有\(N\)个二位平面上的点,定义每一个点到其八连通的点的距离为\(1\)。

选一个点,使得剩下所有点到该点的距离之和最小,求出这个距离之和。

  • \(N\in [0,10^5]\)

\(\\\)

题意即为求切比雪夫距离之和最小,暴力的做法是\(N^2\)的。

考虑将切比雪夫距离转化为曼哈顿距离,我们将横纵坐标分开排序求前缀和,这样既可快速求出,以一个点为中心,其他点到这个点的曼哈顿距离之和。

具体的做法是将两个坐标分开讨论,每次找到当前点在排序后数组的位置\(p\)。

那么它前面的点坐标都小于当前点,累加的答案为\(p\times x[i]-sum_p\)。

后面的点的坐标都大于当前点,反过来累加答案,为\((sum_n-sum_p)-(n-p)\times x[i]\)

对所有的点都求一遍,取最小值即可,复杂度\(\text O(NlogN)\)。

\(\\\)

#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 100010
#define R register
#define gc getchar
#define inf 900000000000000000
using namespace std;
typedef long long ll;inline ll rd(){ll x=0; bool f=0; char c=gc();while(!isdigit(c)){if(c=='-')f=1;c=gc();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}return f?-x:x;
}ll n,ans=inf,x[N],y[N],sx[N],sy[N],sumx[N],sumy[N];int main(){n=rd();for(R ll i=1,xx,yy;i<=n;++i){xx=rd(); yy=rd();sx[i]=x[i]=xx+yy; sy[i]=y[i]=xx-yy;}sort(sx+1,sx+1+n);sort(sy+1,sy+1+n);for(R ll i=1;i<=n;++i){sumx[i]=sumx[i-1]+sx[i];sumy[i]=sumy[i-1]+sy[i];}for(R ll i=1,res;i<=n;++i){ll px=lower_bound(sx+1,sx+1+n,x[i])-sx;ll py=lower_bound(sy+1,sy+1+n,y[i])-sy;res=px*x[i]-sumx[px]+sumx[n]-sumx[px]-(n-px)*x[i];res+=py*y[i]-sumy[py]+sumy[n]-sumy[py]-(n-py)*y[i];ans=min(ans,res>>1);}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/SGCollin/p/9636955.html

曼哈顿距离与切比雪夫距离的互化相关推荐

  1. 曼哈顿距离和切比雪夫距离链接

    存一下链接慢慢看 曼哈顿距离和切比雪夫距离 这个更清晰一些: 关于曼哈顿距离和切比雪夫距离 NN中常用的距离计算公式:欧式距离.曼哈顿距离.马氏距离.余弦.汉明距离

  2. 曼哈顿距离与切比雪夫距离的转化及prufer序列

    目录 曼哈顿距离与切比雪夫距离的相互转化 prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2|+|y1−y2|=max(x1−x2+y1−y2,x1−x2−y1 ...

  3. ML:图像数据、字符串数据等计算相似度常用的十种方法(余弦相似性、皮尔逊、闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离、马氏距离、汉明距离、编辑距离、杰卡德相似系数、相对熵/KL散度、Helli

    ML:图像数据.字符串数据等计算相似度常用的十种方法(余弦相似性.皮尔逊.闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离.马氏距离.汉明距离.编辑距离.杰卡德相似系数.相对熵/KL散度.Helli ...

  4. 什么是范数,及其对应的 “曼哈顿距离“、“欧式距离“、“闵氏距离“、“切比雪夫距离“

    什么是范数,及其对应的 "曼哈顿距离"."欧式距离"."闵氏距离"."切比雪夫距离" 一.什么是范数 二.欧式距离(对应 ...

  5. 数据的距离度量 一、欧式距离,曼哈顿距离,闵氏距离,切比雪夫距离,兰氏距离,马氏距离

    数据的距离度量 一.欧式距离,曼哈顿距离,闵氏距离,切比雪夫距离,兰氏距离,马氏距离 前言 欧式距离 标准欧式距离 曼哈顿距离 闵氏距离 切比雪夫距离 兰氏距离 马氏距离 前言 本篇记录一下常用的数据 ...

  6. 曼哈顿距离和切比雪夫距离转换

    设平面空间内存在两点,它们的坐标为(x1,y1) (x2,y2) 曼哈顿距离 dis=|x1−x2|+|y1−y2|,即两点横纵坐标差之和. 切比雪夫距离 dis=max(|x1−x2|,|y1−y2 ...

  7. 曼哈顿距离与切比雪夫距离及其相互转化

    文章目录 曼哈顿距离与切比雪夫距离及其相互转化 1.算法分析 1.1 曼哈顿距离 1.2 切比雪夫距离 1.3 两者之间的关系 1.4 用处 2.典型例题 曼哈顿距离与切比雪夫距离及其相互转化 1.算 ...

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

    讲解链接: 距离 OI Wiki 曼哈顿距离与切比雪夫距离:为何要相互转化 我们设 dM(A,B)d_M(A,B)dM​(A,B) 为点 AAA 和点 BBB 的曼哈顿距离, dQ(A,B)d_Q(A ...

  9. 三维马氏距离_各种距离(欧氏距离、曼哈顿距离、切比雪夫距离、马氏距离等)...

    引用:http://blog.csdn.net/shiwei408/article/details/7602324 在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurem ...

最新文章

  1. 【Python】csv、excel、pkl、txt、dict
  2. 工厂方法模式适用场景
  3. 2017百度之星资格赛 1003 度度熊与邪恶大魔王
  4. 计算机网上作业系统论文,网上作业提交系统的设计与实现
  5. 解决cannot import name ‘finance‘ from ‘matplotlib‘报错与问题解析
  6. 清浮动,防止上下margin重叠(浏览器顶部空白崩溃)
  7. 同时安装vs2010和VS2012后IEnumerableModelClientValidationRule编译错误
  8. 【转】javascript Object使用Array的方法
  9. 线性代数及其应用笔记
  10. python车牌识别使用训练集_TensorFlow车牌识别完整版代码(含车牌数据集)
  11. python pywifi 破解wifi密码
  12. python生成饼图文件_python 生成复合饼图
  13. PPT设计思维进阶:提升设计能力
  14. 毕设:基于CNN卷积神经网络的猫狗识别、狗品种识别(Tensorflow、Keras、Kaggle竞赛)
  15. Ubuntu14.04 下 OpenCV2.4.9 编译
  16. 【mysql】--explain命令解析
  17. 编剧小记 — Contour
  18. JVM虚拟机学习 - JVM类加载,JVM内存模型,JVM性能分析工具
  19. 大锤砸向了阿里巴巴的中台 阿里巴巴还是个快乐的青年吗?———为你讲述阿里巴巴中台建设史
  20. 2015.10.26软件更新公告

热门文章

  1. HTML5定位极其相关内容
  2. poi导出excel合并单元格
  3. 思维导图中的幻灯片导出为PPT
  4. Pythhon消消乐小游戏
  5. MMOE——多任务学习模型
  6. 二线制和四线制传感器的区别_畅谈两线制、三线制、四线制其工作原理和结构上的区别...
  7. 一个老程序员的生活总结
  8. 设计模式(5)--三种工厂模式(披萨店)
  9. ubuntu镜像的选择:i386还是amd64?
  10. @Transactional和Propagation的使用