導航:首頁 > 文件處理 > 哈夫曼編碼壓縮java

哈夫曼編碼壓縮java

發布時間:2022-07-11 05:19:50

1. 哈夫曼編碼與解碼 java

class
HaffmanNode
//哈夫曼樹的結點類
{
int
weight;
//
權值
int
parent,left,right;
//父母結點和左右孩子下標
public
HaffmanNode(int
weight)
{
this.weight
=
weight;
this.parent=-1;
this.left=-1;
this.right=-1;
}
public
HaffmanNode()
{
this(0);
}
public
String
toString()
{
return
this.weight+",
"+this.parent+",
"+this.left+",
"+this.right;
}
return
code;
}
public
static
void
main(String[]
args)
{
int[]
weight={5,29,7,8,14,23,3,11};
//指定權值集合
HaffmanTree
htree
=
new
HaffmanTree(weight);
System.out.println("哈夫曼樹的結點數組:\n"+htree.toString());
String[]
code
=
htree.haffmanCode();
System.out.println("哈夫曼編碼:");
for
(int
i=0;
i<code.length;
i++)
System.out.println(code[i]);
}
}

2. java 寫的哈夫曼編譯

河邊茂盛的草地,在乾草收割之前,
在獰笑著
清晨四點鍾,夏天,
尋找虔敬的儀式,
從大海藍色的中睡中,廢墟提起
清目醒神常洗頭哈哈

3. huffman哈弗曼編碼的問題(java)

package Huffman;
public class HuffmanTree {
int leafNum; //葉子結點數
HuffmanNode[] hnodes; //HaffmanTree 的結點數組
public HuffmanTree(int[] weight){
int n=weight.length;
this.leafNum=n;
this.hnodes=new HuffmanNode[2*n-1];
for(int i=0;i<=n-1;i++)
{
this.hnodes[i]=new HuffmanNode(weight[i]);
}
for(int i=0;i<n-1;i++)
{
int min1,min2,x1,x2;
min1=min2=Integer.MAX_VALUE; //記錄最小和次小的權值,初始為最大
x1=x2=-1; //記錄兩個無父母的最小權值的結點下標
for(int j=0;j<n+i;j++)
{
//查找無父母的最小權值結點
if(this.hnodes[j].weight<min1 && this.hnodes[j].parent==-1)
{
min2=min1;
x2=x1;
min1=this.hnodes[j].weight;
x1=j;
}
else if(this.hnodes[j].weight<min2 && this.hnodes[j].parent==-1)
{
min2=this.hnodes[j].weight;
x2=j;
}
}
this.hnodes[x1].parent=n+i; //將找出的兩課權值最小的二叉樹合並
this.hnodes[x2].parent=n+i;
this.hnodes[n+i]=new HuffmanNode(0);
this.hnodes[n+i].weight=this.hnodes[x1].weight+this.hnodes[x2].weight;
this.hnodes[n+i].left=x1;
this.hnodes[n+i].right=x2;
}
}
public String[] huffmanCode(){
//返回當前haffmantree的編碼
String[] code=new String[this.leafNum];
for(int i=0;i<this.leafNum;i++)
{
code[i]="";
int child=i;
int parent=hnodes[child].parent;
while(parent!=-1)
{
if(hnodes[parent].left==child)
code[i]="0"+code[i];
else
code[i]="1"+code[i];
child=parent;
parent=hnodes[child].parent;
}
}
return code;
}
public static void main(String []args)
{
int[] weight={22,32,45,57,7,76,33};
HuffmanTree ht=new HuffmanTree(weight);
String[] code=ht.huffmanCode();
for(int i=0;i<code.length;i++)
System.out.println(weight[i]+" 哈夫曼編碼為: "+code[i]);
}
}
改了其中的幾個for循環條件 可以運行了

4. 如何用java和huffman編碼實現壓縮文件和解壓文件

盡玩高難的。。。我都是直接用java zip這種類,你這個是要玩演算法啊,不過是個課題,有個思路,可以這樣做,就是先用io流把源文件內容讀到內存,然後用你的huffman演算法把他換成另只用字元串,然後在喲好那個io流輸出出來同時該個文件名後綴比如點jhm就是用java實現的huffman文件

5. 50分,求用Java實現哈夫曼編碼

你這是屬於畢設?還是課程設計?自己好好學習看看吧,別什麼都問,如果在做到過程中遇到問題,大家都會很樂意回答的

6. java哈夫曼編碼壓縮文件的思想

一.模型表示:
計算機使用數字代碼來存儲字元,ASC II碼是最常用的編碼。一個ASC II碼值佔一個位元組(8個二進制位),其最高位(b7)用作奇偶校驗位,共128個。要對一個文本文件進行壓縮,就是要對文件內的字元重新編碼,使出現次數較多的字元用較短的編碼存儲,而出現次數少的字元則採用相對較長的編碼存儲,最終使壓縮後整個文件的大小小於原文件。
這里採用哈夫曼編碼方式來對每個字元重新編碼,因為哈夫曼樹具有最小帶權路徑長度的性質,能夠生成用於壓縮的二進制前綴碼。程序使用的 「靜態統計模型」,也就是說在編碼前統計要編碼的信息中所有字元的出現頻率,字元的出現頻率即為字元的權,然後根據統計出的信息建立編碼樹,進行編碼。利用所得的編碼生成壓縮文件。由於採用的是「靜態統計模型」,在壓縮文件里必須保存統計出的結果以便解碼時構造相同的編碼樹,或者直接保存編碼樹本身。
在解壓縮時,首先從文件頭讀入保存的編碼信息,從而對後續的編碼解碼,還原成ASCII的形式,生成與原文相同的文件。

二.概要設計:
由於一棵有n個葉子結點的哈夫曼樹共有2n-1個結點,考慮到程序的執行效率,可以將二叉樹存放在連續空間里(靜態鏈表),空間的每個結點內仍有左子樹、右子樹、雙親等指針,以便解碼和解碼。即存儲在一個大小為2n-1的一維數組中,每個結點的結構為:
struct HNode
{
char elem; //保存結點所表示的字元(主要用於解碼時)
unsigned long weight; //保存結點的權值,對於葉子,即為字元的出現次數
int parent, lchild, rchild; //保存結點的雙親,左右孩子的位置

7. 哈夫曼編碼解碼器 java

建議: 用類似的方法,可以將某一學科的總分統計出來,並填入第48行相應的單元格中。

8. java用huffman樹壓縮文件時,文件夾應該如何處理

我講一下我的思路:

用java的位元組流讀取一個文件,假設這個文件是100位元組的。

int b;

FileInputStream in = new FileInputStream("文件路徑");

while((b = in.read()) != -1){...}這樣便得到100個整形(0~255)的數。

然後按照huffman的思想是統計每個數在這100個出現的概率,然後將最小的兩個概率合起來作為兩個葉子結點......一直做下去,直至生成一棵數。

9. 用java實現哈夫曼編碼

只要自己再加個類Tree就可以了。
代碼如下:

public class Tree {
double lChild, rChild, parent;
public Tree (double lChild, double rChild, double parent) {
this.lChild = lChild;
this.rChild = rChild;
this.parent = parent;
}
public double getLchild() {
return lChild;
}
public void setLchild(double lChild) {
this.lChild = lChild;
}
public double getRchild() {
return rChild;
}
public void setRchild(double rChild) {
this.rChild = rChild;
}
public double getParents() {
return parent;
}
public void setParents(double root) {
this.parent = root;
}

}

10. 求助:用java實現哈夫曼編碼壓縮與解壓縮演算法。

你好,由於內容比較多,先概述一下先。如圖所示,為我寫的一個壓縮軟體,原理是利用哈弗曼演算法實現的。我將資料整理好稍後就發到你郵箱,但在這里簡要說明一下代碼。

請看我的空間

http://hi..com/%D2%B6%BF%C6%C1%BC/blog

中的文章共5篇(太長了)

http://hi..com/%D2%B6%BF%C6%C1%BC/blog/item/93c35517bb528146f2de32fd.html

1.HuffmanTextEncoder類完成壓縮功能,可直接運行,壓縮測試用文本文件。

2.HuffmanTextDecoder類完成解壓縮功能,可直接運行,解壓縮壓縮後的文本文件。

3.BitReader,工具類,實現對BufferedInputStream的按位讀取。

4.BitWriter,工具類,實現按位寫入的功能。該類來自網路。

5.MinHeap<T>,模板工具類,實現了一個最小堆。生成Huffman樹時使用。

閱讀全文

與哈夫曼編碼壓縮java相關的資料

熱點內容
php中括弧定義數組 瀏覽:600
php列印堆棧 瀏覽:514
華為adb命令行刷機 瀏覽:963
人像攝影pdf 瀏覽:755
解壓文件密碼怎樣重新設置手機 瀏覽:999
高考指南pdf 瀏覽:693
爬蟲python數據存儲 瀏覽:240
u盤怎麼取消加密 瀏覽:429
567除以98的簡便演算法 瀏覽:340
pdf手機如何解壓 瀏覽:15
python描述器 瀏覽:60
戰地聯盟3解壓密碼 瀏覽:805
s型命令 瀏覽:25
php年薪5年 瀏覽:71
如何上網上設個人加密賬戶 瀏覽:44
linux打開ssh服務 瀏覽:78
微信位置可以加密嗎 瀏覽:470
演算法蠻力法 瀏覽:438
隨機排練命令 瀏覽:147
python多進程並發 瀏覽:41