유사한 파일을 효율적으로 압축


11

서로 매우 유사한 파일을 압축해야하는 경우가 종종 있습니다.

현재 7Zip을 사용하고 있습니다. Ultra는 8 코어를 사용하여 16GB 파일을 약 35 분 안에 1.2GB로 압축합니다.

그 시간의 대부분은 압축에 사용할 사전을 계산하는 데 소비되는 것 같습니다. 파일이 매우 유사하기 때문에 실제로 사용되는 사전도 비슷합니다.

사전을 저장하고 후속 파일에 저장된 사전을 재사용 할 수있는 Windows 기반 압축 도구 (알지 못하는 옵션이있는 7Zip 또는 다른 도구)가 있습니까?

압축률을 유지하면서 압축률을 유지하면서도 더 빠르게 압축하는 문제에 접근하는 더 좋은 방법이 있습니까?

답변:


5

렘펠 - 지브 - 웰치 (LZW) 압축 알고리즘은 본질적으로 계산 집약적 작업 자체가 사전에 계산되는 실제의 대다수이다. 이것은 문자 그대로 LZW의 작동 방식입니다.

알고리즘 자체는 스캔 할 때마다 다음 "기호"마다 하나의 새 사전 항목을 추가하므로 매번 반복 할 때마다 새 항목이 사전에 추가됩니다. 실제로, 사전 파일의 압축 된 사본이되므로 실제로 LZW 압축이 처음 계산하는 데 상당한 시간을 소비 하는 유일한 것입니다.


Huffman encoding 과 같은 것을 사용하면 사전 재사용이 가능할 수 있습니다 (최적의 압축률 / 크기를 희생 할 수 있음). 그러나 대부분의 최신 압축 알고리즘 및 도구는 효율성과 속도를 위해 LZW 알고리즘을 사용합니다 (허프만 압축은 데이터를 두 번 통과해야합니다 (하나는 허프만 트리 / 테이블을 생성하고 다른 하나는 실제로 데이터를 압축 함)) 단일 패스).


1
허프만과 사전 정의 된 사전을 사용하면 단 한 번만 통과하면됩니까? 저장된 사전을 지원하는 상용 허프만 기반 도구가 있습니까?
Eric J.

@EricJ. 예, 사전 정의 된 사전을 사용하면 단일 패스 인코딩이됩니다. 개인적으로 작성한 프로그램이 있지만이를 수행 할 수있는 소프트웨어를 모릅니다. 시도하지는 않았지만 이 도구 는 그렇게 할 수있는 것처럼 보입니다. 그러나 (LZW와 달리) 허프만 인코딩 된 비트 스트림을 디코딩하려면 데이터를 압축 해제하기 위해 여전히 원래 사전이 필요합니다.
획기적인

해당 도구의 수명을 기준으로 단일 스레드로 추측됩니다. 나는 고정 사전에 어떤 이익을 상쇄 한 핵심보다는 8을 사용 거라 생각 :-( (데이터 센터 사이에 큰 파일을 전송하는) 내 시나리오에서 가능하다 다른 쪽 끝에있는 사전을 사용할 수를 가졌어요.
에릭 J.

2

DEFLATE 알고리즘과 달리 7-Zip의 LZMA는 기본적으로 확실한 압축을 사용하므로 파일 간 중복성을 활용합니다. 파일이 충분히 작 으면 기본 설정으로 작동합니다.

솔리드 블록 크기 의 기본 설정이 2GB 인 경우 16GB 파일은 실제로 8 개의 개별 청크로 압축됩니다.

@Breakthorugh가 이미 말했듯이 사전은 즉시 생성됩니다. 솔리드 블록 크기솔리드 (모든 파일을 한 번에 압축) 및 비 고체 (각 파일을 개별적으로 압축 ) 로 설정하여이를 경험적으로 확인할 수 있습니다 .

솔리드 블록 크기를 늘리면 실제로 속도가 느려지지만 압축 비율이 훨씬 좋아질 수 있습니다. 예를 들어, 동일한 파일 두 개를 압축하면 압축되지 않은 압축의 아카이브 크기가 거의 두 배가됩니다.


1
필자의 경우 비슷한 경우에 다른 파일을 한 번에 하나씩 압축합니다. 주어진 아카이브에는 하나의 16GB 파일 만 있습니다.
Eric J.

그래. 나는 그것을 잘못 해석했다. 새 보관 파일을 만들 때 기존 보관 파일이 삭제됩니까? 그렇지 않다면, 하나의 아카이브에 여러 파일을 저장할 수 있습니까? 압축 속도에는 도움이되지 않지만 파일의 실제 유사성에 따라 비율에 도움이 될 수 있습니다.
Dennis

1
신경 쓰지 마라. 견고한 아카이브를 업데이트하는 데는 시간이 많이 걸리지 만 더 나은 압축 결과는 없습니다.
Dennis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.