Một thư mục 398MB chỉ được nén thành 393 MB bằng cách sử dụng nén 7Z và ZIP thông thường. Điều này có bình thường không? Nếu vậy, tại sao mọi người tiếp tục sử dụng ZIP trên Windows?
Một thư mục 398MB chỉ được nén thành 393 MB bằng cách sử dụng nén 7Z và ZIP thông thường. Điều này có bình thường không? Nếu vậy, tại sao mọi người tiếp tục sử dụng ZIP trên Windows?
Câu trả lời:
Nếu bạn đang nén những thứ đã được nén (AVI, JPEG, MP3), bạn sẽ không đạt được nhiều thứ ngoài việc đóng gói mọi thứ trong một tệp.
Nén hoạt động bằng cách tìm kiếm các mẫu lặp đi lặp lại bên trong các mục để nén. Ngoài ra vì bạn không muốn mất bất kỳ dữ liệu nào trong khi nén các tệp của mình, việc nén phải không mất dữ liệu (*).
Bây giờ với điều đó ở phía sau trong đầu, hãy nghĩ về cách các tệp (vật phẩm) được lưu trữ trên máy tính. Ở cấp độ thấp nhất, tất cả chúng chỉ là một nhóm 0 và 1.
Do đó, câu hỏi có thể được chuyển thành: " Làm thế nào tôi có thể biểu diễn một bó 1 và 0 theo cách gọn hơn so với biểu diễn ban đầu? "
Vì vậy, hãy bắt đầu lại từ đầu, làm thế nào bạn có thể nén biểu diễn bình thường của một bit đơn (1 đơn hay 0)?
Câu trả lời thực sự dễ dàng: bạn không thể! ... một bit đơn được thể hiện theo cách nhỏ gọn nhất có thể.
Đủ công bằng, chúng ta hãy lấy một ví dụ lớn hơn, làm thế nào bạn sẽ nén một chuỗi nhị phân như 0111 0111 0100 0111 ?
Chà vì chúng ta đã biết rằng việc nhìn vào các bit riêng lẻ sẽ không giúp ích gì cho chúng ta, chúng ta biết rằng chúng ta phải xem xét ở quy mô lớn hơn. Ví dụ: hãy lấy 4 bit mỗi lần. Bây giờ chúng ta thấy rằng chuỗi nhị phân "0111" sẽ xuất hiện 3 lần trong ví dụ, vậy tại sao chúng ta không biểu diễn điều đó với một bit: 0? nhưng điều này vẫn để lại 0100 trong bóng tối, vì vậy hãy để chúng tôi đại diện cho điều đó với "1"
Chúng tôi biết đã nén bản gốc thành: "0010"
Điều đó thực sự tốt! Tuy nhiên đây chỉ là những điều cơ bản cơ bản của "thuật toán mã hóa Huffman" và trong thế giới thực, nó sẽ phức tạp hơn một chút (và bạn cũng cần lưu trữ một bảng có thông tin mã hóa trong đó, nhưng đó là một bit để xa để trả lời câu hỏi này).
Bây giờ để thực sự trả lời câu hỏi của bạn: tại sao tất cả dữ liệu không thể được nén tốt như vậy?, Hãy lấy một ví dụ khác: "0001 0110 1000 1111", nếu chúng ta sử dụng kỹ thuật tương tự như trên, chúng ta sẽ không thể nén dữ liệu (không tìm thấy sự lặp lại) và do đó sẽ không được hưởng lợi từ việc nén ...
(*) tất nhiên có ngoại lệ về điều này. Ví dụ được biết đến nhiều nhất của điều này là nén được sử dụng cho các tệp MP3. ở đây một số thông tin về âm thanh sẽ bị mất trong khi chuyển đổi nó từ tệp gốc, tệp gốc sang định dạng MP3, do đó việc nén này bị mất . Một ví dụ khác là định dạng .JPG cho hình ảnh
Từ phần Hạn chế của bài viết Wikipedia về Nén không mất dữ liệu :
Các thuật toán nén dữ liệu không mất dữ liệu không thể đảm bảo nén cho tất cả các bộ dữ liệu đầu vào. Nói cách khác, đối với bất kỳ thuật toán nén dữ liệu (lossless) nào, sẽ có một tập dữ liệu đầu vào không nhỏ hơn khi được thuật toán xử lý. Điều này dễ dàng được chứng minh với toán học tiểu học bằng cách sử dụng một đối số đếm. ...
Về cơ bản, về mặt lý thuyết, không thể nén tất cả dữ liệu đầu vào có thể.
Điều này có bình thường không?
Không. Không phải với các tập tin "bình thường". Những loại tập tin bạn đã nén? Nếu chúng đã được nén, ví dụ: chúng là JPG, GIF, PNG, video hoặc thậm chí các tệp zip khác, thì chúng sẽ không bị nén nhiều bởi bất kỳ thuật toán nào. Nếu bạn thử nén các tệp Text, XML, BMP không nén, mã nguồn, v.v., zip sẽ cung cấp khả năng nén tốt, nhưng có lẽ không phải là tốt nhất tuyệt đối.
Tại sao mọi người tiếp tục sử dụng ZIP trên Windows?
Một lý do là có xử lý zip đẹp được tích hợp trong hệ thống - bạn có thể nhấp chuột phải vào bất cứ đâu và tạo tệp zip mới, sau đó thả nội dung vào đó. Bạn có thể chỉ cần nhấp đúp vào tệp zip và nó sẽ mở ra như một thư mục. Bạn có thể sao chép những thứ từ nó và đôi khi thậm chí sử dụng nó tại chỗ. Bạn không cần phải cài đặt WinZip hoặc 7z hoặc bất kỳ chương trình nào khác. Tôi thường khuyên mọi người đừng.
Trong kho lưu trữ zip chứa nhiều tệp, mỗi tệp được nén độc lập. Nếu có nhiều sự tương đồng giữa các tệp, thì một công cụ khác có thể cho phép nén tốt hơn nhiều.
Ví dụ: tar.gz nối các tệp lại với nhau, sau đó nén kết quả. Tương tự, một tệp rar "solid" sử dụng sự tương đồng giữa các tệp.
Nhược điểm của tar.gz hoặc rar là bạn không còn có thể trích xuất một tệp từ một kho lưu trữ lớn mà không giải nén tệp lưu trữ lên đến nơi tệp bạn muốn.