一、需求
将给出的一段文本,比如 “i like like like java do you like a java” , 根据前面的讲的赫夫曼编码原理,对其进行数据压缩处理
二、步骤
根据赫夫曼编码压缩数据的原理,需要创建 “i like like like java do you like a java” 对应的赫夫曼树
创建节点Node{data(存放数据),weight(权值),left和right}
得到"i like like like java do you like a java"的byte[]数组
编写方法,将准备构建赫夫曼树的Node放入List
通过list创建对应的赫夫曼树
1、创建赫夫曼树所需的节点Node
class Node implements Comparable {
Byte data;//存放数据 'a'=> 97
int weight;//权值:统计出现的次数
Node left;
Node right;
public Node(Byte data, int weight) {
this.data = data;
this.weight = weight;
}
/**
* 前序遍历
*/
public void preOder() {
System.out.println(this);
if (this.left != null) this.left.preOder();
if (this.right != null) this.right.preOder();
}
@Override
public String toString() {
return new StringJoiner(", ", Node.class.getSimpleName() + "[", "]")
.add("data=" + data)
.add("weight=" + weight)
.toString();
}
//根据权值从小到大排序
@Override
public int compareTo(Node o) {
return this.weight - o.weight;
}
}
2、得到字符串的byte数组
得到"i like like like java do you like a java"的byte[]数组
byte[] contentBytes = str.getBytes();