引言
最近帮一个朋友看八数码算法,在读源码的时候无意看到这个新奇的概念,后来发现其应用领域还挺广泛如游戏中的地图,特地研究了一下,本文的目的就是阐述下什么是曼哈顿距离以及其相近的概念,最后用算法实现在数组中如何计算两者之间的曼哈顿距离
曼哈顿距离(出租车距离)
是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和
用以标明两个点在标准坐标系上的绝对轴距总和。下图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。
对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此,曼哈顿距离又称为出租车距离。
计算曼哈顿
3$*$3的矩阵,即如下所示
【A,B,C】
【D,E,F】
【G,H,I】
如何计算A和I之间的曼哈顿举例呢?
首先将其放入到数组【A,B,C,D,E,F,G,H,I】中,其他的详见注释
|
|
输出结果:
s1:1—-s2:9—–m:3
刚好A和I之间隔了三个节点,他们是DGH或者DEF或者BEH
总结
本文简述了曼哈顿距离,并应用简单的代码实现了求解两点之间的哈夫曼举例。
声明
本文20%为翻译组合,80%为原创