1. 程式人生 > >多維曼哈頓距離的計算

多維曼哈頓距離的計算

這篇寫的不錯:

題意

給出五維空間 N 個點的座標,求其中兩點的最大曼哈頓距離。

思路

我們可以定義曼哈頓距離的正式意義為L1-距離城市區塊距離,也就是在歐幾里得空間的固定直角座標系上兩點所形成的線段對軸產生的投影的距離總和。

img

例如在平面上,座標 (x1,y1) 的點 P1 與座標 (x2,y2)的點 P2的曼哈頓距離為: |x1−x2|+|y1−y2|

在二維平面中,設距離最遠的兩點座標為 (a1,b1) (a2,b2) 則其曼哈頓距離為: |a1−a2|+|b1−b2|

去掉絕對值便有四種形式:

  • (a1−a2)+(b1−b2)
  • (a1−a2)+(b2−b1)
  • (a2−a1)+(b1−b2)
  • (a2−a1)+(b2−b1)

可以對上面的式子變形整理一下轉化為:

  • (a1+b1)−(a2+b2)
  • (a1−b1)−(a2−b2)
  • (−a1+b1)−(−a2+b2)
  • (−a1−b1)−(−a2−b2)

我們發現每一項對應座標的符號都相同,於是可以假設 1 代表正號, 0 代表負號,於是 (a1+b1) 可以表示為 11 。

要表示空間中所有狀態,只需要用 0~1<<dem 的所有二進位制便可以啦~

於是對所有的點,求出上面的那四種轉化過的形式,記錄每種狀態的最小值與最大值,列舉找最大差值即可。

總結:

就是一個超級暴力的列舉每種情況的計算吧。。