huffman編碼函式

2021-06-21 18:06:20 字數 2721 閱讀 9782

雖然東西簡單了點,可能還有錯,讀者們別介意它太囉嗦,有更好的建議歡迎交流的。放出來希望對像我一樣學習程式設計的人有幫助(雖然看別人的**貌似是件很痛苦的事啊)。

這裡沒有用模板函式(人比較懶),,節點的權值都是int,,類函式定義都在類的內部

//哈夫曼樹類

class node;};

class huffmantree

huffmantree()

void build_tree(int pro,char cha,int count)

for(int j=0;jroot->weight>r[i]->root->weight)

}for(int i=j+2;iroot->weight>r[i]->root->weight)

}huffmantree *t_r=new huffmantree(); //過渡用的t_r 生成新的樹賦給r[j+1]

t_r->root->lchild=r[j]->root;

r[j]->root->parent=t_r->root;

r[j]->root->node_code='0'; //是parent的左孩子,賦予路徑0

t_r->root->rchild=r[j+1]->root;

r[j+1]->root->parent=t_r->root;

r[j+1]->root->node_code='1'; //是parent的左孩子,賦予路徑1

t_r->root->weight = r[j]->root->weight+r[j+1]->root->weight; //左右孩子的權值和

r[j+1]=t_r;

if(j+1==count-1)

root=r[j+1]->root;

} }void turn_char_code(node *h) //輸出每個字元的編碼

leaf_code.push_back(s);

coutif(h->rchild!=null)

}string turn_string_code(string src) //返回字串的哈夫曼編碼

} //計算src中各字元的出現次數 相對應記錄於p

for(int j=0;j<=c_count;j++)

;};class huffmantree

huffmantree()

void build_tree(int pro,char cha,int count)

for(int j=0;j

}for(int i=j+2;i

}huffmantree *t_r=new huffmantree();    //過渡用的t_r 生成新的樹賦給r[j+1]

t_r->root->lchild=r[j]->root;

r[j]->root->parent=t_r->root;

r[j]->root->node_code='0';      //是parent的左孩子,賦予路徑0

t_r->root->rchild=r[j+1]->root;

r[j+1]->root->parent=t_r->root;

r[j+1]->root->node_code='1';      //是parent的左孩子,賦予路徑1

t_r->root->weight = r[j]->root->weight+r[j+1]->root->weight;       //左右孩子的權值和

r[j+1]=t_r;

if(j+1==count-1)

root=r[j+1]->root;}}

void turn_char_code(node *h)      //輸出每個字元的編碼

leaf_code.push_back(s);

cout<}

if(h->lchild!=null)

if(h->rchild!=null)

}string turn_string_code(string src)  //返回字串的哈夫曼編碼

}return h_string;

}string decode(string src)}}

return s;}};

string huffmancoding(const string &src)

}if(k>0)         //在c中未找到當前字元

}  //計算src中各字元的出現次數 相對應記錄於p

for(int j=0;j<=c_count;j++)

}huffmantree h_tree;

h_tree.build_tree(p,c,c_count);

cout << "***** code for each char :" << endl;

destcode=h_tree.turn_string_code(src);

cout << "coded string   : " << destcode << endl;

string destdecode;

/// 此處輸出每個字元的編碼

/// 在此處新增解碼**,輸入為destcode,輸出為destdecode

destdecode=h_tree.decode(destcode);

cout << "decoded string : " << destdecode << endl;

return destdecode;

}

Huffman樹與Huffman編碼

一.哈夫曼樹概念 路徑 祖先到節點之間的分支構成一條通往節點的路徑 路徑長度 路徑上分支的數目稱為路徑長度 節點的權 給樹中節點所設的物理意義的值 節點帶權路徑長度 從根到該點路徑長度與該點權值的乘機 huffman樹就是所有樹中每點帶權路徑加和最短的樹。二.huffman樹構造步驟 1.根據每個點...

Huffman樹與Huffman編碼

huffman tree簡介 赫夫曼樹 huffman tree 又稱最優二叉樹,是一類帶權路徑長度最短的樹。假設有n個權值,如果構造一棵有n個葉子節點的二叉樹,而這n個葉子節點的權值是,則所構造出的帶權路徑長度最小的二叉樹就被稱為赫夫曼樹。這裡補充下樹的帶權路徑長度的概念。樹的帶權路徑長度指樹中所...

huffman樹和huffman編碼

huffman樹和huffman編碼 include include include include define overflow 1 typedef struct htnode,huffmantree typedef char huffmancode void select huffmantre...