- 浏览: 661847 次
- 性别:
- 来自: 宇宙中的某个角落
文章分类
- 全部博客 (244)
- Java SE (57)
- EJB3.0 (7)
- Architecture (15)
- DDD (4)
- UML&GOF Patterns (17)
- scala (0)
- hadoop (1)
- Hibernate&JPA (8)
- webwork (2)
- Problems and Solution (3)
- search engine (Lucene) (4)
- .net C# (2)
- Web develop (9)
- OS(windows&linux) (2)
- Software Engineering (0)
- Resource shara (5)
- Javascript (1)
- apple (1)
- Data structure (11)
- English study (32)
- Assembly language (2)
- Feeling&emotion (5)
- Diary (23)
- Entertainment (17)
- 诗词赏析 (8)
- 道德经 (1)
- ios (5)
最新评论
-
zhuzf:
写的太好了
实例分析Java Class的文件结构 -
随便小屋:
写的太好了,Mark一下,楼主辛苦了!
实例分析Java Class的文件结构 -
lowkey2046:
引用 应用程序注册读就需事件和相关联的事件处理器应该是读就绪吧 ...
高性能IO设计的Reactor和Proactor模式 -
BigBird2012:
“JVM引入了分代收集的策略,其中对新生代采用"Ma ...
JVM内存模型以及垃圾收集策略解析 -
xuelian2010:
找到合适的人做正确的事情!!!
三月份辞职创业,北京第一家线下体验店成功开张,伙伴们加油!
java 代码
- //Huffman.java
- package huffman.xmu;
- import java.util.LinkedHashMap;
- import java.util.ArrayList;
- import java.util.Set;
- import java.util.Iterator;
- public class Huffman {
- public Huffman(LinkedHashMap<Character,Integer> map){
- charTable = map;
- charset = map.keySet();
- creatHuffmanTree();
- creatHuffmanCode();
- }
- //encode the input string
- public String enCodeString(String inString){
- StringBuffer temp = new StringBuffer();
- for(int i=0;i<inString.length();i++){
- int ch = inString.charAt(i);
- int j=1;
- for( ;huffmanTree.get(j).charTag!=ch&&j<charset.size()+1;j++){
- }
- if(j<=charset.size()){
- temp.append(huffmanCode.get(j));
- } else {
- temp.append(ch);
- }
- }
- return temp.toString();
- }
- //decode the string
- public String deCodeString(String inString){
- StringBuffer temp = new StringBuffer();
- int root = charset.size()*2-1;
- for(int i=0;i<inString.length();i++){
- char ch=inString.charAt(i);
- if(ch=='0'){
- root=huffmanTree.get(root).lChild;
- }else if(ch=='1'){
- root=huffmanTree.get(root).rChild;
- }else {
- temp.append(ch);
- }
- if(root<=charset.size()){
- temp.append(huffmanTree.get(root).charTag);
- root=charset.size()*2-1;
- }
- }
- return temp.toString();
- }
- //creat the huffman tree
- private void creatHuffmanTree(){
- initTree();
- int min_child1;
- int min_child2;
- for(int i=charset.size()+1;i<2*charset.size();i++){
- min_child1=0;
- min_child2=0;
- for(int j=1;j<i;j++){
- if(huffmanTree.get(j).parent==0){
- if(huffmanTree.get(j).weight<huffmanTree.get(min_child1).weight||
- huffmanTree.get(j).weight<huffmanTree.get(min_child2).weight ) {
- if (huffmanTree.get(min_child1).weight < huffmanTree.get(min_child2).weight) {
- min_child2 = j;
- } else {
- min_child1= j;
- }
- }
- }
- }
- huffmanTree.get(min_child1).parent=i;
- huffmanTree.get(min_child2).parent=i;
- if(min_child1<min_child2){
- huffmanTree.get(i).lChild=min_child1;
- huffmanTree.get(i).rChild=min_child2;
- } else{
- huffmanTree.get(i).rChild=min_child1;
- huffmanTree.get(i).lChild=min_child2;
- }
- huffmanTree.get(i).weight=huffmanTree.get(i).weight+huffmanTree.get(i).weight;
- }
- }
- private void creatHuffmanCode(){
- huffmanCode = new ArrayList<String>(charset.size()+1);
- huffmanCode.add(0,null);
- char [] tempChars = new char[charset.size()+1];
- for(int i=1;i<charset.size()+1;i++){
- int startIndex=charset.size();
- int parent = huffmanTree.get(i).parent;
- int ch=i;
- while(parent!=0){
- if(huffmanTree.get(parent).lChild== ch){
- tempChars[startIndex]='0';
- }else {
- tempChars[startIndex]='1';
- }
- startIndex--;
- ch=parent;
- parent=huffmanTree.get(parent).parent;
- }
- System.out.println(String.valueOf(tempChars,startIndex+1,charset.size()-startIndex));
- huffmanCode.add(i, String.valueOf(tempChars,startIndex+1,charset.size()-startIndex));
- }//end for
- }//end method
- private void initTree(){
- huffmanTree = new ArrayList<Node>();
- Iterator<Character> charIter = charset.iterator();
- int i=1;
- huffmanTree.add(0,new Node((char) 0, Integer.MAX_VALUE, 0, 0, 0));
- while(charIter.hasNext()){
- Character ch=charIter.next();
- huffmanTree.add(i,new Node(ch,charTable.get(ch),0,0,0));
- i++;
- }
- for(int j=charset.size()+1;j<2*charset.size();j++){
- huffmanTree.add(j,new Node((char)0,0,0,0,0));
- }
- }
- //character table with the frequency of each character
- private LinkedHashMap<Character,Integer> charTable;
- private Set<Character > charset;
- //store the huffman tree with the ArrayList
- private ArrayList<Node> huffmanTree ;
- //store the huffman code with the ArrayList
- private ArrayList<String> huffmanCode;
- class Node{
- char charTag;
- int weight;
- int parent;
- int lChild;
- int rChild;
- public Node(char c,int w, int p,int l, int r){
- charTag = c;
- weight = w;
- lChild = l;
- rChild = r;
- }
- }//end Node
- public static void main(String [] args){
- LinkedHashMap<Character,Integer> hasmap = new LinkedHashMap<Character,Integer>();
- hasmap.put('a',4);
- hasmap.put('b',5);
- hasmap.put('c',8);
- hasmap.put('d',10);
- Huffman huffman = new Huffman(hasmap);
- String temp = huffman.enCodeString("abcd");
- System.out.println(temp);
- System.out.println(huffman.deCodeString(temp));
- }
- }
发表评论
-
Java高级软件攻城狮,你在哪里?
2013-09-17 11:19 0PS:管理员同志, ... -
Java高级软件攻城狮,你在哪里?
2013-09-17 09:46 5创业一年,感触颇多,也走过一些弯路,不过总体上还好。 ... -
Java高级软件攻城狮,你在哪里?我们需要你....
2013-09-06 13:43 88创业一年,感触颇 ... -
实例分析Java Class的文件结构
2013-01-30 11:11 5120今天把之前 ... -
Java自定义URL协议
2011-08-31 18:26 7016Java 提供了对 URL 协议进行扩展 ... -
JDK 1.6.0_13 Jaxb的一个Bug
2011-05-10 16:50 2329项目中使用jaxb进行xml binding,但是在jdk1. ... -
Apache+PHP+Mysql的搭建
2010-08-05 19:29 1618以前都是用JAVA,PHP没用过,今天因为一些原因,需 ... -
JVM内存模型以及垃圾收集策略解析【续】
2010-02-22 20:00 7361今天接着补全上篇博文 ... -
JVM内存模型以及垃圾收集策略解析
2010-02-21 21:19 10023首先祝大家春节愉快,几个月前研究了一下JVM的内存模型,整理学 ... -
Java类加载器解析
2008-08-10 19:03 2241作者:狂放不羁 网址:http://yuquan-nana.i ... -
捕获checked exception后什么都不做的代价
2008-05-09 13:03 1728最近在做一个小项目,做到注册模块的时候,如果查询数据库后,发现 ... -
Three kinds of attributes in servlet
2008-03-02 00:21 1486There are three kinds of attrib ... -
My first Android programe!
2007-11-18 12:26 1382Today,i writed my first Android ... -
Java是剑客;.NET是刀客(转载)
2007-10-21 22:22 1464剑,一把好剑,重 ... -
高级语言发展简图
2007-09-30 15:35 1862C/C++语言谱系图 -
C#,C++ 与JAVA
2007-09-30 15:31 1714C#(C-Sharp)是Microsoft的新编程语言,被誉为 ... -
[转帖]利用Eclipse编辑中文资源文件
2007-09-09 03:57 4821如果经常使用Struts,并做过国际化操作的人来说,对于中文资 ... -
JAVA类加载器
2007-09-01 20:12 1722Java中加载器的种类大致可以分为四种:Bo ... -
JAVA类加载以及反射机制
2007-08-28 20:11 7406JAVA中类文件加载 ... -
小游戏
2007-08-28 16:48 1825偶前段时间写的小游戏。呵呵。。
相关推荐
java实现huffman算法 ~可以在控制台输入字符串编码~
Huffman编码是一种高效的数据压缩算法,它基于字符出现频率构建最优前缀树,进而为每个字符分配唯一的二进制编码。在Java环境下实现Huffman编码,我们需要理解以下几个关键概念: 1. **字符频率统计**:首先,我们...
在这个Java程序中,`huffman()`函数负责构建哈夫曼树,而`code()`函数则负责分配编码。`main()`函数是整个流程的入口,初始化权重数组,创建并填充优先级队列,然后调用`huffman()`和`code()`函数完成编码过程,并...
在这个Java实现中,我们将探讨如何利用Java编程语言构建Huffman树并进行编码和解码。 首先,我们需要理解Huffman树的构建过程。这通常涉及以下几个步骤: 1. 计算字符频率:统计输入文本中每个字符出现的次数,这些...
霍夫曼编码(Huffman Coding)是一种数据压缩算法,由美国计算机科学家大卫·霍夫曼在1952年提出,常用于文本压缩。它的基本原理是基于字符出现频率进行编码,频繁出现的字符用较短的编码,不常见的字符用较长的编码...
Huffman算法是贪心算法的一个经典应用,主要用于数据压缩,通过构建Huffman树来实现。Huffman编码是一种可变长度的前缀编码,它使得频繁出现的字符拥有较短的编码,不常出现的字符则拥有较长的编码,以此达到压缩...
哈夫曼编码(Huffman Coding)是一种数据压缩算法,它基于字符出现频率构建最优的前缀树(也称为哈夫曼树),以实现高效的编码和解码过程。在这个名为"HuffmanCoding-Java"的项目中,开发者使用Java语言实现了哈夫曼...
哈夫曼编码(Huffman Coding)是一种用于无损数据压缩的算法,由大卫·艾伦·哈夫曼在1952年提出。这个算法基于字符出现频率构建一棵特殊的二叉树,称为哈夫曼树,进而为每个字符生成唯一的二进制编码,即哈夫曼编码...
哈夫曼编码(Huffman Coding)是一种数据压缩算法,由美国计算机科学家大卫·艾尔文·哈夫曼在1952年提出。这个算法基于字符出现频率进行编码,经常出现的字符会得到较短的编码,而较少出现的字符则获得较长的编码,...
在Java中实现Huffman编码,需要理解其基本原理并运用数据结构和算法。 一、Huffman编码原理 1. 频率统计:首先,对输入文本中的每个字符出现的次数进行统计,得到一个字符频率表。 2. 构建Huffman树:通过一个...
哈夫曼编码(Huffman Coding)是一种高效的数据压缩算法,尤其适用于文本压缩。它基于字符出现频率,构建最优的二叉树结构,使得高频字符的编码较短,低频字符的编码较长,从而实现数据的高效压缩。在Java编程语言中...
【文件的压缩与解压Huffman算法功能实现】 在信息技术领域,文件的压缩与解压是至关重要的技术,尤其在互联网环境中,面对大量的多媒体信息,有效地压缩数据不仅可以节省存储空间,还能提高数据传输效率。Huffman...
《基于Huffman编码的Java压缩软件详解》 在信息技术领域,数据压缩技术是不可或缺的一部分,尤其是在存储和传输大量数据时。Huffman编码是一种常见的无损数据压缩算法,它利用字符出现频率的不同,构建最优的二叉树...
哈夫曼编码(Huffman Coding)是一种用于无损数据压缩的算法,由大卫·艾尔·哈夫曼在1952年提出。这个算法基于一种特殊的二叉树——哈夫曼树,通过构建这棵树来为每个字符生成唯一的前缀编码,从而达到高效的数据...
本文将深入探讨Java中使用霍夫曼编码(Huffman Coding)进行数据压缩的原理和实践。霍夫曼编码是一种无损数据压缩算法,它基于字符的频率来构建优化的二叉树结构,从而实现高效的数据压缩。 首先,我们来看一下...
哈夫曼编码(Huffman Coding)是一种用于数据压缩的高效算法,由大卫·艾尔文·哈夫曼在1952年提出。这个压缩方法是基于字符出现频率的,通过对字符进行编码来减少数据存储空间。在Java编程语言中实现哈夫曼编码涉及...
在Java编程中,理解和实现哈夫曼编码是数据结构和算法学习的重要一环。本教程将详细介绍哈夫曼树的构建过程以及其在Java中的实现。 哈夫曼编码的基本原理是通过赋予频率较高的字符较短的编码,频率较低的字符较长的...
哈夫曼编码(Huffman Coding)是一种用于数据压缩的高效算法,由大卫·艾伦·哈夫曼在1952年提出。它是基于字符频率的变长编码方法,能够根据字符出现的频繁程度来分配更短的编码,从而达到更高的压缩效率。哈夫曼...
Java Huffman,虽然在提供的标签中出现,但它实际上是指Huffman编码,一种数据压缩算法。在Java中,我们可以使用BitSet类或者自定义的数据结构实现Huffman编码。这种编码方法主要用于文本数据的压缩,通过构建一棵...