曼哈顿距离

两点间的曼哈顿距离d = | x1 - x2 | + | y1 - y2 |

两点间的欧氏距离d = sqrt( (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) )

其中打印菱形可以用曼哈顿距离很好的解决

代码如下:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin >> n;
    int x = n / 2, y = n / 2;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            if(abs(i - x) + abs(j - y) <= n / 2)cout << "*";
            else cout << " ";
        }
        cout << endl;
    }
    return 0;
}

 数字代表距离中心点的距离,要打印五阶菱形,只需曼哈顿距离小于5/2即可。

要想打印出n阶菱形,只需要将与原点距离的曼哈顿距离为小于等于 n/2(向下取整)。

提供的引用内容未提及曼哈顿距离转化的方法和原理。曼哈顿距离本身是一种用于测量两个点在多维空间中的距离距离度量方法,得名于曼哈顿的街区布局,交叉点的距离通常通过水平和垂直路线测量[^1]。 一般而言,曼哈顿距离在二维空间中,对于两点 \(P_1(x_1,y_1)\) 和 \(P_2(x_2,y_2)\),其计算公式为 \(d = |x_1 - x_2|+|y_1 - y_2|\)。在多维空间中,若有两点 \(A=(a_1,a_2,\cdots,a_n)\) 和 \(B=(b_1,b_2,\cdots,b_n)\),曼哈顿距离 \(d=\sum_{i = 1}^{n}|a_i - b_i|\) 。 对于曼哈顿距离的转化,从原理上可能是为了适应特定的应用场景或算法需求。例如在某些机器学习算法中,可能需要将曼哈顿距离转化为一种更易于计算或比较的形式。一种常见的转化方式是归一化,原理是将距离值映射到一个特定的区间,如 \([0,1]\) ,方法可以使用最小 - 最大归一化,公式为 \(d_{normalized}=\frac{d - d_{min}}{d_{max}-d_{min}}\) ,其中 \(d\) 是原始的曼哈顿距离,\(d_{min}\) 和 \(d_{max}\) 分别是数据集中曼哈顿距离的最小值和最大值。 ```python import numpy as np def manhattan_distance(point1, point2): return np.sum(np.abs(np.array(point1) - np.array(point2))) def min_max_normalization(distance, min_distance, max_distance): return (distance - min_distance) / (max_distance - min_distance) # 示例数据 point_a = [1, 2, 3] point_b = [4, 5, 6] # 计算曼哈顿距离 distance = manhattan_distance(point_a, point_b) # 假设已知最小和最大距离 min_dist = 0 max_dist = 10 # 归一化曼哈顿距离 normalized_distance = min_max_normalization(distance, min_dist, max_dist) print("原始曼哈顿距离:", distance) print("归一化后的曼哈顿距离:", normalized_distance) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值