Làm thế nào để nén tập tin làm việc?


19

Vì vậy, tôi nhận ra ngày hôm nay tôi đã nén tệp. Khả năng kết hợp một vài tệp lại với nhau thành một, và nó có kích thước nhỏ hơn bất kỳ tệp nào trong số đó, là điều tôi chỉ chấp nhận như một sự thật, nhưng nó thực sự hoạt động như thế nào?

Tôi có một kiến ​​thức hạn chế về nó bao gồm một cái gì đó để làm với việc thay thế tất cả các mục trùng lặp bằng con trỏ, để thu nhỏ theo cách đó, nhưng hơn thế nữa tôi khá là không biết gì!

Vì tôi luôn mở ra những kiến ​​thức mới, vì tôi tưởng tượng hầu hết chúng ta ở đây, tôi nghĩ tôi sẽ hỏi. Vậy, SuperUser, nén thực sự hoạt động như thế nào?


1
Các bài viết trên Wikipedia là một khởi đầu tốt, nhưng nó sẽ được tốt đẹp để có lời giải thích cụ thể hơn. Câu hỏi hay (mặc dù tôi chắc chắn chúng tôi đã có câu hỏi như vậy rồi, nhưng dường như là không).
Gnoupi

2
@Gnoupi: Thật vậy, điều đầu tiên tôi làm là tìm kiếm, vì tôi chắc chắn có một cái ở đây. Rõ ràng là không, vì vậy tôi đã cố gắng khắc phục điều đó: P
Phoshi

2
chúng tôi đã có thẻ "cái gì là" khi bạn đăng ảnh và đi "wot izzit ??"; Tôi đã nhận thấy một nhu cầu về thẻ "how-does-it-work", nhưng quá dài và "how-work" nghe có vẻ ngu ngốc. "Giải thích" có thể làm điều đó tho.
quack quixote

@quack quixote: À, cảm ơn. Tôi đang tìm kiếm trong phần tự động hoàn thành cho loại thẻ "plz-send-the-giải thích", nhưng không thể tìm thấy.
Phoshi

2
Tôi đã đến gần chỉ để tạo một thẻ "làm thế nào" một vài lần ... nhưng "giải thích" có lẽ tốt hơn. "Hướng dẫn" và "hướng dẫn" và "người mới bắt đầu" đều được áp dụng bán nhưng không phù hợp.
quack quixote

Câu trả lời:


18

Nén không mất dữ liệu

Nén không mất dữ liệu là nơi không có dữ liệu bị mất. Tất cả mọi thứ được nhập vào có thể được lấy ra một cách hoàn hảo. Điều này hoạt động tốt cho các tập tin văn bản hoặc nhị phân trong đó lỗi nhỏ nhất sẽ được nhận thấy.

Nén tệp hoạt động bằng cách lấy tệp và quét các mẫu và dịch các mẫu đó sang một thứ khác chiếm ít không gian hơn.

Ví dụ: "AAAAAAAA" có thể được chuyển thành "8A".

Được cho rằng đó không phải là cách nó hoạt động chính xác bởi vì sau đó bạn có vấn đề gì nếu "8" ở trong bản rõ. Bạn sẽ giải nén tập tin và nó sẽ sai. Một nơi tốt để bắt đầu là Wikipedia hoặc Thuật toán nén dữ liệu LZW .

Có một số mã psuedo đơn giản cho điều này được sao chép dưới đây:

STRING = get input character
WHILE there are still input characters DO
    CHARACTER = get input character
    IF STRING+CHARACTER is in the string table then
        STRING = STRING+character
    ELSE
        output the code for STRING
        add STRING+CHARACTER to the string table
        STRING = CHARACTER
    END of IF
END of WHILE
output the code for STRING

Tất cả nén sử dụng một từ điển tra cứu được sử dụng để nén và giải nén tệp. Từ điển càng lớn, bạn càng có thể nén nó, mặc dù bạn chạy theo Luật lợi nhuận giảm dần .

Cũng đáng lưu ý rằng nén không phải lúc nào cũng mang lại một tệp nhỏ hơn. Có những tình huống (với các tệp nhỏ hoặc khi nén dữ liệu ngẫu nhiên ) mà bạn sẽ không nhận được tệp nhỏ hơn sau khi nén. Đã có một số thách thức thú vị liên quan đến khả năng nén dữ liệu ngẫu nhiên.

Nén "mất mát"

Trên đây chủ yếu liên quan đến nén không mất mát . Các loại nén khác được sử dụng trong các ứng dụng video / âm thanh như MP3, JPG và h.264 là các ví dụ về nén mất .

Nén tổn thất hoạt động bằng cách loại bỏ dữ liệu ít có khả năng được chú ý nhất. Trong âm thanh, đây là âm thanh khoảng 30.000 Hrz và dưới 100 Hrz, cùng với những thứ khác. Trong ảnh (tĩnh), nó loại bỏ những thứ khác nhau và hợp nhất các hình ảnh lại với nhau, cùng với việc loại bỏ dữ liệu.

Nén tổn thất là một hình thức mã hóa biến đổi . Nó tính trung bình dữ liệu để giảm kích thước tổng thể. Ví dụ: một khối 10 pixel trong một hình ảnh, tất cả các màu hơi khác nhau có thể được hợp nhất với nhau thành một màu và do đó được nén.

Trong nén video, các hướng dẫn thường được đặt để chỉ vẽ lại các pixel đã thay đổi kể từ khung hình cuối cùng hoặc khung hình chính .


Lưu ý rằng đây chỉ là giải thích cho việc nén không mất dữ liệu, loại mà bạn có thể khôi phục dữ liệu ban đầu chính xác (rất có thể được sử dụng bởi các chương trình lưu trữ). Có các loại nén khác mà bạn mất chất lượng cho kích thước nhỏ hơn, ví dụ như được sử dụng trong JPG, MP3, v.v.
Gnoupi

Ví dụ đầu tiên của Josh là một hình thức của một phương pháp nén thực sự có tên là Mã hóa chiều dài Run và "8" sẽ được nén thành "181A". Rõ ràng đoạn cuối của ông áp dụng ở đây; RLE hoạt động tốt nhất trên dữ liệu với nhiều bản sao.
Dour High Arch

3
Tôi đã thêm các tiêu đề lossless / lossy và làm tròn nó thêm một chút. Thật tốt khi lưu ý rằng cách tốt nhất để hiểu thêm về điều này là chỉ cần đọc bài viết trên wikipedia.
Josh K

5

Nén hoạt động bằng cách tìm các mẫu trong dữ liệu, sau đó thay thế các mẫu này bằng các mẫu nhỏ hơn đặc biệt. Giải nén là nghịch đảo: tìm các mẫu đặc biệt và thay thế chúng bằng các mẫu lớn hơn mà chúng đại diện. Biết những mẫu nào có thể xảy ra là quan trọng; ví dụ, các mẫu được tìm thấy trong văn bản có thể khá khác so với các mẫu được tìm thấy trong hình ảnh. Một số kỹ thuật nén bị mất; họ không đảm bảo việc mở rộng sẽ phục hồi chính xác đầu vào. Điều này thường tốt cho dữ liệu tương tự, chẳng hạn như âm nhạc và hình ảnh, nếu tổn thất đủ nhỏ. Nhưng dữ liệu như văn bản phải được nén bằng các kỹ thuật lossless.

Điều quan trọng là phải nhận ra rằng không thể nén, không mất dữ liệu ngẫu nhiên dù chỉ một bit. Hãy xem xét một tệp có N bit dữ liệu nhị phân. Có 2 ^ N tập tin có thể. Nếu bạn nén bất kỳ tệp nào trong một tệp này, thì tệp nén có kích thước bit N-1, chỉ có 2 ^ (N-1) có thể được biểu diễn nén. Nói cách khác, mỗi tệp nén có thể phải đại diện cho nhiều hơn một tệp không nén có thể. Nếu không có biểu diễn nén duy nhất, thuật toán giải nén có thể đảm bảo giải nén không mất mát.


3
một tập tin có thể không nén (tính từ) nhưng không thể giải nén (động từ). thay vào đó là giải nén .
quack quixote
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.