Java常用代码2-java哈弗曼编码的实现

上传人:guoc****ang 文档编号:53414213 上传时间:2022-02-10 格式:DOC 页数:4 大小:46.50KB
返回 下载 相关 举报
Java常用代码2-java哈弗曼编码的实现_第1页
第1页 / 共4页
Java常用代码2-java哈弗曼编码的实现_第2页
第2页 / 共4页
Java常用代码2-java哈弗曼编码的实现_第3页
第3页 / 共4页
点击查看更多>>
资源描述
java哈弗曼编码的实现Java code/哈弗曼编码的实现类public class HffmanCoding private int charsAndWeight;/ 0是 字符,1存放的是字符的权值(次数) private int hfmcoding;/ 存放哈弗曼树 private int i = 0;/ 循环变量 private String hcs; public HffmanCoding(int chars) / TODO 构造方法 charsAndWeight = new intchars.length2; charsAndWeight = chars; hfmcoding = new int2 * chars.length - 14;/ 为哈弗曼树分配空间 / 哈弗曼树的实现 public void coding() int n = charsAndWeight.length; if (n = 0) return; int m = 2 * n - 1; / 初始化哈弗曼树 for (i = 0; i n; i+) hfmcodingi0 = charsAndWeighti1;/ 初始化哈弗曼树的权值 hfmcodingi1 = 0;/ 初始化哈弗曼树的根节点 hfmcodingi2 = 0;/ 初始化哈弗曼树的左孩子 hfmcodingi3 = 0;/ 初始化哈弗曼树的右孩子 for (i = n; i m; i+) hfmcodingi0 = 0;/ 初始化哈弗曼树的权值 hfmcodingi1 = 0;/ 初始化哈弗曼树的根节点 hfmcodingi2 = 0;/ 初始化哈弗曼树的左孩子 hfmcodingi3 = 0;/ 初始化哈弗曼树的右孩子 / 构建哈弗曼树 for (i = n; i m; i+) int s1 = select(i);/ 在哈弗曼树中查找双亲为零的 weight最小的节点 hfmcodings101 = i;/ 为哈弗曼树最小值付双亲 hfmcodings111 = i; hfmcodingi2 = s10;/ 新节点的左孩子 hfmcodingi3 = s11;/ 新节点的右孩子 hfmcodingi0 = hfmcodings100 + hfmcodings110;/ 新节点的权值是左右孩子的权值之和 / 查找双亲为零的 weight最小的节点 private int select(int w) / TODO Auto-generated method stub int s = -1, -1 , j = 0;/ s1 最小权值且双亲为零的节点的序号 , i 是循环变量 int min1 = 32767, min2 = 32767; for (j = 0; j w; j+) if (hfmcodingj1 = 0) / 只在尚未构造二叉树的结点中查找(双亲为零的节点) if (hfmcodingj0 min1) min2 = min1; s1 = s0; min1 = hfmcodingj0; s0 = j; else if (hfmcodingj0 min2) min2 = hfmcodingj0; s1 = j; return s; public String CreateHCode() / 根据哈夫曼树求哈夫曼编码 int n = charsAndWeight.length; int i, f, c; String hcodeString = ; hcs = new Stringn; for (i = 0; i n; i+) / 根据哈夫曼树求哈夫曼编码 c = i; hcodeString = ; f = hfmcodingi1; / f 哈弗曼树的根节点 while (f != 0) / 循序直到树根结点 if (hfmcodingf2 = c) / 处理左孩子结点 hcodeString += 0; else hcodeString += 1; c = f; f = hfmcodingf1; hcsi = new String(new StringBuffer(hcodeString).reverse(); return hcs; public String show(String s) / 对字符串显示编码 String textString = ; char c; int k = -1; c = new chars.length(); c = s.toCharArray();/ 将字符串转化为字符数组 for (int i = 0; i c.length; i+) k = ci; for (int j = 0; j charsAndWeight.length; j+) if (k = charsAndWeightj0) textString += hcsj; return textString; / 哈弗曼编码反编译 public String reCoding(String s) String text = ;/ 存放反编译后的字符 int k = 0, m = hfmcoding.length - 1;/ 从根节点开始查询 char c; c = new chars.length(); c = s.toCharArray(); k = m; for (int i = 0; i c.length; i+) if (ci = 0) k = hfmcodingk2;/ k的值为根节点左孩子的序号 if (hfmcodingk2 = 0 & hfmcodingk3 = 0)/ 判断是不是叶子节点,条件(左右孩子都为零) text += (char) charsAndWeightk0; k = m; if (ci = 1) k = hfmcodingk3;/ k的值为根节点右孩子的序号 if (hfmcodingk2 = 0 & hfmcodingk3 = 0)/ 判断是不是叶子节点,条件(左右孩子都为零) text += (char) charsAndWeightk0; k = m; return text;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!