实验报告
实验名称: 最优前缀编码
1.问题
给定字符集 和每个字符的频率 ,求关于 C 的 一个最优前缀码。
2.解析
3.设计
[核心伪代码]
void Huffman(HuffmanTree T,int n,int m,HuffmanCode H){
int p1,p2;//i
Init(T,m);
Weight(T,n);
for(int i=n;i<m;i++){
Min(T,i-1,&p1,&p2,m);
T[p1].parent=T[p2].parent=i;
T[i].lchild=p1;
T[i].rchild=p2;
T[i].weight=T[p1].weight+T[p2].weight;
}
int c,p,start;//i
char cd[n+1];
cd[n]='\0';
for(int i=0;i<n;i++){
start=n;
c=i;
while((p=T[c].parent)>=0){
if(T[p].lchild==c)
cd[--start]='0';
else
cd[--start]='1';
c=p;
}
strcpy(H[i].bits,&cd[start]);
}
}
4.分析
[算法复杂度推导]
O(nlogn)频率排序;for 循环 O(n),插入操作 O(logn),算法时间复杂 度是 O(nlogn)。
5.源码
[github源码地址]
https://github.com/Ayong-xie/Algorithm-suanfa/blob/main/%E6%9C%80%E4%BC%98%E5%89%8D%E7%BC%80%E7%A0%81