2010년 10월 4일 월요일

인코딩(Encoding)이란 무엇일까?

인코딩... 왠지 생소하지많은 않은 단어다. 이번단원에서는 컴퓨터를 하면서 한 두 번 쯤은 들어보았던 지식들이지만 관심을 갖고 직접적으로 찾아보지 않고 그냥 호기심채로 묻어둔 것들에 대한 것이 많았다. 가령 매번 동영상재생프로그램을 사용할때 가끔씩 발생하는 코댁을 찾지 못했다는 오류를 보면서도 그냥 네x버 지식인을 대강 훑어 보면서 순간순간을 모면하는 그런 상황...? 모든 궁금한 것을 찾아보면 좋겠지만 그러자면 글이 너무 길어 질수도 있으니까...(사실 내가 귀찮아...) 그 중에서도 유난히 관심있던 인코딩에 대해서 알아보기로 하겠다.

일단 인코딩의 정의부터 알아보자면

인코딩(encoding)은 다음을 가리키는 말이다.
  • 문자 인코딩(文字-, 영어: character encoding)은 문자들의 집합을 부호화하는 방법이다.
  • 부호화(符號化, 영어: encoding)는 정보의 형태나 형식을 변환하는 처리나 처리 방식이다.
 출처 - http://ko.wikipedia.org/wiki/%EC%9D%B8%EC%BD%94%EB%94%A9

아... 인코딩이라는게 문자 인코딩 + 부호화인데 거두절미하면 문자들의 정보의 형태나 형식을 변환하는 처리나 처리방식 이라는 거구나. 근대 왜 항상 정의만 보면 머릿속으로 뭔가 와닿지를 않을까? 그런의미에서 예시를 살펴보면서 보다 정확하게 인코딩에 대해 알아보아야겠다.


Huffman Code

우선 Huffman Code(이하 HC)는 정보의 손실없이 전체 데이터의 양을 줄여서 정보처리의 효율성을 올리려는 방법이다. 개념은 가장 많이 사용되는 바이트를 적은비트에 할당하고, 가장 적게 사용되는 바이트를 더 많은 비트로 할당하는 것이라고한다. 그렇기 때문에 더 많은 바이트에서는 더 적은 비트를 사용하게 되고 더 적은 바이트에서는 더 적은 비트를 사용하게 된다. 무슨 말인지 잘 모르겠으므로 조금 더 세부적인 내용을 살펴보자면 지난 일정한 기간동안 사용된 데이터의 유형을 분석해서 데이터의 사용빈도를 자료로 사용해서

-사용하고있는 데이터 중 사용될 확률이 가장 낮은 두 데이터를 선택
-선택한 두 데이터의 끝 비트를 0과 1로 설정
-선택한 두 데이트를 하나의 복한적인 데이터로 하고 이 복한적인 데이터의 출현확률은 두 데이터의 확률의 합이다.
-위의 과정들을 반복해서 하나의 복합데이터가 만들어지면 종료한다.
-위 과정을 이진수로 구성하고 상위노드에서 하위노드로 부모노드의 코드를 자식노드에 상속한다.


여기까지는 찾아본 정보를 내 나름대로 재해석 한것이다. 하지만... 이 그림은 출처의 주인장님이 복사를 안돼게 하셨다... 그러므로 실제로 사용된 그림예시는 출처를 통해서 참조해 주기를 바란다. 출처 - http://blog.naver.com/nikismy?Redirect=Log&logNo=49171821

위의 출처의 정보로 끝내기에는 아직 실재로 문자열을 보고 HC로 바꾸기가 어려웠기 때문에 다른 자료를 찾아보기로 했다. 정의나 뭐 개념들도 중요하지만 실제 문제로 나오거나 실생활에서 스스로 적용할 수 없다면 헛수고 아닌가... 그래서 본인 스스로가 조금 더 이해하기 쉬운 난이도가 낮은 문제와 해설을 찾았다.

문제 : ABBAACD를 허프만 코드를 이용해 바꿔보자!

해설

앞어 얘기한 것처럼 허프만코드는 일단 문자가 쓰인 빈도를 통계자료로서 사용 해야 되기 때문에 각 문자가 쓰인 빈도를 알아보아야 한다.

빈도수

A
 B
 C
 D
 빈도수
 3
  2
 1
 1

우선 빈도수가 가장적은것끼리 묶는다.



그 다음 빈도수가 제일 적은것 끼리 또 묶어준다.



이 작업을 계속 반복해준다.


이렇게 허프만 트리를 만듦으로서 보다 이해하기 쉬운 허프만 테이블을 만들 수 있다.

 데이터
 코드
 길이
 A
 01
 2
 B
 001
 3
 C
 0001
 4
 D
 0010
 4

그래서 정답은 ? 01001001010100010010

와하하하하 이제이해가 조금간다...나중에 시험준비할때 이거보고 공부해야지ㅋㅋ
 

댓글 1개: