Imprima os três resultados, cada um em uma linha, formatados com duas casas decimais, na ordem: Euclidiana, City‑block, Chessboard.
📌 Importante:
Utilize as funções matemáticas padrão da sua linguagem: math.sqrt, abs (ou fabs) e max.
A saída deve conter apenas os números (um por linha), sem textos adicionais.
Ver um simulador interativo para esta questão na Figura 1.11 (gráfico com arrasto dos pontos e visualização das três métricas).
1.17.1.1 🖼️ Por que isso importa? – Custo computacional
Em uma imagem 1000×1000 pixels (1 milhão de pixels), calcular a distância de cada pixel a um ponto de referência exige 1 milhão de operações. A escolha da métrica afeta o desempenho:
Métrica
Operações por pixel
Custo relativo (1M pixels)
Quando usar
Euclidiana (L2)
2 subtrações, 2 multiplicações, 1 soma, 1 sqrt
🔴 Mais custosa – sqrt é cara
Distância “real” no espaço contínuo
City‑block (L1)
2 subtrações, 2 abs, 1 soma
🟡 Moderada – sem raiz quadrada
Grids, robótica, imagens binárias
Chessboard (L∞)
2 subtrações, 2 abs, 1 max
🟢 Mais eficiente
Movimentos de peças, morfologia
A função sqrt é computacionalmente mais cara que operações como adição, subtração, multiplicação e valor absoluto. Em CPUs modernas, a diferença pode ser pequena (cerca de 1,5× a 3×), mas em sistemas embarcados ou em laços de milhões de iterações, qualquer ganho importa. Por isso, quando o objetivo é apenas comparar distâncias (ex.: encontrar o ponto mais próximo), use a distância euclidiana ao quadrado.
1.17.1.2 📋 Tarefa (especificação para VPL)
Entrada:
Uma única linha com quatro números reais: Ax Ay Bx By
Saída:
Três linhas, cada uma com um número real de duas casas decimais (Euclidiana, City‑block, Chessboard).
1.17.1.3 📌 Exemplos
Entrada
Saída
Observação
0 0 3 4
5.00 7.00 4.00
Triângulo 3‑4‑5
0 0 1 1
1.41 2.00 1.00
Diagonal unitária
Exemplo de teste de sqrt em Python, com timeit isolando cada operação:
import mathimport timeitN =50_000_000def apenas_soma(): a, b =3.0, 4.0return a + bdef soma_e_sqrt(): a, b =3.0, 4.0return math.sqrt(a*a + b*b)t_soma = timeit.timeit(apenas_soma, number=N)t_sqrt = timeit.timeit(soma_e_sqrt, number=N)print(f"Soma simples : {t_soma:.3f} s")print(f"Soma + sqrt : {t_sqrt:.3f} s")print(f"Razão (sqrt/soma) : {t_sqrt/t_soma:.2f}x")
Soma simples : 2.955 s
Soma + sqrt : 4.853 s
Razão (sqrt/soma) : 1.64x
🎮 Simulador EP01_01: Métricas de Distância no Espaço DiscretoEuclidiana vs City-block vs Chessboard
Clique e arraste os pontos A ou B no plano cartesiano ou ajuste suas coordenadas abaixo para comparar as três métricas de distância em tempo real.
📐 EUCLIDIANA (L2)
5.00
√(Δx² + Δy²)
🧱 CITY-BLOCK (L1)
7.00
|Δx| + |Δy|
🏁 CHESSBOARD (L∞)
4.00
max(|Δx|, |Δy|)
👆 Arraste os pontos A (Roxo) ou B (Laranja) na grade.
Ponto A
Ponto B
Legenda Geométrica: Linha tracejada (Euclidiana), Caminho ortogonal em L (City-block) e Destaque da dimensão máxima (Chessboard).
Euclidiana City-block Chessboard (Máx)
Figura 1.11: Simulador EP01_01: Distâncias Euclidiana, City-block e Chessboard