Lập trình 22/09/2026 7 phút

Entropy và giới hạn nén: vì sao dữ liệu ngẫu nhiên không thể nén được

Mọi thuật toán nén đều đụng một bức tường toán học: entropy Shannon. Bài này đo thật: chuỗi lặp một ký tự (entropy 0) gzip vụt còn 123 byte từ 90.000; nhưng 90.000 byte ngẫu nhiên (entropy 7.998 bit/byte) gzip làm nó phình lên 90.048 byte — không nén nổi. Và vì sao gzip nén text xuống dưới cả giới hạn entropy order-0: nó khai thác thêm sự lặp lại.

Lập trình 22/09/2026 7 phút

Huffman coding: gán mã ngắn cho ký tự phổ biến, tiến sát giới hạn entropy

Vì sao dùng 8 bit cho mọi ký tự khi 'e' xuất hiện nhiều hơn 'z' hàng trăm lần? Huffman gán mã ngắn cho ký tự phổ biến, mã dài cho ký tự hiếm. Bài này tự cài Huffman bằng heap và đo thật: ký tự phổ biến nhất (khoảng trắng) được mã 2 bit, ký tự hiếm 7 bit; và tổng thể đạt 4.3507 bit/byte — chỉ hơn sàn entropy order-0 (4.3244) đúng 0.026 bit. Vì sao nó không chạm đúng entropy, và arithmetic coding làm gì tốt hơn.

Lập trình 22/09/2026 6 phút

Nén phụ thuộc dữ liệu: vì sao cùng gzip nén mã nguồn 292x mà nén ảnh 1x

Không có 'tỉ lệ nén của gzip' — tỉ lệ phụ thuộc hoàn toàn vào dữ liệu, cụ thể là entropy của nó. Bài này đo thật cùng gzip trên nhiều loại 4MB: mã nguồn lặp nhiều nén 292 lần, JSON 15 lần, text 5 lần, nhưng số ngẫu nhiên và dữ liệu đã nén chỉ 1 lần (thậm chí to hơn). Và vì sao bạn không bao giờ nên gzip một file .jpg, .zip hay .mp4.