曼哈顿距离算法详解(含公式)
欧氏距离是人们在解析几何里最常用的一种计算方法,但是计算起来比较复杂,要平方,加和,再开方,而人们在空间几何中度量距离很多场合其实是可以做一些简化的。曼哈顿距离就是由 19 世纪著名的德国犹太人数学家赫尔曼·闵可夫斯基发明的(图 1)。
图 1 赫尔曼·闵可夫斯基
赫尔曼·闵可夫斯基在少年时期就在数学方面表现出极高的天分,他是后来四维时空理论的创立者,也曾经是著名物理学家爱因斯坦的老师。
曼哈顿距离也叫出租车距离,用来标明两个点在标准坐标系上的绝对轴距总和。简单来说,对比一下欧氏距离。
欧氏距离里的距离计算:
曼哈顿距离中的距离计算:
曼哈顿距离中的距离计算公式比欧氏距离的计算公式看起来简洁很多,只需要把两个点坐标的 x 坐标相减取绝对值,y 坐标相减取绝对值,再加和。
从公式定义上看,曼哈顿距离一定是一个非负数,距离最小的情况就是两个点重合,距离为 0,这一点和欧氏距离一样。曼哈顿距离和欧氏距离的意义相近,也是为了描述两个点之间的距离,不同的是曼哈顿距离只需要做加减法,这使得计算机在大量的计算过程中代价更低,而且会消除在开平方过程中取近似值而带来的误差。不仅如此,曼哈顿距离在人脱离计算机做计算的时候也会很方便。举例如下。
图 2 国际象棋
在国际象棋棋盘(图 2)上,有这种横平竖直的格子,描述格子和格子之间的距离可以直接用曼哈顿距离。如 A1 格子到 C4 格子的曼哈顿距离计算如下:
两个格子之间的曼哈顿距离为 5。
之所以曼哈顿距离又被称为出租车距离是因为在像纽约曼哈顿区这样的地区有很多由横平竖直的街道所切成的街区(Block),出租车司机计算从一个位置到另一个位置的距离,通常直接用街区的两个坐标分别相减,再相加,这个结果就是他即将开车通过的街区数量,而完全没有必要用欧氏距离来求解——算起来超级麻烦还没有意义,毕竟谁也没办法从欧氏距离的直线上飞过去。如图 3 所示,假设一辆出租车要从上面的圆圈位置走到下面的圆圈位置,无论是左边的线路,还是右边的线路,都要经过 11 个街区,而这个 11 就是曼哈顿距离。
从曼哈顿距离的定义就能看出,曼哈顿距离的创立,与其说有很大的学术意义不如说更多的是应用意义。这也是本书一直想说的一点,数学就在我们身边,它是我们的工具,能帮我们解决问题而不是带来麻烦。
图 3 曼哈顿距离的应用
上面的公式只给了二维空间上的曼哈顿距离公式,三维、四维或者更多维度的计算原理是一样。
原文链接:http://www.go60.top/dsj/66.html
曼哈顿距离算法详解(含公式)相关推荐
- 怎么用python编程实现二次差值多项式_双三次插值算法详解 含python实现
一. 图像双三次插值算法原理: 假设源图像 A 大小为 m*n ,缩放后的目标图像 B 的大小为 M*N .那么根据比例我们可以得到 B(X,Y) 在 A 上的对应坐标为 A(x,y) = A( X* ...
- 最小生成树-Prim算法详解(含全部代码)
目录 适用条件 测试所用图 算法详解 Prim算法代码 全部代码 实验结果 适用条件 加权连通图 测试所用图 所用原图及生成过程 其中,(a) 为原图,圆圈里面是节点的名称,边上的数字是边的权值.由实 ...
- CenterNet算法详解
Objects as Points-论文链接-代码链接 目录 1.需求解读 2.CenterNet算法简介 3.CenterNet算法详解 3.1 CenterNet网络结构 3.2 CenterNe ...
- kmeans聚类算法matlab_KMeans聚类算法详解
"如果把人工智能比作一块大蛋糕,监督学习只是上面的一层奶油". 日常生活中,从人脸识别.语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地.尽管全球每日新增数据量以 ...
- 新颖性搜索(Novelty Search,NS)算法详解与实现
新颖性搜索(Novelty Search,NS)算法详解与实现 基于目标的进化算法的缺点 新颖性搜索与自然进化 新颖性指标 算法描述 新颖性搜索算法实践 基于目标的进化算法的缺点 大多数机器学习方法( ...
- 离线强化学习(Offline RL)系列3: (算法篇) IQL(Implicit Q-learning)算法详解与实现
[更新记录] 论文信息:Ilya Kostrikov, Ashvin Nair, Sergey Levine: "Offline Reinforcement Learning with Im ...
- 3. KNN最近邻算法详解与关键技术剖析(理论篇)
一.KNN算法概述 K最近邻(K-Nearest-Neighbour,KNN)算法可以说是最简单的分类算法,易于理解,其核心思想就是距离的比较,即离谁最近,就被归类于谁(群体投票的方式). 通俗解释: ...
- GrabCut算法详解:从GMM模型说起
GrabCut算法详解:从GMM模型说起 最近正在学习CG,争取有时间就看点论文写写代码. GrabCut在OpenCv里面是有内置函数的,不过我还是用C++纯手工实现了一边原汁原味的论文,githu ...
- 相位 unwrap 与 wrap 算法详解(附代码)
相位 unwrap 与 wrap 算法详解(附代码) 最近接手了一个项目,光通信方面的,我负责编写初测结果的数据处理算法,其中有一个算法叫做 unwrap 与 wrap,之前没有听说过.通过询问同事与 ...
最新文章
- Python基础总结(3)
- Stream流与Lambda表达式(四) 自定义收集器
- C# chart控件基础使用
- 【例题 6-6 UVA - 679】Dropping Balls
- Kconfig文件结构(图文)简介
- request用法_虚拟语气用法总结
- 苹果推送通知服务(APNs)编程(转)详细步骤
- css3中的文字效果
- MEncoder的基础用法—6.7. 媒体流复制
- 论文阅读笔记(六)——GhostNet: More Features from Cheap Operations
- 《线性代数》 李炯生\查建国\王新茂 中国科学技术大学 第2版 部分习题答案
- 什么时候使用PD和PI——基于平衡小车分析
- SCI投稿如何选择目标期刊
- 电脑启动快捷键一览表
- 沐阳JP1081B USB转网口 内核选项
- LeetCode题目笔记——292. Nim 游戏 (脑筋急转弯C++/Python)
- 论文阅读训练(13)
- objective_c札记
- python求向量长度_得到向量的大小(x,y)
- 解决$emit第一次触发事件失效问题