2009-05-29 32 views

Trả lời

5

Đây là the paper làm cơ sở cho công cụ dòng lệnh UNIX diff.

4

Nó thực sự là khá đơn giản; Các chương trình DIFF - phần lớn thời gian - được dựa trên Longest Common Sequence, có thể được giải quyết bằng thuật toán đồ thị.

This web page cho ví dụ triển khai trong C#.

4

Đó 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.

+0

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

+0

Và Kristo đã đề cập đến một giấy làm giảm nó thành O (ND). – beef2k

Các vấn đề liên quan