最远曼哈顿距离

转载自:http://www.cppblog.com/sonicmisora/archive/2009/09/14/96143.aspx

最远哈密顿距离:
看了很久才懂。二维情况是:
对于两个点A(x1,y1),B(x2,y2)(论文里标号很奇怪我给改回来)。因为是绝对值,所以|x1-x2|+|y1-y2|就是
(x1-x2)+(y1-y2)
-(x1-x2)+(y1-y2)
(x1-x2)-(y1-y2)
-(x1-x2)-(y1-y2)
必然是这4个式子中MAX的那个。那么最后答案就是所有这种式子中最大的那个。
注意到对于每个相对应的x1 x2,y1 y2他们的符号总是相反的,所以可以花2^2的数组存下每个对于每个点X,Y的符号(因为变化的总是这些XYZ的符号)。那么这个就是可以用A[N][4]的数组存下,然后比如0代表+,1代表-的话,那么对于点1(x1,y1)和点2(x2,y2)他们的式子就是
A[1][0]-A[2][0]
A[1][1]-A[2][1]
A[1][2]-A[2][2]
A[1][3]-A[2][3]
然后问题就变得简单了,扫一遍,对于每个I,求出A[*][I]的最大值MAX(I)最小值MIN(I),再用MAX(I)-MIN(I)就可以得到对于I来说的最大值了。最后取个总的最大值,就是答案。可以很容易推广到多维。维数是D的话复杂度是O(N*2^D)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值