Đó là một câu hỏi phức tạp. Thực hiện một diff có nghĩa là tìm khoảng cách chỉnh sửa tối thiểu giữa hai tệp. Tức là, số lượng thay đổi tối thiểu bạn phải thực hiện để chuyển đổi một tệp sang một tệp khác. Điều này tương đương với việc tìm kiếm chuỗi dài nhất của các dòng giữa hai tệp và đây là cơ sở cho các chương trình khác nhau khác nhau. Vấn đề phổ biến nhất về sau đó là nổi tiếng và bạn sẽ có thể tìm thấy giải pháp lập trình động trên google.
Sự cố với phương pháp lập trình động là O (n^2). Do đó rất chậm trên các tệp lớn và không thể sử dụng cho các chuỗi nhị phân lớn. Phần khó khăn trong việc viết một chương trình khác là tối ưu hóa thuật toán cho miền vấn đề của bạn, để bạn có được hiệu suất hợp lý (và kết quả hợp lý). Bài báo "Thuật toán cho so sánh tệp khác biệt" của Hunt và McIlroy đưa ra một mô tả tốt về phiên bản đầu tiên của tiện ích khác biệt Unix.
Nguồn
2009-05-29 16:56:53
Các tệp tôi sẽ phân biệt là rất nhỏ, 10 - 50 dòng, do đó tốc độ của thuật toán không phải là vấn đề. – scottm
Và Kristo đã đề cập đến một giấy làm giảm nó thành O (ND). – beef2k