Метрики

Метрика определяет расстояние между двумя точками. Обычное евклидово расстояние между точками \((x_1, y_1)\) и \((x_2, y_2)\) равно

 

\(\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}.\)

 

Манхэттенское расстояние между точками \((x_1, y_1)\) и \((x_2, y_2)\) вычисляется по формуле

 

\(|x_1 - x_2| + |y_1 - y_2|\)

 

На рисунке ниже евклидово расстояние между точками равно

 

\(\sqrt{(5 - 2)^2 + (2 - 1)^2} = \sqrt{10},\)

 

а манхэттенское расстояние между ними же равно

 

\(|5 - 2| + |2 - 1| = 4.\)

 

Две метрики

 

На рисунке ниже показано, как выглядят единичные круги – множества точек, удаленных от центра на расстояние, не большее \(1\), – при использовании евклидовой и манхэттенской метрик.

 

Единичные круги

 

Некоторые задачи проще решить, если использовать манхэттенское, а не евклидово расстояние. Например, пусть дано множество точек на плоскости и требуется найти пару точек, для которых манхэттенское расстояние максимально. Так, на рисунке ниже манхэттенское расстояние между точками \(B\) и \(C\) максимально и равно \(5\).

 

Манхэттенское расстояние между точками B и C максимально

 

При работе с манхэттенским расстоянием бывает полезно применить преобразование координат \((x, y) \to (x + y, y − x)\). При этом происходят поворот на \(45^{\circ}\) и масштабирование. На рисунке ниже показан результат этого преобразования в нашем примере.

 

Максимальное манхэттенское расстояние после преобразования координат

 

Рассмотрим теперь две точки \(p_1 = (x_1, y_1) \) и \(p_2= (x_2, y_2) \), которые после преобразования перешли в \(p'_1 = (x'_1, y'_1)\) и \(p'_2 = (x'_2, y'_2)\). Манхэттенское расстояние между \(p_1\) и \(p_2\) можно выразить двумя способами:

 

\(|x_1 - x_2| + |y_1 - y_2| = max(|x'_1 - x'_2|, |y'_1 - y'_2|)\)

 

Например, если \(p_1 = (1, 0)\) и \(p_2 = (3, 3)\), то преобразованные координаты равны \(p'_1 = (1, -1)\) и \(p'_2 = (6, 0)\), а манхэттенское расстояние

 

\(|1 - 3| + |0 - 3| = max(|1 - 6|, |-1 - 0|) = 5.\)

 

Преобразование координат дает простой способ работать с манхэттенскими расстояниями, потому что координаты x и y можно рассматривать порознь. В частности, чтобы максимизировать манхэттенское расстояние, необходимо найти такие две точки, что их преобразованные координаты доставляют максимум величине

 

\(max(|x'_1 - x'_2|, |y'_1 - y'_2|).\)

 

Это легко, потому что должна быть максимальна разность горизонтальных или вертикальных координат после преобразования.

Пример 1

Найдите евклидово расстояние между точками \(p_1\) и \(p_2\).

from math import dist

p1 = list(map(int, input().split()))
p2 = list(map(int, input().split()))
d1 = dist(p1, p2) # с использованием функции dist
d2 = ((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) ** 0.5 # по формуле
print(f"{d1:.2f}\n{d2:.2f}")
2 1
5 2
3.16
3.16

Пример 2

Найдите манхэттенское расстояние между точками \(p_1\) и \(p_2\).

p1 = list(map(int, input().split()))
p2 = list(map(int, input().split()))
d = abs(p1[0] - p2[0]) + abs(p1[1] - p2[1])
print(f"{d}")
2 1
5 2
4

Практические задания