Tùy chọn này có ảnh hưởng gì đến diff?


24

Việc difftriển khai trên OpenBSD có một -dtùy chọn không chuẩn với tài liệu sau:

-d

Cố gắng rất nhiều để tạo ra một diff nhỏ nhất có thể. Điều này có thể tiêu tốn rất nhiều sức mạnh xử lý và bộ nhớ khi xử lý các tệp lớn với nhiều thay đổi.

Việc difftriển khai GNU có cùng tùy chọn với tài liệu ngắn hơn

-d, --minimal

cố gắng hết sức để tìm một tập hợp thay đổi nhỏ hơn

Thỉnh thoảng tôi đã sử dụng tùy chọn này chỉ để xem liệu nó có tạo ra đầu ra ở bất kỳ hình dạng hoặc hình thức nào khác với cùng một difflệnh mà không có tùy chọn không, nhưng tôi chưa bao giờ thấy bất kỳ sự khác biệt nào (không có ý định chơi chữ).

Ai đó có thể cung cấp hoặc chỉ ra một ví dụ trong đó tùy chọn này thực sự tạo ra kết quả khác với cùng một lệnh mà không có -d? Ngoài ra, nếu ai đó có thể giải thích các trường hợp cần thiết cho tùy chọn này để khởi động. Tôi cũng không chắc chắn "tối thiểu" có nghĩa là "ít dòng sản phẩm hơn" hay "ít thân hơn".

Một phỏng đoán vô học là nó phải làm với những người rất to lớn.


1
unix.stackexchange.com/questions/472528 khơi gợi trí tò mò của bạn phải không? (-:
JdeBP

@JdeBP Vâng thực sự. Nó nhắc tôi về lá cờ này và thực tế là tôi đơn giản là không biết nó làm gì vì tôi chưa bao giờ thấy nó làm gì cả.
Kusalananda

1
info diff performancegiải thích nó IIRC
Stéphane Chazelas

1
Rõ ràng liên quan . Đáng buồn là không có ví dụ về myers -> kết quả tối thiểu.
Isaac

1
Tôi thực sự muốn lấy một ví dụ sẽ tạo đầu ra khác nhau gdiff -dđể kiểm tra xem các bổ sung cho OpenBSD có hữu ích không. Từ các thử nghiệm của tôi, tôi không thể nhận được bất kỳ sự khác biệt nào nhưng rõ ràng mã OpenBSD làm chậm hiệu suất có vẻ như là một tác động đáng kể, vì Thuật toán khác biệt từ Douglas McIlroy nhanh hơn gdiff miễn là bạn sử dụng kích thước tệp bình thường.
schily

Câu trả lời:


15

Trong GNU diff, cũng được sử dụng trên FreeBSD, --minimalcờ kích hoạt một biến thể thuật toán của Paul Eggert khiến nó "giới hạn chi phí O(N**1.5 log N)ở mức giá sản xuất đầu ra dưới mức tối ưu cho các đầu vào lớn có chênh lệch". Cụ thể hơn, nó khiến nó không áp dụng một số phương pháp phỏng đoán liên quan đến việc tìm kiếm chỉ gần với các giải pháp tối ưu và đưa ra các dòng "khó hiểu" như là sự khác biệt thêm.

Trong OpenBSD diff, trong đó sử dụng Unix cũ diffthuật toán từ những năm 1970, các thuật toán sử dụng được ghi có vào Harold Stone, và các --minimallá cờ gây nên một tìm kiếm đó là (hiệu quả un-) giới hạn bởi giá trị lớn nhất của một số nguyên unsigned thay vì bằng căn bậc hai về kích thước của phạm vi các dòng được so sánh (hoặc 256 nếu lớn hơn).

đọc thêm


1
Khi tôi tạo ra một sự khác biệt tốt hơn từ các nguồn UNIX, tôi đã kiểm tra sự tăng cường OpenBSD và không thể tìm thấy kết quả nào tốt hơn. Lưu ý rằng hàm Stone () ban đầu sử dụng: `} while ((y = b [++ j])> 0);` và BTW: đối với kích thước tệp thông thường, độ lệch UNIX nâng cao của tôi nhanh hơn GNU diff.
schily
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.