Tôi đang đọc bài báo NJ Larsson, A. Moffat: Nén từ điển dựa trên từ điển ngoại tuyến , mô tả thuật toán nén mà nếu tôi hiểu chính xác, nó khá giống với mã hóa cặp Byte .
Cho một chuỗi có độ dài n , tôi đang cố gắng hiểu làm thế nào người ta có thể nén nó theo tuyến tính, O ( n ) , thời gian với phương pháp nén này. Làm thế nào chính xác là điều này được thực hiện? Tôi đã đọc bài báo, nhưng tôi vẫn không hiểu làm thế nào họ đạt được thời gian tuyến tính, vì vậy có lẽ tôi sẽ hiểu nó được giải thích theo một cách khác.
Sự nhầm lẫn đầu tiên của tôi xuất hiện ở bước đầu tiên trong thuật toán, nơi chúng tôi tìm thấy cặp phổ biến nhất, ví dụ như trong abcababcabc
cặp phổ biến nhất ab
sẽ được thay thế bằng một biểu tượng mới, nói XcXXcXc
. Tôi không hiểu làm thế nào chúng ta có thể tìm thấy cặp phổ biến nhất đủ nhanh. Cách tiếp cận ngây thơ của tôi sẽ là nhìn vào cặp đầu tiên ab
và sau đó đếm số lần xuất hiện, sau đó nhìn vào cặp tiếp theo bc
và đếm số lần xuất hiện, v.v. Tuy nhiên, điều này đã cho chỉ để tìm ra nhiều nhất cặp chung một lần .
Tiếp theo, ngay cả khi tôi hiểu cách tìm cặp phổ biến nhất trong thời gian . Vấn đề tiếp theo của tôi là, chúng ta không phải tìm cặp phổ biến nhất lên đến O ( n ) lần sao? Và do đó, điều này sẽ cho tổng thời gian O ( n 2 ) ?