01. 파일은 바이트 단위로 기록된다!
•
파일이란 디스크 등의 기록 매체에 데이터를 저장한 것을 가리키는데, 파일에 저장되는 데이터의 단위는 바이트다.
◦
다시 말해 파일은 바이트의 집합체라고 할 수 있다.
02. ‘데이터 * 반복 횟수’로 압축하는 런 렝스 코딩
•
알파벳은 보통 한 문자가 1바이트의 데이터로 파일에 저장되어 있다. 만약 각 문자의 바로 뒤에 그 문자가 반복되어 나타나는 횟수를 적어 준다면 문자열을 압축할 수 있다.
•
이와 같이 파일의 내용을 데이터 * 반복 횟수로 해주 는 방법을 런 렝스 코딩이라고 한다. 이는 팩시밀리의 그림 압축 등에 사용되고 있다.
03. 런 렝스 코딩의 단점을 알아보자!
•
그러나 실제 문서 파일에는 보통 같은 문자가 여러번 계속해서 반복되는 부분은 많지 않으므로 런 렝스 코딩은 그림 파일처럼 같은 데이터가 반복되는 경우 그 효과를 발휘하지만 문서 파일에는 부적합하다.
04. 모스 부호를 닮은 허프만 코딩
•
허프만 코딩을 이해하려면 먼저 런 렝스 코딩에서 사용했던 알파벳 한 문자가 1바이트의 데이터라는 개념을 버려야 한다.
•
허프만 코딩은 반복해서 사용되는 데이터는 8비트보다 적은 비트 수로 나타내지만 별로 사용되지 않는 데이터를 나타낼 때는 8비트 이상을 사용해도 상관없다는 아이디어를 사용한다.
•
이해를 돕기 위해 모스 부호를 사용할 수 있는데 알파벳을 나타내는 모스 부호에서는 일반적인 문서의 내용 중 알파벳의 출현 빈도가 높은 문자일수록 짧은 신호로 나타내도록 정해져 있다.
05. 허프만 코딩의 단점을 보완해주는 허프만 트리
•
모스 부호는 각각의 문자가 일반적인 문서에서 나타나는 빈도를 기준으로 해서 부호의 데이터 길이를 정하고 있다.
•
허프만 코딩에서는 압축 대상이 되는 파일마다 최적의 부호 체계를 구축하고 이것을 기준으로 삼아 압축을 한다. 그렇기 때문에 허프만 코딩으로 압축하는 파일은 부호의 정보와 압축된 데이터 모두가 함께 저장된다.
•
0, 1, 10, 11 식으로 부호를 결정하다보면 부호를 혼동하게 되는데, 이를 해결하기 위해 허프만 트리를 사용해서 부호 체계를 구축한다.
06. 허프만 코딩으로 2배의 압축률을 체험하자!
•
허프만 트리를 사용하면 자주 반복되는 데이터일수록 적은 비트로 표현되면서 특정 데이터가 어디서부터 시작되고 어디서 끝나는지 알려주는 부호를 확실히 작성하는 일도 가능하다.
07. 그림 파일을 압축할 때는 손실 압축을 사용하자!
•
그림 파일은 그림 데이터를 모니터나 프린터 등에 출력하는 데 사용된다.
•
그림 파일에는 윈도우의 표준 그림 데이터 형식인 BMP 외에도 JPEG, TIFF, GIT 등으로 매우 다양하다. 손실 압축이 가능하기 때문에 런 렝스 코딩이나 허프만 코딩이 아닌 다른 기법을 사용할 수 있다.