Trong tiếng Việt, chỉ một dấu thanh cũng đủ đổi hẳn nghĩa của một từ: "ma", "má", "mã", "mà", "mả", "mạ" là sáu từ hoàn toàn khác nhau, khác nhau đúng một dấu. Vì vậy khi so sánh văn bản tiếng Việt, một thay đổi trông "nhỏ" ở cấp ký tự — chỉ một dấu thanh — lại có thể là thay đổi ý nghĩa lớn nhất trong cả câu, dù diff theo dòng sẽ chỉ đánh dấu cả dòng đó là "đã đổi" mà không chỉ rõ đâu là điểm khác biệt thật sự.
Dãy con chung dài nhất
Cách tiếp cận diff cổ điển dựa trên việc tìm dãy con chung dài nhất (LCS) của các dòng giữa hai phiên bản văn bản. Các dòng thuộc dãy con này được coi là không thay đổi; mọi thứ khác được đánh dấu là đã bị xóa khỏi phiên bản cũ hoặc thêm vào phiên bản mới. Kết quả là tập hợp thay đổi tối thiểu, không phải bất kỳ trình tự xóa và thêm nào tình cờ hoạt động được.
Cách đọc kết quả
Các dòng bị xóa thường được đánh dấu bằng - màu đỏ, các dòng được thêm bằng + màu xanh. Một dòng "thay đổi" theo nghĩa thông thường thực chất được hiển thị là xóa dòng cũ cộng với thêm dòng mới — diff không có khái niệm riêng cho việc chỉnh sửa một dòng tại chỗ.
Vì sao so sánh từng dòng không phải lúc nào cũng trực quan
Chèn một dòng mới vào giữa văn bản có thể khiến so sánh từng dòng báo rằng mọi dòng tiếp theo đều "thay đổi", vì thuật toán không phải lúc nào cũng phân biệt được việc chèn với việc thay thế hàng loạt. Với văn bản tiếng Việt, vấn đề còn tinh vi hơn ở cấp ký tự: một dấu thanh bị gõ sai hoặc bị chuẩn hóa Unicode khác đi có thể khiến hai dòng trông giống hệt nhau nhưng vẫn bị so sánh cho là khác.
Vì sao cần đến điều này
- Kiểm tra chính xác những gì đã thay đổi giữa hai phiên bản của tệp cấu hình hoặc tài liệu.
- Xem xét một code review bằng cách hiểu logic của thuật toán tìm sự khác biệt.
- So sánh đầu ra của một script trước và sau khi tái cấu trúc để xác nhận không có hồi quy.
Diff cấp độ dòng so với cấp độ ký tự
So sánh từng dòng phù hợp với mã nguồn và tệp cấu hình, nhưng đối với văn bản thường hay một câu dài chỉ đổi một từ, nó sẽ đánh dấu toàn bộ dòng là bị xóa và thêm lại từ đầu. Diff ở cấp độ từ hay ký tự trong dòng cho thấy chính xác từ hoặc dấu thanh nào đã thay đổi — cái giá phải trả là độ phức tạp tính toán cao hơn trên văn bản lớn.