서로 매우 유사한 파일을 압축해야하는 경우가 종종 있습니다.
현재 7Zip을 사용하고 있습니다. Ultra는 8 코어를 사용하여 16GB 파일을 약 35 분 안에 1.2GB로 압축합니다.
그 시간의 대부분은 압축에 사용할 사전을 계산하는 데 소비되는 것 같습니다. 파일이 매우 유사하기 때문에 실제로 사용되는 사전도 비슷합니다.
사전을 저장하고 후속 파일에 저장된 사전을 재사용 할 수있는 Windows 기반 압축 도구 (알지 못하는 옵션이있는 7Zip 또는 다른 도구)가 있습니까?
압축률을 유지하면서 압축률을 유지하면서도 더 빠르게 압축하는 문제에 접근하는 더 좋은 방법이 있습니까?
답변
렘펠 – 지브 – 웰치 (LZW) 압축 알고리즘은 본질적으로 계산 집약적 작업 자체가 사전에 계산되는 실제의 대다수이다. 이것은 문자 그대로 LZW의 작동 방식입니다.
알고리즘 자체는 스캔 할 때마다 다음 “기호”마다 하나의 새 사전 항목을 추가하므로 매번 반복 할 때마다 새 항목이 사전에 추가됩니다. 실제로, 사전 은 파일의 압축 된 사본이되므로 실제로 LZW 압축이 처음 계산하는 데 상당한 시간을 소비 하는 유일한 것입니다.
Huffman encoding 과 같은 것을 사용하면 사전 재사용이 가능할 수 있습니다 (최적의 압축률 / 크기를 희생 할 수 있음). 그러나 대부분의 최신 압축 알고리즘 및 도구는 효율성과 속도를 위해 LZW 알고리즘을 사용합니다 (허프만 압축은 데이터를 두 번 통과해야합니다 (하나는 허프만 트리 / 테이블을 생성하고 다른 하나는 실제로 데이터를 압축 함)) 단일 패스).
답변
DEFLATE 알고리즘과 달리 7-Zip의 LZMA는 기본적으로 확실한 압축을 사용하므로 파일 간 중복성을 활용합니다. 파일이 충분히 작 으면 기본 설정으로 작동합니다.
솔리드 블록 크기 의 기본 설정이 2GB 인 경우 16GB 파일은 실제로 8 개의 개별 청크로 압축됩니다.
@Breakthorugh가 이미 말했듯이 사전은 즉시 생성됩니다. 솔리드 블록 크기 를 솔리드 (모든 파일을 한 번에 압축) 및 비 고체 (각 파일을 개별적으로 압축 ) 로 설정하여이를 경험적으로 확인할 수 있습니다 .
솔리드 블록 크기를 늘리면 실제로 속도가 느려지지만 압축 비율이 훨씬 좋아질 수 있습니다. 예를 들어, 동일한 파일 두 개를 압축하면 압축되지 않은 압축의 아카이브 크기가 거의 두 배가됩니다.