본문 바로가기

Computer Science/알고리즘

데이터 압축

압축은 기존의 데이터를 변형하여 더 적은 용량을 갖는 데이터로 만드는 데에 그 목적이 있다. 물론 압축 결과로 생기는 부가 데이터 등으로 인해 데이터의 용량이 늘어나는 경우도 있지만 기본 목적은 데이터 용량을 줄이는 것이다. 

 

이러한 압축은 데이터의 손실 여부에 따라 두 가지로 나눌 수 있다. 압축 후 추출하는 과정에서 데이터 손실이 발생했다면 손실 압축, 그렇지 않다면 무손실 압축이다. 

백업 파일을 저장할 때, 때때로 압축 프로그램을 쓴다. 일반적으로 데이터의 용량이 줄어들고 하나의 파일로 묶을 수 있어 데이터 관리나 전송을 용이하게 한다. 이렇게 압축된 데이터를 풀면 압축하기 전 그대로의 데이터를 얻을 수 있다. 무손실 압축이 적용된 것이다. 

또 다른 예로 인터넷 사이트에서 동영상을 다운로드할 때, 화질을 선택하는 경우를 들 수 있다. 화질에 따라 용량이 차이가 나고 다운로드 시간도 상연히 차이가 나게 된다. 원본 데이터에 비해 좋지 않은 화질을 선택했다면, 손실 압축이 발생했다고 볼 수 있다. 

 

"미래를 바꾼 아홉 가지 알고리즘"(존 매코믹, 에이콘)에서는 다양한 종류의 압축 알고리즘을 소개한다. 간단히 정리를 해보면 다음과 같다. 

 

  • 무손실 압축
    • 런 렝스 인코딩(run-length encoding)
      : 인접한 데이터가 반복될 때, 전체 데이터를 반복되는 횟수와 반복되는 데이터로 나타낸다. 
    • 전과 같음 트릭(same-as-earlier trick)
      : 일부 데이터가 반복될 때, 원본 데이터를 반복되는 일부 데이터의 위치와 반복 횟수로 대체한다. 
    • 더 짧은 심벌 트릭(shorter-symbol trick)
      : 자주 사용되는 문자에 더 짧은 숫자를 대응시켜 데이터를 압축한다. 
  • 손실 압축
    • 생략 트릭:
      일정 규칙에 따라 데이터를 생략하여 데이터의 수를 줄인다. 

이 중에서 더 짧은 심벌 트릭의 일종인 허프만 코딩을 이용한 압축에 대해 다음 포스팅에서 더 깊이 알아보려고 한다.