////
Search
Duplicate
🚪

Chapter 06. 데이터 압축의 비밀을 파헤쳐라!

01. 파일은 바이트 단위로 기록된다!

파일이란 디스크 등의 기록 매체에 데이터를 저장한 것을 가리키는데, 파일에 저장되는 데이터의 단위는 바이트다.
다시 말해 파일은 바이트의 집합체라고 할 수 있다.

02. ‘데이터 * 반복 횟수’로 압축하는 런 렝스 코딩

알파벳은 보통 한 문자가 1바이트의 데이터로 파일에 저장되어 있다. 만약 각 문자의 바로 뒤에 그 문자가 반복되어 나타나는 횟수를 적어 준다면 문자열을 압축할 수 있다.
이와 같이 파일의 내용을 데이터 * 반복 횟수로 해주 는 방법을 런 렝스 코딩이라고 한다. 이는 팩시밀리의 그림 압축 등에 사용되고 있다.

03. 런 렝스 코딩의 단점을 알아보자!

그러나 실제 문서 파일에는 보통 같은 문자가 여러번 계속해서 반복되는 부분은 많지 않으므로 런 렝스 코딩은 그림 파일처럼 같은 데이터가 반복되는 경우 그 효과를 발휘하지만 문서 파일에는 부적합하다.

04. 모스 부호를 닮은 허프만 코딩

허프만 코딩을 이해하려면 먼저 런 렝스 코딩에서 사용했던 알파벳 한 문자가 1바이트의 데이터라는 개념을 버려야 한다.
허프만 코딩은 반복해서 사용되는 데이터는 8비트보다 적은 비트 수로 나타내지만 별로 사용되지 않는 데이터를 나타낼 때는 8비트 이상을 사용해도 상관없다는 아이디어를 사용한다.
이해를 돕기 위해 모스 부호를 사용할 수 있는데 알파벳을 나타내는 모스 부호에서는 일반적인 문서의 내용 중 알파벳의 출현 빈도가 높은 문자일수록 짧은 신호로 나타내도록 정해져 있다.

05. 허프만 코딩의 단점을 보완해주는 허프만 트리

모스 부호는 각각의 문자가 일반적인 문서에서 나타나는 빈도를 기준으로 해서 부호의 데이터 길이를 정하고 있다.
허프만 코딩에서는 압축 대상이 되는 파일마다 최적의 부호 체계를 구축하고 이것을 기준으로 삼아 압축을 한다. 그렇기 때문에 허프만 코딩으로 압축하는 파일은 부호의 정보와 압축된 데이터 모두가 함께 저장된다.
0, 1, 10, 11 식으로 부호를 결정하다보면 부호를 혼동하게 되는데, 이를 해결하기 위해 허프만 트리를 사용해서 부호 체계를 구축한다.

06. 허프만 코딩으로 2배의 압축률을 체험하자!

허프만 트리를 사용하면 자주 반복되는 데이터일수록 적은 비트로 표현되면서 특정 데이터가 어디서부터 시작되고 어디서 끝나는지 알려주는 부호를 확실히 작성하는 일도 가능하다.

07. 그림 파일을 압축할 때는 손실 압축을 사용하자!

그림 파일은 그림 데이터를 모니터나 프린터 등에 출력하는 데 사용된다.
그림 파일에는 윈도우의 표준 그림 데이터 형식인 BMP 외에도 JPEG, TIFF, GIT 등으로 매우 다양하다. 손실 압축이 가능하기 때문에 런 렝스 코딩이나 허프만 코딩이 아닌 다른 기법을 사용할 수 있다.