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

DP hai chiều — LCS và Edit Distance: bảng dp[i][j] và truy vết

LCS và Edit Distance dùng bảng 2D dp[i][j], state là hai prefix. Nắm transition, điền bảng, truy vết reconstruct — ứng dụng trong diff tool và spell-checker.

TL;DR: Longest Common Subsequence (LCS) và Edit Distance (Levenshtein) đều dùng bảng DP hai chiều dp[i][j] với state là "đã xử lý i ký tự đầu của chuỗi X và j ký tự đầu của chuỗi Y". LCS lấy dp[i-1][j-1] + 1 khi ký tự khớp, ngược lại max của ô trên và ô trái. Edit Distance lấy dp[i-1][j-1] khi khớp, ngược lại 1 + min của ba ô lân cận (delete/insert/replace). Truy vết ngược từ dp[m][n] về (0,0) để dựng lại chuỗi chung hoặc chuỗi thao tác.

Git hiển thị diff giữa hai file: dòng nào thêm, dòng nào xóa, dòng nào giữ nguyên. Spell-checker gợi ý "python" khi bạn gõ "pyhton". Cả hai bài toán này có chung cấu trúc: so sánh hai chuỗi và đo độ giống nhau. DP 2D giải cả hai trong O(mn), và là nền tảng của diff, git merge và autocorrect trong mọi editor.

Bài này xây trên DP Framework và DP 1D: vẫn quy trình 5 bước, state giờ có hai chiều (i, j).

1. Hình dung: so sánh hai bài văn

Hình dung hai giáo viên cùng chấm bài, ghi vào bảng: "đến câu i của A và câu j của B, hai bài giống nhau được bao nhiêu phần?"

Chuyện chấm bàiTrong DP
Hai bài văn A và Bhai chuỗi X và Y
Câu thứ i của A, câu thứ j của Bký tự X[i], Y[j]
Một ô trong bảng chấmdp[i][j]: kết quả tốt nhất cho i ký tự đầu của X và j ký tự đầu của Y
Kết luận cho cả hai bàiô cuối dp[m][n]
Ba ô lân cận, ba thao tác

Mỗi ô dp[i][j] nhìn ba ô: trên (dp[i-1][j], xóa ký tự khỏi X), trái (dp[i][j-1], chèn ký tự vào X) và chéo (dp[i-1][j-1], khớp hoặc thay).

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

Bài toán cái túi — 0/1 Knapsack, Unbounded và nén bộ nhớ