메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

[뇌를 자극하는 알고리즘] 중 허프만 알고리즘 관련하여 질문 있습니다.

2014-12-02

|

by hr1009

1913

void Huffman_BuildPrefixTree(HuffmanNode** Tree, SymbolInfo SymbolInfoTable[MAX_CHAR])
{
        int i=0;
        PQNode Result;
        PriorityQueue* PQ=PQ_Create(0);

        for(i=0;i                 if(SymbolInfoTable[i].Frequency>0){
                        HuffmanNode* BitNode=Huffman_CreateNode(SymbolInfoTable[i]);
                        PQNode NewNode;
                NewNode.Priority=SymbolInfoTable[i].Frequency;
                NewNode.Data=BitNode;
                        PQ_Enqueue(PQ, NewNode);
                }
        }

        while(PQ->UsedSize>1){
                SymbolInfo NewData={0, 0};
                HuffmanNode* BitNode=Huffman_CreateNode(NewData);
                HuffmanNode* Left;
                HuffmanNode* Right;
                
                PQNode QLeft;
                PQNode QRight;
                PQNode NewNode;

                PQ_Dequeue(PQ, &QLeft);
                PQ_Dequeue(PQ, &QRight);

                Left=(HuffmanNode*)QLeft.Data;
                Right=(HuffmanNode*)QRight.Data;
        
                BitNode->Data.Symbol=0;
                BitNode->Data.Frequency=Left->Data.Frequency+Right->Data.Frequency;

                BitNode->Left=Left;
                BitNode->Right=Right;

                NewNode.Priority=BitNode->Data.Frequency;
                NewNode.Data=BitNode;

                PQ_Enqueue(PQ, NewNode);
        }

        PQ_Dequeue(PQ, &Result);
        *Tree=(HuffmanNode*)Result.Data;
}

안녕하십니까?
뇌를 자극하는 알고리즘 책을 보면서 공부하던 중 질문이 있어 이렇게 글을 올리게 되었습니다.
코드중 위의 함수가 어떤식으로 작용하는 건지 이해가 잘 가지 않아서
선생님께서 주석을 조금 달아주신다던지 부분적으로 설명을 해주시면 갑사하겠습니다.
바쁘시겠지만 이 글을 보시게 된다면 답변 부탁드리겠습니다. 이상입니다.
댓글 입력