【算法,数学知识】曼哈顿距离

关于曼哈顿距离,假设有两个点(x_0, y_0), (x_1, y_1)

那么曼哈顿距离就是:|x_0 - x_1| + |y_0 - y_1|

这个曼哈顿距离是一个交叉信息项,也就是知道一个点,是无法求出这个值的。也就是需要 O(N ^ 2)。

那么如何降低求的时间复杂度呢,曼哈顿距离有一个转换形式:

Proof:

|x_0-x_1|=max(x_0-x_1,x_1-x_0)

|y_0-y_1|=max(y_0-y_1,y_1-y_0)

|x_0-x_1|+|y_0-y_1|=max(x_0-x_1,x_1-x_0)+max(y_0-y_1,y_1-y_0)=max((x_0-x_1)+(y_0-y_1),(x_0-x_1)+(y_1-y_0),(x_1-x_0)+(y_0-y_1),(x_1-x_0)+(y_1-y_0))

 

所以,我们要求 N 个点的最大曼哈顿距离,那么就是求所有的 (+x+y, +x - y, - x + y, -x -y)四种情况中,每种情况的最大差(也就是每种情况求其最大值和最小值,作差),这样子,时间复杂的就降低为了 O(4 * N)。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值