Có rất nhiều thuật toán nén trên mạng. Những gì bạn cần ở đây là một thuật toán nén không mất dữ liệu. Một thuật toán nén không mất dữ liệu nén dữ liệu sao cho nó có thể được giải nén để đạt được chính xác những gì đã được đưa ra trước khi nén. Ngược lại sẽ là một thuật toán nén mất dữ liệu. Nén mất dữ liệu có thể xóa dữ liệu khỏi tệp. Hình ảnh PNG sử dụng nén không mất dữ liệu trong khi hình ảnh JPEG có thể và thường sử dụng nén mất dữ liệu.
Một số thuật toán nén biết đến rộng rãi nhất bao gồm:
tài liệu lưu trữ ZIP sử dụng một sự kết hợp của Mã hóa Huffman và LZ77 để cung cấp cho nén nhanh và thời gian giải nén và nén tốt hợp lý tios.
LZ77 là khá nhiều dạng RLE tổng quát và thường sẽ mang lại kết quả tốt hơn nhiều.
Huffman cho phép các byte lặp lại nhiều nhất để biểu thị số bit ít nhất. Hãy tưởng tượng một tập tin văn bản trông như thế này:
aaaaaaaabbbbbcccdd
Một thực hiện điển hình của Huffman sẽ cho kết quả trong bản đồ sau:
Bits Character
0 a
10 b
110 c
1110 d
Vì vậy, các tập tin sẽ được nén như thế này:
00000000 10101010 10110110 11011101 11000000
^^^^^
Padding bits required
18 byte giảm xuống 5. Tất nhiên, bảng phải được bao gồm trong tệp. Thuật toán này hoạt động tốt hơn với nhiều dữ liệu hơn: P
Alex Allain có a nice article trên Thuật toán nén Huffman trong trường hợp Wiki không đủ.
Vui lòng hỏi thêm thông tin. Chủ đề này khá rộng.
Nguồn
2013-05-09 19:45:19
Hmmmm có rất nhiều thuật toán nén mà bạn đang tìm kiếm về mặt "tốt nhất". Chẳng hạn như tốc độ hoặc tỷ lệ nén hoàn toàn thấp hơn hoặc tỷ lệ nén cao nhất? Trong đó có ASIC được thiết kế cho họ, đó là một câu hỏi nghiên cứu. Tôi chắc chắn nhất nếu không phải tất cả các thuật toán nén chính thống đều có một số dạng thực thi ASIC. – Nomad101
http://www.ccs.neu.edu/home/jnl22/oldsite/cshonor/jeff.html – taocp
@taocp, cảm ơn bạn! – Veridian