a
( 헤더 , "a" , n )a
엔a + lg엔ㅏa + lg(n )엔Θ ( lg( n )피/ n)p ≥ 1
lg엔엔ㅏ엔a + 1a + 2ㅏ엔a + 1엔a + 2엔
압축 비율이 시각적 관찰을위한 길이의 역비에 너무 가깝기 때문에 여기에 구현에 작은 길이의 데이터가 있습니다 (일부 입력을 압축하는 여러 가지 방법이 있기 때문에 bzip2 라이브러리의 버전에 따라 다를 수 있음) ). 첫 번째 열은의 수를 나타내고 a
두 번째 열은 압축 된 출력의 길이입니다.
1–3 37
4–99 39
100–115 37
116–258 39
259–354 45
355 43
356 40
357–370 41
371–498 43
499–513 41
514–609 45
610 43
611 41
613–625 42
626–753 44
754–764 42
765 40
766–767 41
768 42
769–864 45
…
Bzip2는 단순한 실행 길이 인코딩 보다 훨씬 복잡 합니다. 일련의 단계로 작동하며 첫 번째 단계는 실행 길이 인코딩 단계 이지만 고정 크기 제한이 있습니다. 첫 번째 단계는 다음과 같이 작동합니다. 바이트가 4 번 이상 반복되면 4 번째 이후의 바이트를 지운 바이트의 반복 횟수를 나타내는 바이트로 바꿉니다. 예를 들어, aaaaaaa
로 변환됩니다 aaaa\d{3}
( \d{003}
바이트 값이 3 인 문자는 어디 입니까). aaaa
로 변환됩니다 aaaa\d{0}
. 256 개의 서로 다른 바이트 값만 있기 때문에 바이트가 최대 259 회 반복되는 시퀀스 만이 방식으로 인코딩 할 수 있습니다. 더 많은 것이 있으면 새로운 시퀀스가 시작됩니다. 또한 참조 구현은 256 바이트의 문자열을 인코딩하는 반복 횟수 252에서 중지됩니다.
ㅏ엔1 ≤ n ≤ 34 ≤ n ≤ 258aaaa\d{252}
\d{252}
반복 횟수, 확인하지 않았습니다) 자체가 반복되므로 후속 단계로 압축됩니다.
aaaa\374aa
n = 258a
n = 100ㅏ101aaaa\d{97}
a
aaaaa
n = 101a
A
68 ≤ n ≤ 83
이 예제에 대한 나의 분석은 철저하지 않다. 다른 효과를 이해하려면 변환의 다른 단계를 연구해야합니다. 나는 대부분 9 단계 중 1 단계 후에 멈췄습니다. 이것이 압축비가 약간 고르지 않고 단조롭게 변하지 않는 이유에 대한 아이디어를 제공하기를 바랍니다. 모든 세부 사항을 실제로 알고 싶다면 기존 구현을 사용하여 디버거로 관찰하는 것이 좋습니다.
대부분의 경우 압축 알고리즘을 설계 할 때 이러한 미세한 변화가 주요 초점이 아닙니다. 범용 또는 미디어 압축 알고리즘과 같은 많은 일반적인 시나리오에서 몇 바이트의 차이는 관련이 없습니다. 압축은 로컬 수준에서 모든 비트를 짜내려고 시도하며, 거의 잃지 않고 자주 얻지 않는 방식으로 변환을 연결하려고 시도합니다. 그럼에도 불구하고 모든 비트가 중요한 저 대역 통신을 위해 설계된 특수 목적 통신 프로토콜과 같은 상황이 있습니다. 정확한 출력 길이가 중요한 또 다른 상황은 압축 된 텍스트가 암호화 된 경우입니다. 공격자가 압축 및 암호화 할 텍스트의 일부를 제출할 수있는 경우 암호 텍스트의 길이가 다양하면 압축 및 암호화 된 텍스트의 일부가 대적;범죄 악용 에 HTTPS .