台灣最大程式設計社群網站
線上人數
1041
 
會員總數:246691
討論主題:190104
歡迎您免費加入會員
討論區列表 >> Java Script/ Node.js >> 霍夫曼編碼程式(java寫的)
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
霍夫曼編碼程式(java寫的)
價值 : 20 QP  點閱數:1582 回應數:5
樓主


門外漢
0 3
24 2
發送站內信

請幫我每行做註解,謝謝!

因為程式過長,所以下半部的程式刪掉了,是否能留下email,我把下半部的程式也寄給你,不然翻譯上半部的也行! 感謝

package PRATICE;

import java.util.*;
import java.io.*;
//package PRATICE;

interface Countable {
public int getTime();
}

class Node implements Comparable, Countable {
private Countable left, right;
private int time;
private int code;
public Node() {
}
public Node(Countable l, Countable r) {
right=r;
left=l;
time= r.getTime() + l.getTime();
}
//public void setCode(int c) {
// code=c;
//}
public void setLeft(Countable l) {
left=l;
}
public void setRight(Countable r) {
right=r;
}
public void setTime() {
time=time;
}
public int getTime() {
return time;
}
public Countable getRight() {
return right;
}
public Countable getLeft() {
return left;
}
public int compareTo(Object o) {
Countable w = (Countable) o;
if(this.getTime() > w.getTime() ) {
return 1;
}
else if(this.getTime() == w.getTime() ) {
return 0;
}
else {
return -1;
}
}
}

class Word implements Comparable, Countable {
private int time;
private char word;
public Word(int time, char word) {
this.time = time;
this.word = word;
}
public char getWord() {
return word;
}
public int getTime() {
return time;
}
public void addTime() {
time++;
}
public int compareTo(Object o) {
Countable w = (Countable) o;
if(this.getTime() > w.getTime() ) {
return 1;
}
else if(this.getTime() == w.getTime() ) {
return 0;
}
else {
return -1;
}
}
public String toString() {
return "Word:" + word + " , Time = " + time;
}
}

public class traverse {
static Stack stack = new Stack();
static final Integer ONE = new Integer(1);
static final Integer ZERO = new Integer(0);

本篇文章發表於2014-02-06 14:07
1樓
作者回應


檢舉此回應
這是下半部的程式,一樣做註解

public static void main(String[] args) throws Exception {
args = new String[] { "D:/JAVA/temp.txt" };
Hashtable table = new Hashtable();
BufferedReader br = new BufferedReader(new FileReader(args[0]));
String line="";
while( (line=br.readLine()) != null) {
for(int i=0; i<line.length(); i++) {
Character c= new Character(line.charAt(i));
//System.out.println(c);
if(table.containsKey(c)) {
Word w= (Word) table.get(c);
//System.out.println(table.containsKey(c));
w.addTime();
//System.out.println(w.getTime());
}
else {
Word w=new Word(1, c.charValue());
table.put(c,w);
//System.out.println(w);
}
}
}
Collection c = table.values();
System.out.println(c);
Object[] word = c.toArray();
//System.out.println(word[0]);
Arrays.sort(word);
//System.out.println(word[0]);

Vector v = new Vector();
for(int i=0; i<word.length; i++) {
v.add(word[i]);
System.out.println(word[i]);
}
//System.out.println(v.size());
while(v.size()!=1) {
Countable c1 = (Countable) v.firstElement();
v.removeElementAt(0);
Countable c2 = (Countable) v.firstElement();
v.removeElementAt(0);

Node node = new Node( c1, c2);
//System.out.println(node);
v.add(node);
//System.out.println(node.getTime());
Object[] o = v.toArray();

Arrays.sort(o);
v.removeAllElements();
v.trimToSize();
//System.out.println(o);
for(int i=0; i<o.length; i++) {
v.add(o[i]);
}
}
System.out.println("Huffman Tree Encoding::");
traverse((Node)v.firstElement());
}
public static void traverse(Countable n) {
if(n instanceof Word) {
Object[] o= stack.toArray();
for(int i=0; i<o.length; i++) {
System.out.print(o[i]);
}
System.out.println( " -> " + ((Word)n).getWord());
return;
}
stack.add(ZERO);
traverse( ((Node)n).getLeft());
stack.pop();
stack.add(ONE);
traverse( ((Node)n).getRight());
stack.pop();
}

}

本篇文章回覆於2014-02-06 14:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
頭一次碰上這樣沒規距的人。
程式碼不用程式標簽也就算了。

還一付人家一定要來幫你的樣子。
看到就不想幫忙。
本篇文章回覆於2014-02-06 17:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
明明都說這是JAVA程式了
在script版上面不就是Java版
要貼也該貼在那吧
本篇文章回覆於2014-02-07 09:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

風箏
檢舉此回應
已經幫你每行都加上註解了
我真是佛心來著的
☝( ◠‿◠ )☝

本篇文章回覆於2014-02-07 10:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

四百龍銀
檢舉此回應

本篇文章回覆於2014-02-07 15:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.