Jak „rozmiar słownika” wpływa na kompresję?


39

Wiem, że większy rozmiar może prowadzić do lepszego współczynnika kompresji i odwrotnie. Ale czy jest sposób, w jaki mogę podjąć lepszą decyzję? .. skoro jest tak wiele możliwości 7zip


Do tej pory zauważyłem, że rozmiar słownika size rozmiar pliku zapewnia optymalną kompresję. rozmiar pliku
W tym przypadku plik ∼8mb test.avima taki sam współczynnik kompresji dla wszystkich rozmiarów słowników większych niż 8mb. Potem zaczyna spadać.


2
Tak, ponieważ cały plik jest w pamięci. Może to jednak nie być możliwe w przypadku plików z wieloma koncertami. Zwrot z inwestycji zmniejsza się wraz ze wzrostem kosztów. Jeśli potrzebujesz tego ostatniego 1%, rozmiar = rozmiar pliku. Uwaga: Gdy masz dużo większy zestaw danych, rozmiar słownika o wielkości 128 MB + wydłuży czas potrzebny do znacznej kompresji plików.
cybernard

Odpowiedzi:


28

Powtarzalne elementy są przechowywane w słowniku, a kod jest przypisywany jako zamiennik.

TO PONAD UPROSZCZENIE

aaaaaaaaaaaaaaaaaaaaaaaa  0001
bbbbbbbbbbbbbbbbbbbbbbbb  0002
alsdjl;asjdfkl;asdfjkljj  0003

zamiast całej linii po prostu umieszcza kod na swoim miejscu. Im większy słownik, tym więcej kodów może obsłużyć. Zwykle, gdy słownik się zapełni, zaczyna on nowy w locie. Kiedy zaczyna nowy, jest pusty, a nowe kody są przypisywane do wykrytych wzorców.

Ogólnie im większe, tym lepiej do pewnego stopnia. Cały słownik jest przechowywany w pamięci, więc potrzebujesz więcej pamięci RAM niż rozmiar słownika.

Rozmiar słownika zależy od ściśliwości danych, liczby plików, rozmiaru i ogólnego rozmiaru.

Zasadniczo 32 MB to więcej niż wystarcza, ale jeśli kompresujesz wiele plików z wieloma koncertami, możesz użyć znacznie większej liczby. Większe słowniki często spowalniają proces, ale skutkują mniejszym plikiem.


2
Czy ustawiony rozmiar jest limitem rozmiaru słownika, czy też będzie to rzeczywisty rozmiar? Czy programy (w szczególności 7-zip) zwykle inteligentnie określają, czy naprawdę muszą wypełnić cały dozwolony słownik?
Stan

1
Tak, to jest limit. Gdy są pełne, albo uruchamiają nowy słownik, albo inteligentnie wypychają stare dane. Chyba że dane do kompresji są większe niż rozmiar słownika, który zostanie wypełniony.
cybernard

@cybernard „zostanie wypełnione”? Dla jasności, czy rozmiar słownika pozostaje mniejszy niż limit, gdy nie jest wypełniony?
LonnieBest

1
@LonnieBest Tak, słownik zaczyna się zupełnie pusty. Co tyle bitów / bajtów tworzy nowy wpis słownika, dopóki się nie zapełni.
cybernard
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.