압축은 기존의 데이터를 변형하여 더 적은 용량을 갖는 데이터로 만드는 데에 그 목적이 있다. 물론 압축 결과로 생기는 부가 데이터 등으로 인해 데이터의 용량이 늘어나는 경우도 있지만 기본 목적은 데이터 용량을 줄이는 것이다.
이러한 압축은 데이터의 손실 여부에 따라 두 가지로 나눌 수 있다. 압축 후 추출하는 과정에서 데이터 손실이 발생했다면 손실 압축, 그렇지 않다면 무손실 압축이다.
백업 파일을 저장할 때, 때때로 압축 프로그램을 쓴다. 일반적으로 데이터의 용량이 줄어들고 하나의 파일로 묶을 수 있어 데이터 관리나 전송을 용이하게 한다. 이렇게 압축된 데이터를 풀면 압축하기 전 그대로의 데이터를 얻을 수 있다. 무손실 압축이 적용된 것이다.
또 다른 예로 인터넷 사이트에서 동영상을 다운로드할 때, 화질을 선택하는 경우를 들 수 있다. 화질에 따라 용량이 차이가 나고 다운로드 시간도 상연히 차이가 나게 된다. 원본 데이터에 비해 좋지 않은 화질을 선택했다면, 손실 압축이 발생했다고 볼 수 있다.
"미래를 바꾼 아홉 가지 알고리즘"(존 매코믹, 에이콘)에서는 다양한 종류의 압축 알고리즘을 소개한다. 간단히 정리를 해보면 다음과 같다.
- 무손실 압축
- 런 렝스 인코딩(run-length encoding)
: 인접한 데이터가 반복될 때, 전체 데이터를 반복되는 횟수와 반복되는 데이터로 나타낸다. - 전과 같음 트릭(same-as-earlier trick)
: 일부 데이터가 반복될 때, 원본 데이터를 반복되는 일부 데이터의 위치와 반복 횟수로 대체한다. - 더 짧은 심벌 트릭(shorter-symbol trick)
: 자주 사용되는 문자에 더 짧은 숫자를 대응시켜 데이터를 압축한다.
- 런 렝스 인코딩(run-length encoding)
- 손실 압축
- 생략 트릭:
일정 규칙에 따라 데이터를 생략하여 데이터의 수를 줄인다.
- 생략 트릭:
이 중에서 더 짧은 심벌 트릭의 일종인 허프만 코딩을 이용한 압축에 대해 다음 포스팅에서 더 깊이 알아보려고 한다.
'Computer Science > 알고리즘' 카테고리의 다른 글
[Swift] 허프만 코딩 구현 1 - 문자열 압축 (0) | 2021.06.11 |
---|---|
허프만 코딩 2 - 문자열 압축과 추출 (0) | 2021.06.10 |
허프만 코딩 1 - 허프만 코드 구하기 (0) | 2021.06.10 |
[Swift]Random Surfer Trick 동작 확인 (0) | 2021.05.30 |
[Swift]Random Surfer Trick 구현 (0) | 2021.05.30 |