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