Ma trận chi phí căn chỉnh chuỗi thời gian Dynamic Time Warping (DTW)
Viết hàm dynamic_time_warping_distance(s1: np.ndarray, s2: np.ndarray) -> tuple[float, np.ndarray]:
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: time series, 2d arrays, dp.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu giải thuật Dynamic Time Warping (DTW) để so sánh độ tương đồng giữa 2 chuỗi thời gian có độ dài hoặc tốc độ biến thiên khác nhau.
- Tính toán ma trận khoảng cách cục bộ bằng broadcasting 2D thuần vector hóa (s1[:, None] - s2[None, :]) ** 2.
- Xây dựng bảng quy hoạch động tích lũy chi phí tối ưu (Accumulated Cost Matrix).
Mô tả bài toán
Viết hàm dynamic_time_warping_distance(s1: np.ndarray, s2: np.ndarray) -> tuple[float, np.ndarray]:
- s1: Mảng 1D chuỗi thời gian thứ nhất độ dài N.
- s2: Mảng 1D chuỗi thời gian thứ hai độ dài M.
- Kiểm tra tính hợp lệ:
- Nếu len(s1) == 0 hoặc len(s2) == 0, raise ValueError("Chuoi thoi gian khong duoc rong").
- Tính ma trận chi phí cục bộ:
D = (s1[:, np.newaxis] - s2[np.newaxis, :])2 có kích thước (N, M).
- Bảng chi phí tích lũy cost kích thước (N, M):
- cost[0, 0] = D[0, 0].
- Cột đầu tiên: cost[i, 0] = cost[i - 1, 0] + D[i, 0] với i = 1, …, N-1.
- Hàng đầu tiên: cost[0, j] = cost[0, j - 1] + D[0, j] với j = 1, …, M-1.
- Các ô còn lại (i ≥ 1, j ≥ 1):
cost[i, j] = D[i, j] + min(cost[i - 1, j], cost[i, j - 1], cost[i - 1, j - 1]).
- Trả về tuple (dtw_dist, cost):
- dtw_dist = float(cost[N - 1, M - 1]).
- cost: ma trận tích lũy (N, M).
Input
- Tham số: s1: np.ndarray, s2: np.ndarray.
Output
- Trả về: tuple[float, np.ndarray].
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
dynamic_time_warping_distance(s1=[1.0, 2.0, 3.0], s2=[1.0, 2.0, 3.0])
Output
0.0
Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
dynamic_time_warping_distance(s1=[1.0, 2.0, 3.0], s2=[2.0, 2.0, 2.0, 3.0, 4.0])
Output
2.0
Giải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
