中易网

哈夫曼编码问题

答案:2  悬赏:50  
解决时间 2021-02-12 03:55
哈夫曼编码问题
最佳答案
A 7
B 27
C 3
D 5
E 11

原理:取权重之和最小的两个节点(根节点)组成二叉树,如此循环,直到没有一个剩下。

第一步:
8
/ \
3 5
C D

第二步:
15
/ \
7 8
A / \
3 5
C D

第三步:
26
/ \
11 15
E / \
7 8
A / \
3 5
C D

第四步:
53
/ \
26 27
/ \ B
11 15
E / \
7 8
A / \
3 5
C D

最后一步——编码:
左分支为0,右分支为1,则结果为:
A: 010
B: 1
C: 0110
D: 0111
E: 00
全部回答

呵呵,分数太少了啊。代码贴给你了,测试没问题

#include "stdafx.h" // huffman.cpp : 定义控制台应用程序的入口点。 // #include <stdio.h> #include <string.h> #define n 50 #define m 2*n-1

typedef struct { char data[5]; int weight; int parent; int lchild; int rchild; } htnode;

typedef struct { char cd[n]; int start; } hcode;

void createht(htnode ht[],int n) { int i,k,lnode,rnode; int min1,min2; for (i=0;i<2*n-1;i++) ht[i].parent=ht[i].lchild=ht[i].rchild=-1; for (i=n;i<2*n-1;i++) { min1=min2=32767; lnode=rnode=-1; for (k=0;k<=i-1;k++) if (ht[k].parent==-1) { if (ht[k].weight<min1) { min2=min1;rnode=lnode; min1=ht[k].weight;lnode=k; } else if (ht[k].weight<min2) { min2=ht[k].weight;rnode=k; } } ht[lnode].parent=i;ht[rnode].parent=i; ht[i].weight=ht[lnode].weight+ht[rnode].weight; ht[i].lchild=lnode;ht[i].rchild=rnode; } }

void createhcode(htnode ht[],hcode hcd[],int n) { int i,f,c; hcode hc; for (i=0;i<n;i++) { hc.start=n;c=i; f=ht[i].parent; while (f!=-1) { if (ht[f].lchild==c) hc.cd[hc.start--]='0'; else hc.cd[hc.start--]='1'; c=f;f=ht[f].parent; } hc.start++; hcd[i]=hc; } }

void disphcode(htnode ht[],hcode hcd[],int n) { int i,k; int sum=0,m=0,j; printf(" 输出哈夫曼编码:\n"); for (i=0;i<n;i++) { j=0; printf(" %s:\t",ht[i].data); for (k=hcd[i].start;k<=n;k++) { printf("%c",hcd[i].cd[k]); j++; } m+=ht[i].weight; sum+=ht[i].weight*j; printf("\n"); } printf("\n 平均长度=%g\n",1.0*sum/m); } void main() { int i, n=4; char *str[]={"a","b","c","d"}; int fnum[]={1,3,4,7};

htnode ht[m]; hcode hcd[n]; for (i=0; i<n; i++) { strcpy(ht[i].data, str[i]); ht[i].weight=fnum[i]; } printf("\n"); createht(ht,n); createhcode(ht,hcd,n); disphcode(ht,hcd,n); printf("\n"); system("pause"); }

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我想成为一名职业编辑,但学的不是编辑专业,
USB人体输入设备
求一本网游小说,名字不记得了,不过主角是个
石油井对周围农业的影响
小学一年级二册数学46的4表示4个什么呢
青岛66中具体位置在哪
重庆骑摩托车到万州要多久?
马兰士sr4400功放 怎么样
汽车方向盘左右抖动是什么原因?
java 串口开发包comm.jar在java官网哪个页面
花生芽能同羊肉一块烹制吗
农历三十的大集,但本月没有农历三十怎么办
是不是有其父必有其子?我说的是儿子的性格跟
洮南市博达养护中心怎么去啊,有知道地址的么
龙之谷 游戏进不去到底是为什么啊???、重
推荐资讯
婚检要检查的是传染病方面的还有 别的吗?
q wf g wh w itd tj oge ese 用五笔打出来是
聚银超市在什么地方啊,我要过去处理事情
本人想去成都周边耍耍,不知道各位有没有什么
醋酸醋酸铵缓冲溶液(ph=6.3)的配制
刑法对国家工作人员职务犯罪分为哪几类
点评《公输》中的墨子
求台版流星花园第一二部字幕版百度云资源,高
现在怎么查看百度音乐的链接地址?
最具有童话色彩的歌词是什么?
郑州哪里可以捐赠旧衣服!
博成五金机电商行在哪里啊,我有事要去这个地
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?