资源简介

java算法分析与设计之哈夫曼编码源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的可怜,尤其是java代码简直如大海捞针。因此,做完这次课程设计,我决定把这些资源传到广大学生钟爱的CSDN上供大家分享学习,希望能真正帮到大家!

资源截图

代码片段和文件信息

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Huffman {
private List nums;
private List numsMo;
private List trees;
private String temp;

public Huffman() {
nums = new ArrayList();
numsMo = new ArrayList();
trees = new ArrayList();
temp = ““;
}

public void addNums() {// 给定一组数
System.out.println(“请输入一组数,中间用空格分隔:“);
Scanner sca = new Scanner(System.in);
String str = sca.nextLine();
String[] strs = str.split(“ “);
for (int i = 0; i < strs.length; i++) {
nums.add(Double.parseDouble(strs[i]));
numsMo.add(Double.parseDouble(strs[i]));
}
}

public void compareNum(List nums List trees) {// 递归算法
double[] min = new double[2];
if (nums.size() > 1) {
min = minTwo(nums);
Tree t = new Tree(min[0] min[1] min[0] + min[1]);
nums.remove(Double.valueOf(min[0]));
nums.remove(Double.valueOf(min[1]));
nums.add(min[0] + min[1]);
trees.add(t);
compareNum(nums trees);
}
}

public void print(double num) {// 递归打印编码
for (Tree t : trees) {
if (num == t.getRchild()) {
temp = 1 + temp;
print(t.getParents());
break;
} else if (num == t.getLchild()) {
temp = 0 + temp;
print(t.getParents());
break;
}
}
}

public void write(double d) {
temp = ““;
System.out.print(d + “ : “);
print(d);
System.out.print(temp);
System.out.println(“ 码长:“ + temp.length());
}

public double[] minTwo(List nums) {// 在一组数中选则最小的两个,按递增排序返回
Double temp = 0.0;
for (int j = 0; j < 2; j++) {
for (int i = 1; i < nums.size(); i++) {
if (nums.get(i - 1) < nums.get(i)) {
temp = nums.get(i);
nums.set(i nums.get(i - 1));
nums.set(i - 1 temp);
}
}
}
double[] n = { nums.get(nums.size() - 1) nums.get(nums.size() - 2) };
return n;
}

public void start() {
addNums();
compareNum(nums trees);
while (numsMo.size() > 1) {
double[] mins = minTwo(numsMo);
if (mins[0] != mins[1]) {
numsMo.remove(Double.valueOf(mins[0]));
write(mins[0]);
}
}
if (!numsMo.isEmpty()) {
write(numsMo.get(0));
}
}

public static void main(String[] args) {
new Huffman().start();
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-11-23 17:01  7-哈夫曼编码\src\
     文件        2371  2012-10-11 16:57  7-哈夫曼编码\src\Huffman.java
     文件         568  2012-10-11 16:56  7-哈夫曼编码\src\Tree.java
     目录           0  2012-11-23 17:01  7-哈夫曼编码\

评论

共有 条评论