C++后端面试|笔试基础(2):欧式距离 曼哈顿距离等

本文整理不全,整理了面试中问到的问题,没问到的留存以后整理;
其他请参考

1.欧式距离

在这里插入图片描述

2.曼哈顿距离

在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点之前的直线距离。这个实际的驾驶距离就是"曼哈顿距离"。曼哈顿距离也称“城市街区距离”。

在这里插入图片描述
在这里插入图片描述

2.1 最小曼哈顿距离

最小曼哈顿距离是个经常考察到的点。

例题:一排树,1·····N,中间选取一棵树,使得该树到其他所有树的距离和最小

一般来说,上面这种问题就是最小曼哈顿距离。
最小曼哈顿距离有个"定理":
可以使曼哈顿距离取最小值的元素为中位数,不过可以统一选择排序之后的第n/2+1个元素,奇偶均如此

证明请移步文章

2.2 最小曼哈顿距离(高阶)

主要针对权重问题,每个点除了坐标外,还都附带一个权重w,求使∑wi∣xi−a∣最小的点a。
看看使距离最小的点在什么位置。在此我们直接考虑n个点确定的连续区间。假定给n个点已排序,给定点c满足xk≤c<xk+1xk​≤c<xk+1​我们求

所以针对带权曼哈顿距离,我们需要做的就是将n个点排序,然后累加权重直到左侧权重大于右侧权重停止,此时就是使距离最小的位置。特别地,当n个点的权重均为正,且和为1时,分界点就是累加之后权重之和超过0.5的位置,这个位置被称为带权中位数(详细定义请参考算法导论)。

猜你喜欢

转载自blog.csdn.net/CoomCon/article/details/107506592