题目描述

1、问题描述

给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码。

构造Huffman树时,要求左子树根的权值小于、等于右子树根的权值。

进行Huffman编码时,假定Huffman树的左分支上编码为‘0’,右分支上编码为‘1’。

2、算法

构造Huffman树算法:

⑴ 根据给定的n个权值(w1, w2, …, wn)构成n棵二叉树的集合F={T1, T2, …, Tn},其中每棵二叉树Ti中只有一个权值为wi的根结点。

⑵ 在F中选取两棵根结点的权值最小的树,作为左、右子树构造一棵新的二叉树,且置其根结点的权值为其左、右子树权值之和。

⑶ 在F中删除这两棵树,同时将新得到的二叉树加入F中。

(4)重复⑵, ⑶,直到F只含一棵树为止。

3、Huffman编码算法:

⑴ 从Huffman树的每一个叶子结点开始。

⑵ 依次沿结点到根的路径,判断该结点是父亲结点的左孩子还是右孩子,如果是左孩子则得到编码‘0’,否则得到编码‘1’,先得到的编码放在后面。

⑶ 直到到达根结点,编码序列即为该叶子结点对应的Huffman编码。

4、Huffman译(解)码算法:

⑴ 指针指向Huffman树的根结点,取第一个Huffman码。

⑵ 如果Huffman码为‘0’,将指针指向当前结点的左子树的根结点;如果Huffman码为‘1’,将指针指向当前结点的右子树的根结点。

⑶ 如果指针指向的当前结点为叶子结点,则输出叶子结点对应的字符;否则,取下一个Huffman码,并返回⑵。

⑷ 如果Huffman码序列未结束,则返回⑴继续译码。

输入

第一行测试次数

第2行:第一组测试数据的字符个数n,后跟n个字符

第3行:第一组测试数据的字符权重

待编码的字符串s1

编码串s2

其它组测试数据类推

输出

第一行~第n行,第一组测试数据各字符编码值

第n+1行,串s1的编码值

第n+2行,串s2的解码值,若解码不成功,输出error!

其它组测试数据类推

样例输入

2
5 A B C D E
15 4 4 3 2
ABDEC
00000101100
4 A B C D
7 5 2 4
ABAD
1110110

样例输出

A :1
B :010
C :011
D :001
E :000
1010001000011
error!
A :0
B :10
C :110
D :111
0100111
DAC
 
 
 
 
 
 
 
 

最新文章

  1. C#代码实现对HTTP POST参数进行排序
  2. swiper超出部分出现滚动条
  3. nginx“虚拟目录”不支持php的解决办法
  4. Failed to create the part's controls [eclipse]
  5. Collections在sort()简单分析法源
  6. [转]C/C++:构建你自己的插件框架
  7. Mybatis第八篇【一级缓存、二级缓存、与ehcache整合】
  8. PHP-max_execution_time与fpm.request_terminate_timeout介绍
  9. JavaScript问题——在浏览器中的offsetLeft/offsetWidth等属性是什么?
  10. Java类加载机制(加载、验证、准备、解析、初始化)
  11. MySQL安装、配置、测试
  12. Leetcode 461.汉明距离 By Python
  13. 如何利用git由本机向github上传文件 ssh方式的
  14. com.alibaba.fastjson.JSONObject
  15. psp报告
  16. nyoj322 sort 归并排序,树状数组
  17. Oracle导数据到SQL server的方法总结
  18. 用JavaCV改写“100行代码实现最简单的基于FFMPEG+SDL的视频播放器 ”
  19. 无网络环境用pip安装python类包
  20. C++数组类型与函数类型

热门文章

  1. Python之路,第十四篇:Python入门与基础14
  2. 基于Hexo+Node.js+github+coding搭建个人博客——基础篇
  3. 20155208 实验四 Android开发基础
  4. nginx负载均衡算法
  5. JQuery中serialize()方法的使用
  6. /dev/null简单入门
  7. day43 数据库学习 转自egon 老师博客 单表查询和多表查询
  8. timescaledb 集成 madlib
  9. 数学沉思录:古今数学思想的发展与演变 (Mario Livio 著)
  10. c# AddMonths,你了解吗?