Chuyện gì xảy ra khi nén một file
Nén
dữ liệu
Nén
dữ liệu là một việc không quá xa lạ với mỗi chúng ta, từ cấp độ người sử dụng
khi cần nén dữ liệu để gửi tập tin nhanh hơn, đến cấp độ nhà phát triển nén dữ
liệu để người dùng tốn ít chi phí khi tải về hơn. Vậy bạn đã hiểu rõ nén dữ liệu
là gì chưa? Hãy cùng tìm hiểu!
Trước
khi nói về cách thức nén dữ liệu, ta hãy làm rõ khái niệm nén. Nén là quá trình
làm giảm kích thước đi nhưng vẫn giữ được ý nghĩa thông tin. Tức là người ta cố gắng làm chúng ngắn lại, và
sau đó người ta có thể phục hồi nó về kích thước ban đầu
Có
2 phương pháp nén: Loseless (Không mất mát) và lossy (mất mát)
Loseless
Thường
được sử dụng trong văn bản
Rút
gọn bằng cách đánh dấu vị trí các đoạn văn bản trùng nhau, xóa những đoạn văn bản
ấy.
Ví
dụ:
Trong
đoạn văn bản trên, cụm từ “Nén dữ liệu” được lặp đi lặp lại nhiều lần. Bằng cách
lưu trữ cụm từ “Nén dữ liệu” và vị trí đặt cụm từ, chúng ta đã tiết kiệm được kích
thước của đoạn văn bản.
Khi
giải nén, chúng ta chỉ cần dựa vào vị trí và đặt cụm từ thích hợp tại nơi đã chỉ
định sẽ cho ra văn bản gốc. Dữ liệu trước khi nén và sau khi giải nén vẫn còn
giữ nguyên.
Lossy
Thường
được thấy ở quá trình nén hình ảnh. Giả sử một hình ảnh về biển
Để
nén dữ liệu, chúng ta sẽ xác định các pixel cùng màu nhau, xác định vị trí khối
pixel cùng màu, lưu trữ nó lại và đánh dấu vị trí của khối pixel ấy. Tuy nhiên,
một bức ảnh không đơn giản sẽ có cùng một màu như vậy. Giả sử là một tấm ảnh về
thành phố, giao thông, với chi chít những chi tiết trên đó. Yêu cầu đặt ra là cần
phải nén tất cả những hình ảnh nói chung kể cả những hình ảnh có độ chi tiết
cao. Kỹ thuật nén JPEG ra đời, đặt ra một tiêu chí rằng: “Ồ tôi có thể nén cho
bạn bất kì những bức ảnh nào nhưng đồng nghĩa đó bức ảnh của bạn sẽ không còn
giữ nguyên so với ban đầu”. Bằng cách chia bức ảnh thành các block, và với mỗi
block đó, thông qua một số kỹ thuật, sẽ đưa các pixel trong block gần màu với
nhau về một màu duy nhất.
Giả
sử một bức ảnh được chia thành 1 khối có kích thước 4 pixel, ta để ý rằng tuy 4
pixel này có thông số màu sắc khác nhau, nhưng nhìn chung thì nó thể hiện một màu
là màu xanh dương. Theo hướng như thế, ta sẽ cho 4 pixel này về cùng một màu
duy nhất, và chỉ cần lưu trữ block thứ y nào đó có màu là xanh dương, để thay
thế cho việc lưu trữ cả 4 pixel với 4 màu khác nhau.
Đây
là bức hình thể hiện rõ về việc nén hình ảnh bằng kỹ thuật JPEG
(By
Felis_silvestris_silvestris.jpg: Michael Gäblerderivative work: AzaToth -
Felis_silvestris_silvestris.jpg,CC BY 3.0,
https://commons.wikimedia.org/w/index.php?curid=16857750)
Nếu bạn nhìn ở bên phải bức
ảnh, bạn sẽ thấy các màu sắc khác nhau thể hiện rõ nét (sợi lông mèo màu vàng và
màu đen đan xen lẫn nau). Nhưng khi nén (bên trái bức ảnh), bức ảnh đã chia thành
các block và quy các pixel trong 1 block về cùng một màu (để ý lông mèo bây giờ
toàn màu da người). Tùy vào mức độ nén mà chất lượng ảnh sẽ khác nhau.
Tuy kỹ thuật này làm thay
đổi hình ảnh so với ban đầu nhưng vẫn được chấp nhận, vì đôi khi, giả sử một số
trang web như facebook yêu cầu gửi hình ảnh với kích thước giới hạn không quá
20MB (ví dụ), mà chúng ta có bức ảnh 25MB muốn gửi cho bạn bè xem, thì cần phải
nén lại mới có thể gửi qua được.
Hạn chế: Tuy
nén giúp người ta truyền dữ liệu qua mạng tiết kiệm chi phí hơn, tuy nhiên đôi
lúc khi cần gửi một đoạn văn bản nhỏ, ta không muốn tốn thời gian vừa để tải văn
bản, vừa phải giải nén đoạn văn bản đó. Như thế, ta không cần nén dữ liệu khi
ta không quan tâm về kích thước dữ liệu đó.
Một hạn chế nữa là nén thông tin có giới hạn của nó. Ví dụ đơn
giản về việc biểu diễn trường hợp có mưa hoặc không mưa của tỉnh nào đó, ta ít
nhất cũng phải dùng 2 trạng thái 0 và 1 để biểu diễn chúng. Không thể chỉ sử dụng
một trạng thái để biểu diễn 2 trường hợp được.
Tổng kết:
Thông qua bài viết, chúng ta đã tìm hiểu được nén là gì, cách một file nén dữ liệu,
ý nghĩa và một số hạn chế của việc nén dữ liệu. Mục tiêu bài viết là để giúp mọi
người có cái nhìn tổng quan hơn về nén, không đi chuyên sâu vào thuật toán thực
hiện nén. Nếu có sai sót gì mong mọi người góp ý!
Nội dung bài viết thuộc về Lê Công Diễn.
Người viết: Lê
Công Diễn
Mang đi nhớ ghi nguồn
Nhận xét
Đăng nhận xét