Typesetting math: 100%

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

 


本文只讨论二维空间中的曼哈顿距离与切比雪夫距离

曼哈顿距离

定义

设平面空间内存在两点,它们的坐标为(x1,y1)(x2,y2)

dis=|x1x2|+|y1y2|

即两点横纵坐标差之和

煮个栗子

如图所示,图中A,B两点的曼哈顿距离为AC+BC=4+3=7

 

切比雪夫距离

定义

设平面空间内存在两点,它们的坐标为(x1,y1)(x2,y2)

dis=max(|x1x2|,|y1y2|)

即两点横纵坐标差的最大值

再煮个栗子

dis=max(AC,BC)=AC=4

 

两者之间的关系

两者的定义看上去好像毛线关系都没有,但实际上,这两种距离可以相互转化

我们考虑最简单的情况,在一个二维坐标系中,设原点为(0,0)

如果用曼哈顿距离表示,则与原点距离为1的点会构成一个边长为2的正方形

 

 

如果用切比雪夫距离表示,则与原点距离为1的点会构成一个边长为2的正方形

 

 

仔细对比这两个图形,我们会发现这两个图形长得差不多,他们应该可以通过某种变换互相转化。

事实上,

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

将一个点(x,y)的坐标变为(x+y2,xy2) 后,原坐标系中的切比雪夫距离 = 新坐标系中的曼哈顿距离

 

用处

切比雪夫距离在计算的时候需要取max,往往不是很好优化,对于一个点,计算其他点到该的距离的复杂度为O(n)

而曼哈顿距离只有求和以及取绝对值两种运算,我们把坐标排序后可以去掉绝对值的影响,进而用前缀和优化,可以把复杂度降为O(1)

例题

 

 

 

posted @   自为风月马前卒  阅读(18537)  评论(9编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析

Contact with me

点击右上角即可分享
微信分享提示