博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Huffman树与编码的简单实现
阅读量:4539 次
发布时间:2019-06-08

本文共 3307 字,大约阅读时间需要 11 分钟。

好久没写代码了,这个是一个朋友问的要C实现,由于不会C,就用JAVA写了个简单的。注释掉的代码属性按照原来朋友发的题里带的参数,发现没什么用就给注释掉了。

package other;import java.util.HashMap;public class Huffman {        public static Bean huffmanBean = new Bean();    public static HuffCode huff=new HuffCode();    public static void main(String[] args) {        Bean[] beans = initD();        beans = arrSort(beans);        getHuffmanT(beans);        getHuffmanCode(huffmanBean,0);    }                    public static void getHuffmanCode(Bean node,int c){          if(node.getLeft()!=null){              huff.put(c,0);              getHuffmanCode(node.getLeft(), c + 1);          }            if(node.getName()!=null)            System.out.println("节点名:"+node.getName()+"  概率值:"+String.valueOf(node.getProb())+"  哈夫曼编码值:"+huff.toString().substring(0,c));            if(node.getRight()!=null){              huff.put(c,1);              getHuffmanCode(node.getRight(), c + 1);          }      }          /**     * 获取Huffman树     * @param beans     */    public static void getHuffmanT(Bean[] beans){        while(beans.length>1){            Bean tempBean = getBeanRoot(beans);            Bean[] nBeans = arrInsert(beans,tempBean);            getHuffmanT(nBeans);            if(nBeans.length==1){                huffmanBean = nBeans[0];            }            break;        }    }        /**     * 获取最小值和后的新节点     * @param beans     * @return     */    public static Bean getBeanRoot(Bean[] beans){        Bean newBean = new Bean();        newBean.setProb(beans[beans.length-1].getProb()+beans[beans.length-2].getProb());        newBean.setLeft(beans[beans.length-2]);        newBean.setRight(beans[beans.length-1]);        beans[beans.length-1].setParent(newBean);//        beans[beans.length-1].setNum("1");        beans[beans.length-2].setParent(newBean);//        beans[beans.length-2].setNum("0");        return newBean;    }    /**     * 插入后重排序     * 可以改成直接插入     * @param beans     * @param bean     * @return     */    public static Bean[] arrInsert(Bean[] beans,Bean bean){        Bean[] nBeans = new Bean[beans.length-1];        for (int i = 0; i < beans.length-2; i++) {            nBeans[i]=beans[i];        }        nBeans[nBeans.length-1] = bean;        nBeans = arrSort(nBeans);        return nBeans;    }    /**     * 冒泡排序     * @param bean     * @return     */    public static Bean[] arrSort(Bean[] bean){        for (int i = 0; i < bean.length; i++) {            for (int j = i+1; j < bean.length; j++) {                if (bean[j].getProb()>bean[i].getProb()) {                     Bean temp = new Bean();                      temp=bean[j];                      bean[j]=bean[i];                      bean[i]=temp;                }            }        }        return bean;    }    /**     * 初始化测试数据     * @return     */    public static Bean[] initD(){        Bean b1 = new Bean("a",0.2f);        Bean b2 = new Bean("b",0.19f);        Bean b3 = new Bean("c",0.18f);        Bean b4 = new Bean("d",0.17f);        Bean b5 = new Bean("e",0.15f);        Bean b6 = new Bean("f",0.1f);        Bean b7 = new Bean("g",0.01f);        Bean[] bean = new Bean[]{b1,b2,b3,b4,b5,b7,b6};        return bean;    }}class HuffCode extends HashMap{      public String toString(){          String str="";          for(int i=0;i

 

转载于:https://www.cnblogs.com/GYoungBean/p/3467634.html

你可能感兴趣的文章
php 魔术方法 __autoload()
查看>>
js div拖动动画运行轨迹效果
查看>>
Recipe 1.9. Processing a String One Word at a Time
查看>>
Linux 下查看系统是32位 还是64 位的方法
查看>>
MySQL 引擎 和 InnoDB并发控制 简介
查看>>
Dave Python 练习二
查看>>
第二章 第五节 获取帮助
查看>>
关于源代码及其管理工具的总结
查看>>
此文对你人生会有莫大好处的,建议永久保存 2013-07-26 11:04 476人阅读 评论(0) ...
查看>>
JQuery怎样返回前一页
查看>>
Best Time to Buy and Sell Stock
查看>>
Web服务器的原理
查看>>
记录ok6410 jlink 命令行调试uboot
查看>>
ASP.net 内置对象
查看>>
Docker快速配置指南
查看>>
Python基础---OS模块 (二)
查看>>
【JS点滴】substring和substr以及slice和splice的用法和区别。
查看>>
awk多模式匹配
查看>>
线段树
查看>>
a span等行内元素加margin属性后无效果解决方案
查看>>