Jaki jest największy rozmiar, do którego można rozpakować gzip (na przykład 10 kb)?
źródło
Jaki jest największy rozmiar, do którego można rozpakować gzip (na przykład 10 kb)?
To bardzo zależy od kompresji danych. Szybki test z plikiem 1 Gb wypełnionym zerami daje skompresowany rozmiar ~ 120 KB, więc Twój plik 10 KB może potencjalnie rozwinąć się do ~ 85 MB.
Jeśli dane mają na początku małą nadmiarowość, na przykład archiwum zawiera pliki obrazów w formacie, który jest kompresowany natywnie (gif, jpg, png, ...), wówczas gzip może w ogóle nie dodawać dalszej kompresji. W przypadku plików binarnych, takich jak pliki wykonywalne programów, może wystąpić kompresja do 2: 1, w przypadku zwykłego tekstu, HTML lub innych znaczników 3: 1 lub 4: 1 lub więcej nie jest mało prawdopodobne. W niektórych przypadkach możesz zobaczyć 10: 1, ale ~ 8700: 1 widziany z plikiem wypełnionym pojedynczym symbolem jest czymś, czego nie zobaczysz poza podobnie sztucznymi okolicznościami.
Możesz sprawdzić, ile danych wynikałoby z rozpakowania pliku gzip, bez faktycznego zapisywania jego nieskompresowanej zawartości na dysk, za pomocą gunzip -c file.gz | wc --bytes
- spowoduje to rozpakowanie pliku, ale nie zapisanie wyników, zamiast tego przekazanie ich do wc
liczby policzonych bajtów następnie odrzuć je. Jeśli skompresowana zawartość jest plikiem tar zawierającym wiele wielu małych plików, może się okazać, że zauważalnie potrzeba więcej miejsca na dysku, aby rozpakować pełne archiwum, ale w większości przypadków liczba zwrócona z gunzip
wyjścia wc
potokowego będzie tak dokładna, jak potrzebujesz.
phpinfo()
, kompresują się bardzo dobrze. Informacje techniczne zawarte w tych wynikach zawierają również więcej bezpośrednich powtórzeń niż średnia część języka naturalnego, a rozkład alfabetu jest prawdopodobnie mniej płynny, co może pomóc etapowi Huffmana uzyskać lepsze wyniki.Zwykle nie uzyskuje się kompresji większej niż 95% (tak, że spakowane dane 10kB rozpakują się do ~ 200kB), ale istnieją specjalnie spreparowane pliki, które rozwijają się wykładniczo. Poszukaj
42.zip
, dekompresuje się do kilku petabajtów (bez znaczenia) danych.źródło
Cytowany dosłownie z https://stackoverflow.com/a/16794960/293815
Maksymalny współczynnik kompresji formatu deflate wynosi 1032: 1. Wynika to z faktu, że najdłuższy przebieg, który można zakodować, to 258 bajtów. Wymagane są co najmniej dwa bity dla każdego takiego przebiegu (jeden bit dla kodu długości i jeden bit dla kodu odległości), dlatego 4 * 258 = 1032 nieskompresowanych bajtów można zakodować na jeden skompresowany bajt.
Możesz uzyskać większą kompresję, gzipując wynik gzip. Zwykle nie poprawia to kompresji, ale w przypadku bardzo długich serii może.
Nawiasem mówiąc, podejście LZ77 stosowane przez deflację jest bardziej ogólne niż kodowanie długości przebiegu. Zamiast samej długości używana jest para długość / odległość. Pozwala to na kopiowanie łańcucha z pewnej odległości wstecz lub replikację bajtu w długości przebiegu dla odległości jednego, lub replikację trzech bajtów z odległością trzech itd.
źródło
Współczynnik kompresji dowolnego algorytmu kompresji będzie funkcją kompresowanych danych (oprócz długości tych danych).
Oto analiza w MaximumCompression ,
spojrzeć na jednej z próbek takich jak,
Podsumowanie testów porównawczych wielu kompresji plików
źródło
Ogromny plik zawierający tylko jeden symbol bardzo dobrze się kompresuje.
źródło
10 MB zer w pliku, skompresuj gzip -9 do 10217. Tak więc maksymalny współczynnik wygląda na około 1000x.
źródło
Odpowiedź na twoje pytanie zależy od danych wejściowych. Aby dać Ci wyobrażenie o sposobie kompresji, obejrzyj te sześć minut filmów.
https://www.youtube.com/watch?v=ZdooBTdW5bM
Powinieneś z tego uzyskać, że stopień kompresji zależy od częstotliwości każdego znaku, więc nie ma maksymalnej szybkości generel, zależy od danych wejściowych, dla tekstu angielskiego wynosi około 65 procent.
źródło