2 Star 0 Fork 0

CS-IMIS-23/20172311hai

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
huffmanCoding.java 3.32 KB
一键复制 编辑 原始数据 按行查看 历史
socialsea 提交于 7年前 . 哈夫曼树测试
package HuffmanTest;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class huffmanCoding
{
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\user\\IdeaProjects\\socialsea\\socialsea\\src\\HuffmanTest\\readFile");
Scanner scan = new Scanner(file);
String s = scan.nextLine();
System.out.println(s);
int[] array = new int[26];
for (int i = 0; i < array.length; i++) {
array[i] = 0;
}
for (int i = 0; i < s.length(); i++) {
char x = s.charAt(i);
array[x - 'a']++;
}
System.out.println("各字母出现频率:");
for (int i = 0; i < array.length; i++) {
System.out.print((char)('a'+i)+":"+(double) array[i] / s.length()+" ");
}
huffmanNode[] huffmanTreeNodes = new huffmanNode[array.length];
for (int i = 0; i < array.length; i++) {
huffmanTreeNodes[i] = new huffmanNode(array[i], (char) ('a' + i), null, null, null);
}
huffmanTree huffmanTree = new huffmanTree(huffmanTreeNodes);
System.out.println();
System.out.println("打印哈夫曼树:");
System.out.println(huffmanTree.toString());
System.out.println("各字母的编码");
String[] codes = huffmanTree.getEncoding();
for (int i = 0; i < codes.length; i++) {
System.out.println((char) ('a' + i) + ":" + codes[i]);
}
//进行编码:
String result = "";
for (int i = 0; i < s.length(); i++) {
int x = s.charAt(i) - 'a';
result += codes[x];
}
System.out.println("编码结果:"+result);
//写入文件
File file1 = new File("C:\\Users\\user\\IdeaProjects\\socialsea\\socialsea\\src\\HuffmanTest\\codeResult");
FileWriter fileWriter = new FileWriter(file1);
fileWriter.write(result);
fileWriter.close();
//从文件读取
Scanner scan1 = new Scanner(file1);
String s1 = scan1.nextLine();
huffmanNode huffmanTreeNode = huffmanTree.getRoot();
//进行解码
String result2 = "";
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == '0') {
if (huffmanTreeNode.getLeft() != null) {
huffmanTreeNode = huffmanTreeNode.getLeft();
}
} else {
if (s1.charAt(i) == '1') {
if (huffmanTreeNode.getRight() != null) {
huffmanTreeNode = huffmanTreeNode.getRight();
}
}
}
if (huffmanTreeNode.getLeft() == null && huffmanTreeNode.getRight() == null) {
result2 += huffmanTreeNode.getElement();
huffmanTreeNode = huffmanTree.getRoot();
}
}
System.out.println("解码结果:"+result2);
//写入文件
File file2 = new File("C:\\Users\\user\\IdeaProjects\\socialsea\\socialsea\\src\\HuffmanTest\\decodeResult");
FileWriter fileWriter1 = new FileWriter(file2);
fileWriter1.write(result2);
fileWriter1.close();
// 判断解码是否正确
System.out.println("解码是否正确:"+result2.equals(s));
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/CS-IMIS-23/20172311hai.git
git@gitee.com:CS-IMIS-23/20172311hai.git
CS-IMIS-23
20172311hai
20172311hai
master

搜索帮助