일련의 "a"에 대해 압축 비율이 bzip2를 사용하는 이유는 무엇입니까?


15
library(ggplot2)

compress <- function(str) {
  length(memCompress(paste(rep("a", str), collapse=""), type="bzip2"))
  / nchar(paste(rep("a", str), collapse=""))
}

cr <- data.frame(i = 1:10000, r = sapply(1:10000, compress))

ggplot(cr[cr$i>=5000 & cr$i<=10000,], aes(x=i, y=r)) + geom_line()

여기에 이미지 설명을 입력하십시오

압축비는 "a"에 대해 37에서 시작하여 39 "a"에 손익분기 점에 도달합니다 (압축비 = 1). 차트는 매우 매끄럽게 시작하여 98 "a"에 대해 갑자기 초라하고 점점 더 작은 간격으로 시작합니다.

지역의 저음과 부드러운 부분도 상당히 불규칙하고 무작위로 보입니다. 이 예제에서 bzip2가 왜이 동작을 표시하는지 설명해 줄 수 있습니까?

답변:


14

a(머리글,"ㅏ",)a+lg+lg()Θ(lg()/)1

lg+1+2+1+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에서 중지됩니다.

14258aaaa\d{252}\d{252} 반복 횟수, 확인하지 않았습니다) 자체가 반복되므로 후속 단계로 압축됩니다.

aaaa\374aa=258a

=100101aaaa\d{97}aaaaaa=101aA6883

이 예제에 대한 나의 분석은 철저하지 않다. 다른 효과를 이해하려면 변환의 다른 단계를 연구해야합니다. 나는 대부분 9 단계 중 1 단계 후에 멈췄습니다. 이것이 압축비가 약간 고르지 않고 단조롭게 변하지 않는 이유에 대한 아이디어를 제공하기를 바랍니다. 모든 세부 사항을 실제로 알고 싶다면 기존 구현을 사용하여 디버거로 관찰하는 것이 좋습니다.

대부분의 경우 압축 알고리즘을 설계 할 때 이러한 미세한 변화가 주요 초점이 아닙니다. 범용 또는 미디어 압축 알고리즘과 같은 많은 일반적인 시나리오에서 몇 바이트의 차이는 관련이 없습니다. 압축은 로컬 수준에서 모든 비트를 짜내려고 시도하며, 거의 잃지 않고 자주 얻지 않는 방식으로 변환을 연결하려고 시도합니다. 그럼에도 불구하고 모든 비트가 중요한 저 대역 통신을 위해 설계된 특수 목적 통신 프로토콜과 같은 상황이 있습니다. 정확한 출력 길이가 중요한 또 다른 상황은 압축 된 텍스트가 암호화 된 경우입니다. 공격자가 압축 및 암호화 할 텍스트의 일부를 제출할 수있는 경우 암호 텍스트의 길이가 다양하면 압축 및 암호화 된 텍스트의 일부가 대적;범죄 악용HTTPS .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.