曼哈頓距離與切比雪夫距離的互化

2022-03-30 02:06:48 字數 2260 閱讀 2646

\(\\\)

對於兩個點\((x_1,y_1),(x_2,y_2)\),定義他們的曼哈頓距離為\(|x_1-x_2|+|y_1-y_2|\),即兩座標軸分別討論差值再求和。

對於曼哈頓距離相同的點,他們分布在同一橫縱截距且截距相同的直線上。

圖中每乙個正方形邊界上的整點到原點的曼哈頓距離相同。

\(\\\)

對於兩個點\((x_1,y_1),(x_2,y_2)\),定義他們的曼哈頓距離為\(max\\),即兩座標軸分別討論差值取最大。

對於切比雪夫距離相同的點,他們分布在以原點為中心的正方形邊界上。

圖中每乙個正方形邊界上的整點到原點的曼哈頓距離相同。

\(\\\)

考慮曼哈頓距離的表示式:\(|x_1-x_2|+|y_1-y_2|\),其實可以表示成:

\(\beginmax\\end\)

考慮將兩個點變化為\((x_1+y_1,x_1-y_1),(x_2+y_2,x_2-y_2)\)

那麼變化後兩點的切比雪夫距離為\(max((|(x_1+y_1)-(x_2+y_2)|,|(x_1-y_1)-(x_2-y_2)|)\)

若原來兩點曼哈頓距離為\(x_1-x_2+y_1-y_2\)或\(x_2-x_1+y_2-y_1\)時,都可以表示為\(|(x_1+y_2)-(x_2+y_2)|\)

若原來兩點曼哈頓距離為\(x_1-x_2+y_2-y_1\)或\(x_2-x_1+y_1-y_2\)時,都可以表示為\(|(x_1-y_1)-(x_2-y_2)|\)

將每乙個點\((x,y)\)轉化為\((x+y,x-y)\),新座標系下的切比雪夫距離即為原座標系下曼哈頓距離。

\(\\\)

按照剛才的思路再還原回去即可。

將每乙個點\((x,y)\)轉化為\((\frac,\frac)\),新座標系下的曼哈頓距離即為原座標系下切比雪夫距離。

這個轉化一般比較常用,曼哈頓距離一般可以通過排序字首和的方式降低計算複雜度。

注意到除法如果向下取整可能會使答案不正確,所以考慮先不除以\(2\),最後求完答案再除以\(2\)也是一樣的,形象的理解可以說成,曼哈頓座標系是通過切比雪夫座標系旋轉\(45^\)後,再縮小到原來的一半得到的。

\(\\\)

有\(n\)個二位平面上的點,定義每乙個點到其八連通的點的距離為\(1\)。

選乙個點,使得剩下所有點到該點的距離之和最小,求出這個距離之和。

\(\\\)

題意即為求切比雪夫距離之和最小,暴力的做法是\(n^2\)的。

考慮將切比雪夫距離轉化為曼哈頓距離,我們將橫縱座標分開排序求字首和,這樣既可快速求出,以乙個點為中心,其他點到這個點的曼哈頓距離之和。

具體的做法是將兩個座標分開討論,每次找到當前點在排序後陣列的位置\(p\)。

那麼它前面的點座標都小於當前點,累加的答案為\(p\times x[i]-sum_p\)。

後面的點的座標都大於當前點,反過來累加答案,為\((sum_n-sum_p)-(n-p)\times x[i]\)

對所有的點都求一遍,取最小值即可,複雜度\(\text o(nlogn)\)。

\(\\\)

#include#include#include#include#include#include#include#define n 100010

#define r register

#define gc getchar

#define inf 900000000000000000

using namespace std;

typedef long long ll;

inline ll rd()

while(isdigit(c))

return f?-x:x;

}ll n,ans=inf,x[n],y[n],sx[n],sy[n],sumx[n],sumy[n];

int main()

sort(sx+1,sx+1+n);

sort(sy+1,sy+1+n);

for(r ll i=1;i<=n;++i)

for(r ll i=1,res;i<=n;++i)

printf("%lld\n",ans);

return 0;

}

1012 曼哈頓距離 切比雪夫距離

什麼是切比雪夫距離?什麼是曼哈頓距離?傻傻分不清,沒關係,看 曼哈頓距離設平面空間內存在兩點,它們的座標為 x1,y1 x2,y2 則dis x1 x2 y1 y2 即兩點橫縱座標差之和 切比雪夫距離 設平面空間內存在兩點,它們的座標為 x1,y1 x2,y2 則dis max x1 x2 y1 y...

總結 曼哈頓距離轉切比雪夫距離

我們在用二維樹狀陣列的時候,可以得到乙個邊與座標軸平行的矩形內點集的資訊。如果我們需要得到得到到乙個點的距離小於等於k的點的資訊呢。這些點構成的不在是邊也座標軸平行的矩形,而是乙個對角線與座標軸平行的菱形。可以通過轉化,使得整個座標軸旋轉45 然後我們菱形變成了方方正正的矩形,又可以用而二維樹狀陣列...

曼哈頓距離和切比雪夫距離轉化

曼哈頓距離和切比雪夫距離 兩個點的距離定義為點 x,y 和它周圍的 8 個點 x 1,y x 1,y x,y 1 x,y 1 x 1,y 1 x 1,y 1 x 1,y 1 x 1,y 1 距離為 1 用下 gyx 學長的圖 切比雪夫距離 dis max delta x,delta y delta ...