W artykule wspomniano o 9 warstwach plików ZIP, więc nie jest to prosty przypadek spakowania kilku zer. Dlaczego 9, dlaczego po 10 plików w każdym?
Po pierwsze, artykuł na Wikipedii mówi obecnie o 5 warstwach po 16 plików. Nie jestem pewien, skąd bierze się ta rozbieżność, ale nie jest to aż tak istotne. Prawdziwe pytanie brzmi: po co w ogóle używać zagnieżdżania.
DEFLATE, jedyna powszechnie obsługiwana metoda kompresji plików zip *, ma maksymalny współczynnik kompresji 1032. Można to osiągnąć asymptotycznie dla dowolnej powtarzającej się sekwencji 1-3 bajtów. Bez względu na to, co zrobisz z plikiem zip, o ile używa on tylko DEFLATE, rozmiar po rozpakowaniu będzie co najwyżej 1032 razy większy od oryginalnego pliku zip.
Dlatego konieczne jest użycie zagnieżdżonych plików ZIP, aby osiągnąć naprawdę skandaliczne współczynniki kompresji. Jeśli masz 2 warstwy kompresji, maksymalny współczynnik wynosi 1032 ^ 2 = 1065024. Dla 3 jest to 1099104768 i tak dalej. Dla 5 warstw użytych w pliku 42.zip teoretyczny maksymalny współczynnik kompresji wynosi 1170572956434432. Jak widać, rzeczywisty 42.zip jest daleki od tego poziomu. Po części jest to narzut związany z formatem zip, a po części po prostu ich to nie obchodzi.
Gdybym miał zgadywać, powiedziałbym, że plik 42.zip został utworzony po prostu przez utworzenie dużego pustego pliku i wielokrotne spakowanie go i skopiowanie. Nie ma próby przekroczenia granic formatu, maksymalizacji kompresji czy czegokolwiek - po prostu wybrali arbitralnie 16 kopii na warstwę. Chodziło o to, aby bez większego wysiłku stworzyć dużą ładowność.
Uwaga: inne formaty kompresji, takie jak bzip2, oferują znacznie, dużo, dużo większe maksymalne współczynniki kompresji. Jednak większość parserów zip ich nie akceptuje.
PS Możliwe jest utworzenie pliku zip, który rozpakuje się do własnej kopii (quine). Możesz także utworzyć taki, który rozpakuje się do wielu kopii samego siebie. Dlatego, jeśli rekurencyjnie rozpakujesz plik na zawsze, maksymalny możliwy rozmiar jest nieskończony. Jedynym ograniczeniem jest to, że może wzrosnąć maksymalnie o 1032 w każdej iteracji.
PPS Rysunek 1032 zakłada, że dane pliku w pliku zip są rozłączne. Jedną z dziwactw formatu pliku zip jest to, że ma on katalog centralny, który zawiera listę plików w archiwum i przesunięcia do danych pliku. Jeśli utworzysz wiele pozycji pliku wskazujących na te same dane, możesz osiągnąć znacznie wyższe współczynniki kompresji nawet bez zagnieżdżania, ale taki plik zip zostanie prawdopodobnie odrzucony przez parsery.