最远曼哈顿距离

转载自: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)。

你可能感兴趣的:(最远曼哈顿距离)