Hàm tính khoảng cách Minkowski
View as PDF Time limit: 1.0s , Memory limit: 256M , Points: 1
Khoảng cách Minkowski trong không gian 3 chiều
Cho hai điểm \(A(x₁, y₁, z₁)\) và \(B(x₂, y₂, z₂)\) trong không gian 3 chiều. Khoảng cách Minkowski bậc giữa chúng là:
\(d_p(A, B) = ( |x₁ - x₂|^p + |y₁ - y₂|^p + |z₁ - z₂|^p )^{1/p}\) với
Đây là một "họ" khoảng cách, tùy giá trị mà ta được các khoảng cách quen thuộc:
: Khoảng cách Manhattan \(|x₁ - x₂| + |y₁ - y₂| + |z₁ - z₂|\)
: Khoảng cách Euclid
- \(p = ∞\): Khoảng cách Chebyshev \(max(|x₁ - x₂|, |y₁ - y₂|, |z₁ - z₂|)\)
Lưu ý: Nếu
thì công thức trên không còn là một khoảng cách hợp lệ, khi đó in ra
Khong hop le.
Yêu cầu:
Viết chương trình Python nhập vào hai điểm và nhiều giá trị , với mỗi
in ra khoảng cách Minkowski bậc
giữa hai điểm. Bắt buộc chia chương trình thành các hàm sau:
| Hàm | Tham số | Giá trị trả về |
|---|---|---|
hieu_tuyet_doi(u, v) |
hai số thực u, v |
giá trị |u - v| |
minkowski(x1, y1, z1, x2, y2, z2, p=2) |
tọa độ hai điểm và số thực p (mặc định p = 2) |
khoảng cách Minkowski bậc p (giả sử p hữu hạn và p ≥ 1) |
chebyshev(x1, y1, z1, x2, y2, z2) |
tọa độ hai điểm | khoảng cách Chebyshev |
khoang_cach(x1, y1, z1, x2, y2, z2, p) |
tọa độ hai điểm và số thực p |
khoảng cách bậc p; trả về None nếu p < 1; dùng chebyshev nếu p là vô cùng |
Yêu cầu thêm:
minkowskivàchebyshevphải gọi lại hàmhieu_tuyet_doiđể tính độ lệch trên từng trục.khoang_cachlà hàm duy nhất được gọi trực tiếp từmain; nó chịu trách nhiệm chọn hàm phù hợp để tính.
Gợi ý: Python nhận được vô cùng bằng float("inf"), và kiểm tra bằng math.isinf(p).
Khung chương trình gợi ý:
import math
def hieu_tuyet_doi(u, v):
# TODO
pass
def minkowski(x1, y1, z1, x2, y2, z2, p=2):
# TODO
pass
def chebyshev(x1, y1, z1, x2, y2, z2):
# TODO
pass
def khoang_cach(x1, y1, z1, x2, y2, z2, p):
# TODO
pass
def main():
x1, y1, z1 = map(float, input().split())
x2, y2, z2 = map(float, input().split())
q = int(input())
for i in range(q):
p = float(input())
# TODO: gọi khoang_cach và in kết quả
main()
Input:
- Dòng thứ nhất chứa ba số thực \(x₁, y₁, z₁\) là tọa độ điểm
.
- Dòng thứ hai chứa ba số thực \(x₂, y₂, z₂\) là tọa độ điểm
.
- Dòng thứ ba chứa số nguyên
là số truy vấn.
dòng tiếp theo, mỗi dòng chứa một giá trị
: hoặc là số thực
, hoặc là chữ
inf(nghĩa là vô cùng).
Các tọa độ thỏa mãn .
Output:
- Với mỗi truy vấn, in ra một dòng chứa khoảng cách bậc
giữa
và
, làm tròn đến
chữ số thập phân.
- Nếu
thì in:
Khong hop le
Ví dụ
Sample Input 1
1 2 3
4 6 8
4
1
2
3
inf
Sample Output 1
12.000
7.071
6.000
5.000
Sample Input 2
0 0 0
1 1 1
2
0.5
2
Sample Output 2
Khong hop le
1.732
Comments