曼哈顿距离(出租车距离)

2,263 阅读4分钟

1/什么是曼哈顿距离(出租车距离)

曼哈顿距离:Manhattan Distance,又称为出租车距离

是由十九世纪的赫尔曼·闵可夫斯基所创造的词汇,
是一种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的`绝对轴距总和`。

如果是二维空间(平面),两点在南北方向上的距离加上两点在东西方向上的距离,即d(i,j)=|x1-x2|+|y1-y2|。
对于一个具有正南正北、正东正西方向规则布局的城镇街道,
从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,
因此,曼哈顿距离又称为出租车距离。

曼哈顿距离计算公式:

图片.png

曼哈顿距离的计算公式看起来要比欧式距离的计算公式简洁很多。
只需要把两个点坐标的 x 坐标相减取绝对值,y 坐标相减取绝对值,再加和。

从公式定义上看,曼哈顿距离一定是一个非负数,距离最小的情况就是两个点重合,距离为 0,
这一点和欧氏距离一样。曼哈顿距离和欧氏距离的意义相近,也是为了描述两个点之间的距离,
不同的是曼哈顿距离只需要做加减法,这使得计算机在大量的计算过程中代价更低,而且会消除在开平方过程中取近似值而带来的误差。
不仅如此,曼哈顿距离在人脱离计算机做计算的时候也会很方便。举例如下。

2/这里顺便复习下欧式距离

欧氏距离是人们在解析几何里最常用的一种计算方法,
但是计算起来比较复杂,要平方,然后加和,最后开方,
而人们在空间几何中度量距离很多场合其实是可以做一些简化的。
曼哈顿距离就是由 19 世纪著名的德国犹太人数学家赫尔曼·闵可夫斯基发明的。

图片.png

欧式距离计算公式:

图片.png

欧式距离是2点之间的直线距离,很容易理解,也很容易解释。
其存在的问题是:
    公式相对曼哈顿距离来说复杂一些,因为需要计算平方,还需要开平方

3/曼哈顿距离在实际生活中的一些应用

<1>国际象棋

图片.png

在国际象棋棋盘(上图)上,有这种横平竖直的格子,描述格子和格子之间的距离可以直接用曼哈顿距离。
如 A1 格子到 C4 格子的曼哈顿距离计算如下,两个格子之间的曼哈顿距离为 5。

图片.png

<2>出租车行业

图片.png

 之所以曼哈顿距离又被称为出租车距离是因为在像纽约曼哈顿区这样的地区有很多由横平竖直的街道所切成的街区(Block),
 出租车司机计算从一个位置到另一个位置的距离,通常直接用街区的两个坐标分别相减,再相加,这个结果就是他即将开车通过的街区数量,而完全没有必要用欧氏距离来求解——算起来超级麻烦还没有意义,毕竟谁也没办法从欧氏距离的直线上飞过去。
 如上图所示,假设一辆出租车要从上面的圆圈位置走到下面的圆圈位置,无论是左边的线路,还是右边的线路,都要经过 11 个街区,而这个 11 就是曼哈顿距离。
 从曼哈顿距离的定义就能看出,曼哈顿距离的创立,与其说有很大的学术意义不如说更多的是应用意义。
 上面的公式以及举的例子只给了二维空间上的曼哈顿距离公式,三维、四维或者更多维度的计算原理是一样。
 这也是本书一直想说的一点,数学就在我们身边,它是我们的工具,能帮我们解决问题而不是带来麻烦。

3/总结

欧式距离和曼哈顿距离都是很重要的衡量距离的指标,只是二者应用在不同的领域。
欧式距离的计算公式比较复杂,如果是对海量的数据进行计算的话,会存在一定的计算压力。
相比较来说,曼哈顿距离的计算公式就比较简洁了,只需要加减,不用平方和开方,而且也不会产生在开方的时候因为四舍五入而导致数据有误差的问题。

对于出租车来说,我们只能计算曼哈顿距离,因为欧式距离是没有意义的,
因为我们从一个地点到另一个地点的时候,不可能从空中直接飞过去。