全球旧事资料 分类
eighti给每个结点附权值
HTreeilchild1初始化左右孩子和父节点都为1
HTreeirchild1
HTreeipare
t1
i
txy用于记录两个最小权值
fori
tileafi2leaf1i
Selectmi
HTreeixy选出两个最小权值的结点
HTreexpare
ti父节点设置为新建立的结点
HTreeypare
ti
HTreeiweightHTreexweightHTreeyweight父节点权值为两个相加
HTreeilchildx使父节点指向这两个孩子结点
HTreeirchildy
HTreeipare
t1父节点的父节点设为1
算法3voidSelectmi
HNodehTreei
t
i
ti1i
ti2
1算法功能从现有的结点中选择出两个最小的结点返回其位置
2算法基本思想先选出两个没有构建的结点然后向后依次比较筛选出最小
的两个结点
3算法空间、时间复杂度分析空间复杂度O1要遍历所有结点时间复杂
度ON
4代码逻辑
fi
ti
fori0i
i
为现在有的结点个数是个变化值会有相加后的新权值加入
ifhTreeipare
t1父节点不是1意味着这个结点还没有被选择过
i1i记录结点位置
break

i执行一遍for循环就加1意为下次查找从当前位置开始查找fori
i
ifhTreeipare
t1
i2i记录第二个没选择过的结点编号
break

ifhTreei1weighthTreei2weight进行比较使I1为最小的I2为第二小的
i
tj0
ji2
i2i1
i1j
i
fori
i将I1I2与后面的结点进行比较
ifhTreeipare
t1hTreeiweighthTreei1weight如果结点小于I1
f
i2i1使I2I1I1新结点
i1i
elseifhTreeipare
t1hTreeiweighthTreei2weight
I1《新结点《I2使I2为新节点i2i

算法4voidCreateTable
1算法功能对出现的字符进行编码
2算法基本思想根据字符在哈夫曼树中的位置从下到上编码是左孩子编0
右孩子编1
3算法空间、时间复杂度分析空间复杂度O1要遍历data数组时间复杂
度0N
4代码逻辑
HCodeTable
ewHCodeleaf新建编码结点个数为叶子节点个数fori
ti0ileafi
HCodeTableidatadatai
i
tchildi初始化要编码的结点的位置
i
tpare
tHTreeipare
t初始化父结点
i
tk0统计编码个数
whilepare
t1
ifchildHTreepare
tlchild
HCodeTableicodek0左孩子标‘0’
else
HCodeTableicodek1右孩子标‘1’
fk
childpare
t孩子结点上移
pare
tHTreechildpare
t父节点也上移
HCodeTableicodek0将编码反向
charcode100
forr
好听全球资料 返回顶部