cuốn sách gpt4 ai đã làm

java — Sự khác biệt nhanh hơn

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 02:37:25 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi đang làm việc trên một tệp nhị phân tương đối lớn. Tôi đã triển khai thuật toán Myers Diff nổi tiếng để tạo ra sự khác biệt tối thiểu. Tuy nhiên, đó là O(ND), vì vậy để phân biệt giữa hai tệp 1 MB riêng biệt, tôi dự kiến ​​sẽ mất 1 triệu bình phương = 1 nghìn tỷ lần. Điều đó không tốt!

Điều tôi muốn là một thuật toán tạo ra sự khác biệt không nhỏ nhưng nhanh hơn nhiều. Tôi biết phải có một cái vì Beyond Compare đã làm được điều đó. Nhưng tôi không biết phải làm gì!

Để chắc chắn: có những công cụ như xdelta hoặc bdiff, nhưng chúng tạo ra các bản vá cho máy tính sử dụng, không giống với các bản khác biệt mà con người có thể sử dụng. Việc vá lỗi liên quan đến việc chuyển đổi một tệp này sang một tệp khác để nó có thể thực hiện các thao tác như sao chép từ phần trước của tệp. Có một sự khác biệt về con người có thể tiêu thụ ở đó hiển thị sự khác biệt một cách trực quan và chỉ có thể được chèn và xóa. Ví dụ: chuyển đổi này:

"puddi"-> "puddipuddipuddi"

sẽ tạo ra bản vá nhỏ "sao chép [0,4] sang [5,9] và [10, 14]", nhưng sự khác biệt lớn hơn là "nối 'puddipuddi'". Tôi quan tâm đến các thuật toán tạo ra sự khác biệt lớn hơn.

Cảm ơn!

câu trả lời hay nhất

Sự khác biệt về cơ bản là cùng một thuật toán được sử dụng trong tin sinh học để sắp xếp các chuỗi DNA. Các trình tự này thường lớn (dài hàng triệu hoặc hàng tỷ nucleotide) và chương trình sử dụng chiến lược hoạt động tốt trên các bộ gen dài hơn MUMMER :

  1. Sử dụng cây hậu tố để nhanh chóng tìm thấy tất cảtrận đấu độc đáo tối đa(Một chuỗi con xuất hiện trong cả hai tệp và không thể mở rộng theo bất kỳ hướng nào trong khi điều kiện vẫn đúng)
  2. Sử dụng thuật toán lập trình động chuỗi con tăng dài nhất để nhanh chóng tìm ra tập hợp con MUM dài nhất xuất hiện liên tục trong hai tệp
  3. Sửa tập hợp con MUM theo căn chỉnh (tức là đánh dấu các vùng này là khớp)
  4. Nếu thấy cần thiết, hãy thực hiện các khác biệt chậm hơn ở các vùng giữa MUM (ví dụ: Myers). Trong trường hợp của bạn, bạn có thể bỏ qua hoàn toàn bước này nếu bạn thấy rằng độ dài của MUM dài nhất nằm dưới một ngưỡng nhất định (bạn sẽ coi hai tệp này không liên quan).

Miễn là không có quá nhiều sự khác biệt, điều này sẽ có xu hướng mang lại một tập hợp các vùng căn chỉnh rất tốt (mặc dù không đảm bảo là tối ưu) (hoặc tương đương, một tập hợp các khác biệt rất nhỏ). Tôi không chắc khung thời gian chính xác cho từng bước nhưng tôi biết là không có n^2 hoặc cao hơn.

Tôi tin rằng chương trình MUMmer yêu cầu các chuỗi DNA hoặc protein, vì vậy nó có thể không phù hợp với bạn ngay từ đầu, nhưng các khái niệm này chắc chắn áp dụng cho các chuỗi chung (ví dụ: tệp), vì vậy tôi khuyên bạn nên sử dụng phương pháp này nếu bạn chuẩn bị triển khai lại chính nó.

Về thuật toán - diff nhanh hơn, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/4611143/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress