Dlaczego kompresja ZIP nie kompresuje niczego?


18

Katalog 398 MB został skompresowany do 393 MB przy użyciu kompresji 7Z i Normal ZIP. Czy to normalne? Jeśli tak, dlaczego ludzie nadal używają ZIP w systemie Windows?

Odpowiedzi:


70

Jeśli kompresujesz rzeczy, które są już skompresowane (AVI, JPEG, MP3), nie zyskasz nic poza pakowaniem wszystkiego w jednym pliku.


1
I nawet widziałem, jak działa odwrotnie, powodując, że skompresowane archiwum jest większe niż poszczególne skompresowane pliki.
Fiasco Labs

32

Kompresja polega na szukaniu powtarzalnych wzorów w elementach do kompresji. Ponieważ nie chcesz tracić żadnych danych podczas kompresji plików, kompresja musi być bezstratna (*).
Teraz, mając to z tyłu głowy, zastanów się, w jaki sposób pliki (przedmioty) są przechowywane na komputerze. Na najniższym poziomie wszystkie są tylko garstką zer i jedynek.

W ten sposób można przekształcić pytanie: „ Jak mogę przedstawić wiązkę jedynek i jedynek w bardziej zwarty sposób niż oryginalną reprezentację?

Więc zacznijmy od początku, jak możesz skompaktować normalną reprezentację pojedynczego bitu (pojedynczego 1 lub pojedynczego 0)?
Odpowiedź jest naprawdę prosta: nie możesz! ... pojedynczy bit jest reprezentowany w możliwie najbardziej kompaktowy sposób.

W porządku, weźmy większy przykład, jak skompresowałbyś ciąg binarny, taki jak 0111 0111 0100 0111 ?
Ponieważ wiemy już, że spojrzenie na poszczególne bity w ogóle nam nie pomoże, wiemy, że musimy spojrzeć na większą skalę. Na przykład weźmy 4 bity na raz. Widzimy teraz, że ciąg binarny „0111” wystąpi w tym przykładzie 3 razy, więc dlaczego nie reprezentujemy tego za pomocą jednego bitu: 0? ale to wciąż pozostawia 0100 w ciemności, więc przedstawmy to za pomocą „1”
Wiemy, że skompresowaliśmy oryginał do: „0010”

To naprawdę dobrze! Jest to jednak podstawowa podstawa „algorytmu kodowania Huffmana” , a w świecie rzeczywistym będzie to nieco bardziej skomplikowane (trzeba też przechowywać tabelę z informacjami o kodowaniu, ale to jest nieco za daleko, by odpowiedzieć na to pytanie).

Teraz, aby naprawdę odpowiedzieć na twoje pytanie: dlaczego nie da się tak dobrze skompresować wszystkich danych? Cóż, weźmy inny przykład: „0001 0110 1000 1111”, gdybyśmy zastosowali tę samą technikę jak powyżej, nie bylibyśmy w stanie skompresować danych (nie znaleziono powtórzeń), a zatem nie skorzystałby na kompresji ...


(*) Istnieją oczywiście wyjątki. Najbardziej znanym przykładem tego jest kompresja stosowana do plików MP3. tutaj niektóre informacje o dźwiękach zostaną utracone podczas konwersji z surowego, oryginalnego pliku do formatu MP3, ta kompresja jest więc stratna . Innym przykładem jest format .JPG dla obrazów


6

Proces kompresji pobiera powtarzalne wzorce i tokenizuje je do krótszych wzorców. Dane wyjściowe są wówczas w większości niepowtarzalne i dlatego nie można ich zbytnio kompresować, jeśli w ogóle.


6

Z sekcji Ograniczenia artykułu w Wikipedii na temat kompresji bezstratnej :

Bezstratne algorytmy kompresji danych nie mogą gwarantować kompresji dla wszystkich zestawów danych wejściowych. Innymi słowy, dla dowolnego (bezstratnego) algorytmu kompresji danych pojawi się zestaw danych wejściowych, który nie zmniejsza się po przetworzeniu przez algorytm. Można to łatwo udowodnić za pomocą elementarnej matematyki przy użyciu argumentu liczenia. ...

Zasadniczo teoretycznie niemożliwe jest bezstratne skompresowanie wszystkich możliwych danych wejściowych.


Trudniej jest skompresować dane, które zostały już skompresowane. Zdjęcia i filmy są w większości skompresowane, ponieważ oryginalny rozmiar byłby bardzo duży
phuclv

4

Czy to normalne?

Nie. Nie z „normalnymi” plikami. Jakiego rodzaju pliki kompresowałeś? Jeśli zostały już skompresowane, np. Są to pliki JPG, GIF, PNG, wideo lub nawet inne pliki zip, nie zostaną one zbytnio skompresowane przez żaden algorytm. Jeśli spróbujesz kompresować pliki tekstowe, XML, nieskompresowane pliki BMP, kod źródłowy itp., Zip zapewni dobrą kompresję, ale prawdopodobnie nie najlepszą.

Dlaczego ludzie nadal używają ZIP w systemie Windows?

Jednym z powodów jest to, że w systemie wbudowana jest ładna obsługa zip - możesz kliknąć prawym przyciskiem myszy w dowolnym miejscu i utworzyć nowy plik zip, a następnie upuścić w nim rzeczy. Możesz po prostu dwukrotnie kliknąć plik zip, który otworzy się jak folder. Możesz skopiować z niego rzeczy, a czasem nawet użyć ich w miejscu. Nie musisz instalować programu WinZip, 7z ani żadnego innego programu. Zwykle polecam, że ludzie nie.


2

W archiwum zip zawierającym wiele plików każdy plik jest kompresowany niezależnie. Jeśli istnieje duże podobieństwo między plikami, inne narzędzie może zapewnić znacznie lepszą kompresję.

Na przykład tar.gz łączy pliki razem, a następnie kompresuje wyniki. Podobnie „solidny” plik rar wykorzystuje podobieństwa między plikami.

Minusem tar.gz lub solidnego rara jest to, że nie można już wyodrębnić pojedynczego pliku z dużego archiwum bez dekompresji archiwum do miejsca, w którym znajduje się żądany plik.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.