SlideShare a Scribd company logo
1 of 14
Project #7:

Group codes




                   조 : D3

              조장 : 2011 최보은
조원 : 2008 고충욱

                 2009 김시백

                 2011 안영준

                 2011 정진아



                차 례

1. 프로젝트 설명

2. 일 정

3. 업무분담

4. 소 스


5. 회의록
1. 프로젝트 설명

허프만 코드(Huffman code)
허프만 부호화, 허프만 압축, 허프만 알고리즘등으로 불리우는 이 알고리즘은 문자들의 빈도수에

따라 서로 다른 길이의 부호를 부여하여 압축하는 방식으로, 1952 년 당시 박사과정 학생이던

데이비드 허프만이 A Method for the Construction of Minimum-Redundancy Codes 란 제목의 논문으로

처음 발표했습니다.허프만 알고리즘은 JPEG 이나 MPEG 같은 영상처리에서 많이 사용되고 있으며

우리가 많이 쓰는 알집 역시 허프만 알고리즘으로 한번 압축을 한 다음에 Lempel 이라는

알고리즘으로 압축을 합니다.허프만 알고리즘은 그렇게 어렵지 않은 알고리즘이면서도 꽤 괜찮은
압축율을 보입니다.이번 포스팅에서는 허프만 알고리즘의 원리와 절차에 대해서 알아보고 다음

포스팅                   쯤에서                   실제로                   구현해보도록

하겠습니다.======================================================================

====================허프만 부호화로 위키에서 검색을 해보면 간략한 설명과 함께 아래와

같은 간략한 절차가 나와 있습니다.


          1. 초기화 : 모든 기호를 출현 빈도수에 따라 나열한다.

          1. 단 한 가지 기호가 남을 때까지 아래 단계를 반복한다.


                    1. 목록으로부터 가장 빈도가 낮은 것을 2 개 고른다.

                    1. 그 다음 허프만이 두가지 기호를 부모 노드를 가지는 부트리를

                    구성하고 자식노드를 생성한다. 부모             노드 단     기호들의    빈도수를

                    더하여 주 노드에 할당하고 목록의 순서에 맞도록 목록에 삽입한다.

                    1. 목록에서 부모노드에 포함된 기호를 제거한다.


데이터          빈도수            등장확률(가중치)
A            3              0.3
B            1              0.1
C            1              0.1
D            1              0.1
E            2              0.2
F            2              0.2
문서를 허프만 알고리즘으로 압축하기 위해서는 먼저 문서 안에 포함된 문자들의 빈도수를

조사하여 정렬하는 절차가 필요합니다.만약 다음과 같은 데이터가 있다고 한다면 다음과 같은

빈도수를 줄 수 있습니다.데이터: ACABFEAFDE 위의 결과를 빈도수에 따라 오름차순으로 정렬을

합니다.
이제 이 값들을 이용하여 이진트리를 생성합니다.먼저 가장 작은 빈도수의 값을 두개 선택해서

리프노드를 두개 만들고 두 노드의 가중치를 더해서 부모노드를 만듭니다. 그리고 정렬된

리스트에서 선택된 두개의 노드를 삭제하고 부모노드를 추가 시킵니다.




위의 과정을 리스트에 노드가 1.0 하나만 남을 때까지 반복합니다. (모든 빈도수 확률을 더하면

1.0 이 되기 때문에)


================================================================================
                                   ==========




================================================================================
                                   ==========
================================================================================
                                   ==========




================================================================================
                                   ==========
================================================================================
                                   ==========


이렇게 완성된 이진트리를 루트노드부터 왼쪽은 0, 오른쪽은 1 을 부가해줍니다.
데이터         치환될 비트
A           00
B           0110
C           0111
D           010
E           10
F           11
이렇게   완성된   허프만    트리를   가지고   각   문자에   대한   비트를   부가합니다.A   의   경우는

루트노드에서 왼쪽으로 한번 갔다가 다시 한번 왼쪽으로 갔기 때문에 00 이 됩니다.마찬가지로

B 는 0110 이 되겠지요.이것을 정리하면 아래의 표와 같습니다.이 표를 보고 눈치채신 분도

있으실텐데 허프만 알고리즘의 핵심은 바로 이 표에 있습니다.가장 많은 빈도수의 데이터는 적은

비트, 상대적으로 적은 빈도수의 데이터들은 더 긴 비트를 서로 접두어가 겹치지 않도록

부가하여 압축하는 것입니다.즉, 비트의 앞에서부터 순서대로 탐색했을 때 유일의 리프노드로 갈

수 있도록 비트의 등장 순서를 유일하도록 해주는 것입니다.그런데 위의 경우는 같은 빈도수의

노드들이 몇개 있기 때문에 다른 모양의 트리로 만들어질 수도 있습니다. 같은 노드가 존재할 때

어떤 순서로 트리에 추가하느냐나 트리의 왼쪽, 오른쪽 어느쪽에 붙이느냐에 따라 조금 달라질
수도 있습니다. 하지만 결과적으로 부가되는 비트의 개수는 같기때문에 압축율은 같습니다.이제

처음에 압축하려고 했던 데이터를 압축하면 다음과 같아질 것입니다.


데이터: ACABFEAFDE 압축된 데이터: 0001110001101110001101010


처음의 데이터는 10 글자이므로 10 바이트 = 80 비트 입니다. 압축된 데이터는 25 글자이지만

비트데이터이므로 25 비트 입니다. 25 / 80 * 100 = 31.25% 의 압축율을 보이는 군요.물론 위의 예는

텍스트 문서일 때이고, 다른 종류의 파일이라면 약간 달라질 수 도 있습니다. 실제로는

트리정보에 대한 헤더도 추가해야되고 하니 조금 더 늘어나겠지만, 그래도 꽤 괜찮은 압축율을

보입니다.압축을 해제하는 것은 아주 쉽습니다.비트데이터를 허프만 트리에 넣고 루트노드부터

탐색해서 리프노드가 나오면 치환해주고, 다시 루트부터 탐색하는 식으로 데이터를 끝까지

읽으면 됩니다.




2. 일 정

  일 정                                   내 용

              프로젝트 진행방향 토의 후 팀원의 임무분담을 정함.
 ‘12. 6. 13
              알고리즘 구상, 소스 구현 및 프로젝트 관련 자료 수집

              소스의 문제점 토의 후 해결책 제시
 ‘12. 6. 20
              최종보고서 작성 후 검토


3. 업무분담
이 름                                       분 담 내 용

     최보은                    조장임무 및 자료조사


     고충욱                    알고리즘 구성 및 자료조사


     김시백                    보고서작성 및 자료조사


     안영준                    알고리즘을 바탕으로 한 소스구성


     정진아                    알고리즘 구성 및 자료조사


4. 소 스

#include <stdio.h>

int main()

{

char arr[26],brr[13],crr[7],drr[4],err[2],frr[1];

int aar[26];

char ch,chc[26];

int chi[26],chi2[26];

int chs[6];//좌표

int ar=0;//입력받은수

int a,b;//for 용

int in;

int zung;
int dai=9999;//최대

int sun;

for(;;){

zung=0;

scanf("%c",&ch);

if(ch=='n'){

break

}

for(a=0;a<=ar;a++){

if(chc[a]==ch){

chi[a]++;

chi2[a]++;

zung++;

}

}

if(zung==0){

chc[ar]=ch;

chi[ar]=1;

chi2[ar]=1;

ar++;

}

}

for(b=0;b<=ar-1;b++){

dai=9999;

for(a=0;a<=ar-1;a++){

if(chi2[a]<dai){

dai=chi2[a];
sun=a;

}

}

arr[b]=chc[sun];

aar[b]=dai;

chi2[sun]=10000;

}

for(a=0;a<=ar-1;a++){

printf("%c %dn",arr[a],aar[a]);

}

scanf("%d",in);

}

->최종 소스 실패(입력).



5. 회 의 록

<1 차>

    회의일시 2012 년 06 월 13 일            조      D3   작성자   11 최보은

    참석자           08 고충욱 09 김시백 11 안영준 11 정진아

                  1. 프로젝트 파악

                  2. 호프만 코딩 관한 회의
    회의안건
                  3. 업무분담

                  4. 다음 일정 계획

    회의내용                            내 용                  비 고
1. 프로젝트 파악

        : 압축하는 프로그램에 관한 내용으로 이번 프로젝트 주요

        내용 말고 도 다른 압축하는 알고리즘이 있는지 토의.

        조교님의 설명요지 파악

        2. 호프만 코드(Huffman code)관한 회의

        :   꼭   트리로   표현하여   0,1   을   매겨야만   원하는   값이

        나오는지, 다른방 법은 없는지 회의.

        3. 업무분담

        : 조장 : 최보은

        자료조사 : 김시백, 정진아

        알고리즘 구상 : 고충욱, 안영준

        4. 다음 일정 계획

        : 주말까지 자료조사 완료

        각자 호프만 코드에 대해 완전히 숙지해 오기.


<2 차>

회의일시 2012 년 06 월 19-20 일           조    D3    작성자    11 최보은

 참석자    08 고충욱 09 김시백 11 안영준 11 정진아

        1. 호프만 코드

        2. 알고리즘 회의
회의안건
        3. 최종 보고서 작성

        4. 발표 후 회의
내 용                비 고

       1. 자료조사

       : 자료조사를 통해 조원끼리 호프만 코드에 대해 의논을

       하여 완전히 숙지를 하였다.

       2. 알고리즘 회의

       : 입력 후 빈도수대로 출력하는 것과 이를 두 개씩 묶어

       최후엔 하나 의 노드까지 남게 하는 것 까진 하겠으나 그 뒤

       이를 한 트리로 구 현하는 것부터 문제가 됨. 어떻게 해결할
회의내용
       것인지 토의

       3. 최종 보고서 작성

       : 현재 상태를 기점으로 보고서를 작성

       4. 발표 후 회의

       : 처음 a 를 010 으로 지정했는데 그다음 파일에선 a 가

       011 이 나온다면 그때마다 값이 다르게 나오기 때문에

       분별하기 어렵다. 이를 해결할 방법이 없는지 조원끼리

       의논했지만 답이 나오지 않았다.

More Related Content

What's hot

파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)Tae Young Lee
 
Python basic grammer
Python basic grammerPython basic grammer
Python basic grammerCore.Today
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623Yong Joon Moon
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdolsseungdols
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6KoChungWook
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) Tae Young Lee
 
이산치수학 Project4
이산치수학 Project4이산치수학 Project4
이산치수학 Project4KoChungWook
 
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613KTH, 케이티하이텔
 
Python3 10장 문자열이야기
Python3 10장 문자열이야기Python3 10장 문자열이야기
Python3 10장 문자열이야기Jihoon Kong
 
Project#7 Group Codes Hwp
Project#7 Group Codes HwpProject#7 Group Codes Hwp
Project#7 Group Codes HwpKimjeongmoo
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
Binary Search
Binary SearchBinary Search
Binary Searchskku_npc
 

What's hot (20)

파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
 
Python basic grammer
Python basic grammerPython basic grammer
Python basic grammer
 
Study1
Study1Study1
Study1
 
skku cp2 w4
skku cp2 w4skku cp2 w4
skku cp2 w4
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
 
Cp2 w5
Cp2 w5Cp2 w5
Cp2 w5
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
 
이산치수학 Project4
이산치수학 Project4이산치수학 Project4
이산치수학 Project4
 
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
KTH_Detail day_화성에서 온 개발자 금성에서 온 기획자 시리즈_5차_데이터분석_조범석_20120613
 
7그룹 코드
7그룹 코드7그룹 코드
7그룹 코드
 
Nlp study1
Nlp study1Nlp study1
Nlp study1
 
자료구조04
자료구조04자료구조04
자료구조04
 
Python3 10장 문자열이야기
Python3 10장 문자열이야기Python3 10장 문자열이야기
Python3 10장 문자열이야기
 
Project#7 Group Codes Hwp
Project#7 Group Codes HwpProject#7 Group Codes Hwp
Project#7 Group Codes Hwp
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
Binary Search
Binary SearchBinary Search
Binary Search
 

Viewers also liked

Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Social Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkSocial Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkJane Frankland
 
Geometry Unit Slideshow
Geometry Unit SlideshowGeometry Unit Slideshow
Geometry Unit Slideshowmrsfrasure
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentationdogtipper
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 
자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1KoChungWook
 
이산치수학 Project6
이산치수학 Project6이산치수학 Project6
이산치수학 Project6KoChungWook
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3KoChungWook
 
이산치수학 Project5
이산치수학 Project5이산치수학 Project5
이산치수학 Project5KoChungWook
 
Story board
Story boardStory board
Story board10ggo
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Jane Frankland
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2KoChungWook
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 
Presentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisPresentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisrenskepat
 
数学之美与浪潮之巅
数学之美与浪潮之巅数学之美与浪潮之巅
数学之美与浪潮之巅wangqunbaidu
 

Viewers also liked (20)

Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Social Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkSocial Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time Talk
 
Geometry Unit Slideshow
Geometry Unit SlideshowGeometry Unit Slideshow
Geometry Unit Slideshow
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation
 
Klik today
Klik todayKlik today
Klik today
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 
자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1
 
이산치수학 Project6
이산치수학 Project6이산치수학 Project6
이산치수학 Project6
 
이산치수학 Project3
이산치수학 Project3이산치수학 Project3
이산치수학 Project3
 
이산치수학 Project5
이산치수학 Project5이산치수학 Project5
이산치수학 Project5
 
Azteca Mango
Azteca MangoAzteca Mango
Azteca Mango
 
Story board
Story boardStory board
Story board
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)Make It Happen - AWE Summitt 14 (Zurich)
Make It Happen - AWE Summitt 14 (Zurich)
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 
Presentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisPresentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuis
 
数学之美与浪潮之巅
数学之美与浪潮之巅数学之美与浪潮之巅
数学之美与浪潮之巅
 

Similar to 이산치수학 Project7

Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7mil23
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfkd19h
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfjinwookhong
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical MethodologyKyeongUkJang
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4KoChungWook
 
Coding interview
Coding interviewCoding interview
Coding interviewSoohan Ahn
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기Changwan Jun
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)pchmago
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
생각하는 프로그래밍 1부
생각하는 프로그래밍 1부생각하는 프로그래밍 1부
생각하는 프로그래밍 1부sj k
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHyo jeong Lee
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기Wonha Ryu
 

Similar to 이산치수학 Project7 (20)

Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
DS_04
DS_04DS_04
DS_04
 
자료구조06
자료구조06자료구조06
자료구조06
 
자료구조06
자료구조06자료구조06
자료구조06
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical Methodology
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4
 
Coding interview
Coding interviewCoding interview
Coding interview
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
생각하는 프로그래밍 1부
생각하는 프로그래밍 1부생각하는 프로그래밍 1부
생각하는 프로그래밍 1부
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear Regression
 
자구2번
자구2번자구2번
자구2번
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
 

이산치수학 Project7

  • 1. Project #7: Group codes 조 : D3 조장 : 2011 최보은
  • 2. 조원 : 2008 고충욱 2009 김시백 2011 안영준 2011 정진아 차 례 1. 프로젝트 설명 2. 일 정 3. 업무분담 4. 소 스 5. 회의록
  • 3. 1. 프로젝트 설명 허프만 코드(Huffman code) 허프만 부호화, 허프만 압축, 허프만 알고리즘등으로 불리우는 이 알고리즘은 문자들의 빈도수에 따라 서로 다른 길이의 부호를 부여하여 압축하는 방식으로, 1952 년 당시 박사과정 학생이던 데이비드 허프만이 A Method for the Construction of Minimum-Redundancy Codes 란 제목의 논문으로 처음 발표했습니다.허프만 알고리즘은 JPEG 이나 MPEG 같은 영상처리에서 많이 사용되고 있으며 우리가 많이 쓰는 알집 역시 허프만 알고리즘으로 한번 압축을 한 다음에 Lempel 이라는 알고리즘으로 압축을 합니다.허프만 알고리즘은 그렇게 어렵지 않은 알고리즘이면서도 꽤 괜찮은
  • 4. 압축율을 보입니다.이번 포스팅에서는 허프만 알고리즘의 원리와 절차에 대해서 알아보고 다음 포스팅 쯤에서 실제로 구현해보도록 하겠습니다.====================================================================== ====================허프만 부호화로 위키에서 검색을 해보면 간략한 설명과 함께 아래와 같은 간략한 절차가 나와 있습니다. 1. 초기화 : 모든 기호를 출현 빈도수에 따라 나열한다. 1. 단 한 가지 기호가 남을 때까지 아래 단계를 반복한다. 1. 목록으로부터 가장 빈도가 낮은 것을 2 개 고른다. 1. 그 다음 허프만이 두가지 기호를 부모 노드를 가지는 부트리를 구성하고 자식노드를 생성한다. 부모 노드 단 기호들의 빈도수를 더하여 주 노드에 할당하고 목록의 순서에 맞도록 목록에 삽입한다. 1. 목록에서 부모노드에 포함된 기호를 제거한다. 데이터 빈도수 등장확률(가중치) A 3 0.3 B 1 0.1 C 1 0.1 D 1 0.1 E 2 0.2 F 2 0.2 문서를 허프만 알고리즘으로 압축하기 위해서는 먼저 문서 안에 포함된 문자들의 빈도수를 조사하여 정렬하는 절차가 필요합니다.만약 다음과 같은 데이터가 있다고 한다면 다음과 같은 빈도수를 줄 수 있습니다.데이터: ACABFEAFDE 위의 결과를 빈도수에 따라 오름차순으로 정렬을 합니다.
  • 5. 이제 이 값들을 이용하여 이진트리를 생성합니다.먼저 가장 작은 빈도수의 값을 두개 선택해서 리프노드를 두개 만들고 두 노드의 가중치를 더해서 부모노드를 만듭니다. 그리고 정렬된 리스트에서 선택된 두개의 노드를 삭제하고 부모노드를 추가 시킵니다. 위의 과정을 리스트에 노드가 1.0 하나만 남을 때까지 반복합니다. (모든 빈도수 확률을 더하면 1.0 이 되기 때문에) ================================================================================ ========== ================================================================================ ==========
  • 6. ================================================================================ ========== ================================================================================ ==========
  • 7. ================================================================================ ========== 이렇게 완성된 이진트리를 루트노드부터 왼쪽은 0, 오른쪽은 1 을 부가해줍니다.
  • 8. 데이터 치환될 비트 A 00 B 0110 C 0111 D 010 E 10 F 11 이렇게 완성된 허프만 트리를 가지고 각 문자에 대한 비트를 부가합니다.A 의 경우는 루트노드에서 왼쪽으로 한번 갔다가 다시 한번 왼쪽으로 갔기 때문에 00 이 됩니다.마찬가지로 B 는 0110 이 되겠지요.이것을 정리하면 아래의 표와 같습니다.이 표를 보고 눈치채신 분도 있으실텐데 허프만 알고리즘의 핵심은 바로 이 표에 있습니다.가장 많은 빈도수의 데이터는 적은 비트, 상대적으로 적은 빈도수의 데이터들은 더 긴 비트를 서로 접두어가 겹치지 않도록 부가하여 압축하는 것입니다.즉, 비트의 앞에서부터 순서대로 탐색했을 때 유일의 리프노드로 갈 수 있도록 비트의 등장 순서를 유일하도록 해주는 것입니다.그런데 위의 경우는 같은 빈도수의 노드들이 몇개 있기 때문에 다른 모양의 트리로 만들어질 수도 있습니다. 같은 노드가 존재할 때 어떤 순서로 트리에 추가하느냐나 트리의 왼쪽, 오른쪽 어느쪽에 붙이느냐에 따라 조금 달라질
  • 9. 수도 있습니다. 하지만 결과적으로 부가되는 비트의 개수는 같기때문에 압축율은 같습니다.이제 처음에 압축하려고 했던 데이터를 압축하면 다음과 같아질 것입니다. 데이터: ACABFEAFDE 압축된 데이터: 0001110001101110001101010 처음의 데이터는 10 글자이므로 10 바이트 = 80 비트 입니다. 압축된 데이터는 25 글자이지만 비트데이터이므로 25 비트 입니다. 25 / 80 * 100 = 31.25% 의 압축율을 보이는 군요.물론 위의 예는 텍스트 문서일 때이고, 다른 종류의 파일이라면 약간 달라질 수 도 있습니다. 실제로는 트리정보에 대한 헤더도 추가해야되고 하니 조금 더 늘어나겠지만, 그래도 꽤 괜찮은 압축율을 보입니다.압축을 해제하는 것은 아주 쉽습니다.비트데이터를 허프만 트리에 넣고 루트노드부터 탐색해서 리프노드가 나오면 치환해주고, 다시 루트부터 탐색하는 식으로 데이터를 끝까지 읽으면 됩니다. 2. 일 정 일 정 내 용 프로젝트 진행방향 토의 후 팀원의 임무분담을 정함. ‘12. 6. 13 알고리즘 구상, 소스 구현 및 프로젝트 관련 자료 수집 소스의 문제점 토의 후 해결책 제시 ‘12. 6. 20 최종보고서 작성 후 검토 3. 업무분담
  • 10. 이 름 분 담 내 용 최보은 조장임무 및 자료조사 고충욱 알고리즘 구성 및 자료조사 김시백 보고서작성 및 자료조사 안영준 알고리즘을 바탕으로 한 소스구성 정진아 알고리즘 구성 및 자료조사 4. 소 스 #include <stdio.h> int main() { char arr[26],brr[13],crr[7],drr[4],err[2],frr[1]; int aar[26]; char ch,chc[26]; int chi[26],chi2[26]; int chs[6];//좌표 int ar=0;//입력받은수 int a,b;//for 용 int in; int zung;
  • 12. sun=a; } } arr[b]=chc[sun]; aar[b]=dai; chi2[sun]=10000; } for(a=0;a<=ar-1;a++){ printf("%c %dn",arr[a],aar[a]); } scanf("%d",in); } ->최종 소스 실패(입력). 5. 회 의 록 <1 차> 회의일시 2012 년 06 월 13 일 조 D3 작성자 11 최보은 참석자 08 고충욱 09 김시백 11 안영준 11 정진아 1. 프로젝트 파악 2. 호프만 코딩 관한 회의 회의안건 3. 업무분담 4. 다음 일정 계획 회의내용 내 용 비 고
  • 13. 1. 프로젝트 파악 : 압축하는 프로그램에 관한 내용으로 이번 프로젝트 주요 내용 말고 도 다른 압축하는 알고리즘이 있는지 토의. 조교님의 설명요지 파악 2. 호프만 코드(Huffman code)관한 회의 : 꼭 트리로 표현하여 0,1 을 매겨야만 원하는 값이 나오는지, 다른방 법은 없는지 회의. 3. 업무분담 : 조장 : 최보은 자료조사 : 김시백, 정진아 알고리즘 구상 : 고충욱, 안영준 4. 다음 일정 계획 : 주말까지 자료조사 완료 각자 호프만 코드에 대해 완전히 숙지해 오기. <2 차> 회의일시 2012 년 06 월 19-20 일 조 D3 작성자 11 최보은 참석자 08 고충욱 09 김시백 11 안영준 11 정진아 1. 호프만 코드 2. 알고리즘 회의 회의안건 3. 최종 보고서 작성 4. 발표 후 회의
  • 14. 내 용 비 고 1. 자료조사 : 자료조사를 통해 조원끼리 호프만 코드에 대해 의논을 하여 완전히 숙지를 하였다. 2. 알고리즘 회의 : 입력 후 빈도수대로 출력하는 것과 이를 두 개씩 묶어 최후엔 하나 의 노드까지 남게 하는 것 까진 하겠으나 그 뒤 이를 한 트리로 구 현하는 것부터 문제가 됨. 어떻게 해결할 회의내용 것인지 토의 3. 최종 보고서 작성 : 현재 상태를 기점으로 보고서를 작성 4. 발표 후 회의 : 처음 a 를 010 으로 지정했는데 그다음 파일에선 a 가 011 이 나온다면 그때마다 값이 다르게 나오기 때문에 분별하기 어렵다. 이를 해결할 방법이 없는지 조원끼리 의논했지만 답이 나오지 않았다.