데이터 구조와 알고리즘(7) 하프만 트리(Huffman)와 하프만 인코딩

1. 알고리즘 사상
하프만 나무는 최우수 두 갈래 나무라고도 불리며 대권 경로의 길이가 가장 짧은 두 갈래 나무이다.트리의 리본 경로 길이란 트리에 있는 모든 잎 결점의 값을 루트 결점까지의 경로 길이에 곱한 값입니다. (루트 결점이 0층이면 잎 결점에서 루트 결점까지의 경로 길이는 잎 결점의 층수입니다.)나무의 경로 길이는 나무 뿌리에서 매 결점까지의 경로 길이의 합으로 WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln), N개의 권한 Wi(i=1, 2,...n)로 N개의 잎결점이 있는 두 갈래 나무를 구성하고 해당하는 잎결점의 경로 길이는 Li(i=1, 2,...n)이다
2. 알고리즘 구현
#include 
#include 
//      
struct huffmannode
{
    int weight;
    int tag,LeftChild,RightChild;
};

typedef  struct huffmannode Huffmannode;

void InitHuffmannode(Huffmannode *h,int t,int l,int r)
{
    h->tag=t;
    h->LeftChild=l;
    h->RightChild=r;
}
struct huffmantree
{
    int root;
};

typedef struct huffmantree Huffmantree;

void InitHuffmantree(Huffmantree *ht,int r)
{
    ht->root=r;
}
// 
void makeHuffmantree(Huffmantree *ht,int a[],Huffmannode b[],int n)
{
    int i,j,m1,m2,x1,x2;
    //  Huffman  */
    for(i=0; iroot=2*n-2;
}
// ( 0 1)
int main()
{
    printf(" ( 0  
"); return 0; }

 

좋은 웹페이지 즐겨찾기