Mini-challenge Edit Distance có trọng số: chi phí sửa không đối xứng
Cài editDistance(s, t, ci, cd, cr) với giá chèn, xoá, thay khác nhau. Bẫy nằm ở base case và hướng của phép chèn/xoá, không ở công thức quen thuộc.
Bài 03 cho edit distance với mọi phép giá 1. Thực tế thì không phép nào ngang giá nhau. Bàn phím hay gõ thiếu chữ hơn gõ thừa chữ, nên autocorrect coi "thiếu một ký tự" rẻ hơn "thừa một ký tự". diff tính thay một dòng bằng dòng khác là hai việc (xoá rồi thêm), không phải một. Sinh học thì cho mỗi cặp base thay nhau một mức phạt riêng. Tất cả đều là cùng một bảng DP, chỉ khác ba con số.
Thử thách này đổi ba con số đó thành tham số. Đề nghe gần như bài 03, nhưng lời giải cũ chép lại sẽ sai ở hai chỗ mà test vector bên dưới được chọn để bắt.
Dành 20 đến 25 phút tự cài đặt trước khi xem gợi ý. Chưa quen mổ xẻ đề bài thì ôn lại đọc đề bài trước khi viết dòng code đầu tiên.
Đề bài
Viết hàm editDistance(s, t, ci, cd, cr):
- Input: hai chuỗi
s,t(mỗi chuỗi tối đa 1000 ký tự) và ba số nguyên không âm:cilà giá chèn một ký tự vàos,cdlà giá xoá một ký tự củas,crlà giá thay một ký tự củasbằng ký tự khác. - Output: tổng giá nhỏ nhất của một dãy phép sửa biến
sthànht. - Ký tự khớp nhau thì không tốn gì. Chiều biến đổi là
sthànht:ciluôn tính cho ký tự có trongtmà thiếu ởs.
Test cases
Hai dòng chuỗi rỗng là ca biên cũng là base case của bảng. Cách liệt kê ca như vậy nằm ở bài edge case.
s | t | ci | cd | cr | Expected | Giải thích |
|---|---|---|---|---|---|---|
"horse" | "ros" | 1 | 1 | 2 | 4 | Dãy con chung dài nhất chỉ có 2 ký tự, nên phải xoá 3 và chèn 1, thay không rẻ hơn |
"" | "abc" | 2 | 5 | 1 | 6 | Chèn 3 ký tự, mỗi ký tự 2 |
"abc" | "" | 2 | 5 | 1 | 15 | Xoá 3 ký tự, mỗi ký tự 5 |
"ab" | "ba" | 1 | 3 | 5 | 4 | Giữ một ký tự chung, xoá 1 ký tự (3), chèn 1 ký tự (1). Thay cả hai ký tự tốn tới 10 |
"abc" | "abc" | 4 | 9 | 7 | 0 | Giống hệt thì không tốn gì, bất kể giá |
Hai dòng 2 và 3 chỉ khác nhau hướng biến đổi, nhưng đáp án lệch nhau 9. Nếu cả hai ra cùng một số, bạn đã lẫn chèn với xoá.
All-Access Pass
Phần còn lại của bài dành cho All-Access Pass
Bạn vừa đọc phần xem trước. Hai bài đầu của mỗi khoá luôn đọc trọn miễn phí.
- Đọc trọn mọi bài trong 6 khoá System Design và dữ liệu phân tán
- AI Mentor trả lời theo toàn bộ nội dung bài
- Trả một lần, không tự gia hạn, không tự trừ tiền
Trọn đời
1.690.000 ₫
Trả một lần, dùng mãi mãi
Gói năm
699.000 ₫
365 ngày · ≈ 58.000 ₫/tháng
Thanh toán bằng thẻ Visa/Master/JCB qua Polar. Xem bảng giá
Backtracking và cắt tỉa — Permutations, N-Queens, pruning
Bài tiếpCase study: LCS trong git diff và Huffman trong gzip
Bài này có giúp bạn hiểu bản chất không?
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Thảo luận & góp ý
Hỏi đáp về bài này