資源簡(jiǎn)介
java算法分析與設(shè)計(jì)之哈夫曼編碼源代碼
算法作為計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的必修課,同時(shí)也是軟件開(kāi)發(fā)過(guò)程中必備的編程思想,對(duì)學(xué)習(xí)研究計(jì)算機(jī)專(zhuān)業(yè)意義重大;正因?yàn)檫@門(mén)課程難,所以除了相關(guān)方面的書(shū)籍,網(wǎng)絡(luò)資源少的可憐,尤其是java代碼簡(jiǎn)直如大海撈針。因此,做完這次課程設(shè)計(jì),我決定把這些資源傳到廣大學(xué)生鐘愛(ài)的CSDN上供大家分享學(xué)習(xí),希望能真正幫到大家!

代碼片段和文件信息
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()?{//?給定一組數(shù)
System.out.println(“請(qǐng)輸入一組數(shù),中間用空格分隔:“);
Scanner?sca?=?new?Scanner(System.in);
String?str?=?sca.nextLine();
String[]?strs?=?str.split(“?“);
for?(int?i?=?0;?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(“?碼長(zhǎng):“?+?temp.length());
}
public?double[]?minTwo(List?nums)?{//?在一組數(shù)中選則最小的兩個(gè),按遞增排序返回
Double?temp?=?0.0;
for?(int?j?=?0;?j?2;?j++)?{
for?(int?i?=?1;?i? if?(nums.get(i?-?1)? 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();
}
}
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????目錄???????????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-哈夫曼編碼\
評(píng)論
共有 條評(píng)論