Thuật toán Ứng dụng — DP, String, Big Data & hơn nữa
~30 phútQuyết định dưới constraint — DP, Greedy, BacktrackingAll-Access

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: ci là giá chèn một ký tự vào s, cd là giá xoá một ký tự của s, cr là giá thay một ký tự của s bằng ký tự khác.
  • Output: tổng giá nhỏ nhất của một dãy phép sửa biến s thành t.
  • Ký tự khớp nhau thì không tốn gì. Chiều biến đổi là s thành t: ci luôn tính cho ký tự có trong t mà 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.

stcicdcrExpectedGiải thích
"horse""ros"1124Dã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"2516Chèn 3 ký tự, mỗi ký tự 2
"abc"""25115Xoá 3 ký tự, mỗi ký tự 5
"ab""ba"1354Giữ 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"4970Giố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á

Đã mua? Đăng nhập để đọc tiếp

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

Bài tiếp theo

Case study: LCS trong git diff và Huffman trong gzip