huffman 樹稱為最優二叉樹,用其來對字元編碼是一種比較好的選擇,huffman樹的實現也比較簡單,構造huffman樹的思想就是每次從序列中取出權值最小的兩個,然後構造出乙個樹,然再去構造,一直到只有乙個根節點為止。根據這個「每次從中選出最小的兩個值」,我們應該想到優先佇列,優先佇列可以迅速的從一堆數中找出極小值或者極大值,用優先佇列的這個性質可以很簡單的構造huffman樹。
當然,構造huffman樹只是第一步,構造完成之和,我們需要開始編碼,其實就是遍歷一遍整棵huffman樹,然後給每個葉子節點乙個編碼,可以用「往左走填0,往右走填1」的方法來編碼。
解碼就是遍歷,到葉子節點也就可以取到這個編碼所對應的值了。
下面是我很久以前寫的乙個實現,可以輸入一篇文章,該程式會首先對每個出現的單詞計數(頻率),然後構造huffman編碼等,同時你還可以輸入編碼以解碼。
/*
編號:004_13
名字:_huffman_tree
描述:huffman樹與應用類
備註:本類僅對小寫英文本元實現,對於不同需求,請自行修改**
*/class _huffman_tree
; vector<_character_code> _huffman_code;
_huffman_tree()
_huffman_tree(char _value, int _weight, _huffman_tree* left_child, _huffman_tree* right_child)
//judge if this node is leaf node
bool leaf()
//you need to offer a file that stored the txt
//count num
void _count_character_nums(string filename)
_character_num[(size_t)(_line[i] - 'a')]++;
}} _open.close();
} //function pointer
class _small_big
};//build huffman tree
//return the root pointer of this huffman tree
_huffman_tree* _create_huffman_tree()
}//create this huffman tree
while (_my_queue.size()>1)
return _my_queue.top();
} //encode huffman code
//return void
void _encode_huffman(_huffman_tree* _root_pointer,string _huffman_code)
string _left_code = _huffman_code;
string _right_code = _huffman_code;
_left_code += '1';
_right_code += '0';
_encode_huffman(_root_pointer->_left_child_pointer, _left_code);
_encode_huffman(_root_pointer->_right_child_pointer, _right_code);
} //decode,so you need to offer a filename
//this file need including some huffman code
//the fuction will decode these huffman code
void _decode_huffman(_huffman_tree* _root_pointer,string filename)
if (_read_one_line[i] == '1')
if (_read_one_line[i] == '0')
}} _read_file_stream.close();
}};
哈夫曼樹與哈夫曼編碼(C 實現)
1 對給定的n個權值構成n棵二叉樹的初始集合f 其中每棵二叉樹ti中只有乙個權值為wi的根結點,它的左右子樹均為空。2 在f中選取兩棵根結點權值最小的樹作為新構造的二叉樹的左右子樹,新二叉樹的根結點的權值為其左右子樹的根結點的權值之和。3 從f中刪除這兩棵樹,並把這棵新的二叉樹同樣以公升序排列加入到...
哈夫曼樹 C 實現
include using namespace std define maxbit 10 define maxvalue 10000 define maxleaf 100 define maxnode maxleaf 2 1 定義哈夫曼樹編碼型別 typedef structcodetype 定義哈...
哈夫曼樹C 實現
哈夫曼樹的介紹 huffman tree,中文名是哈夫曼樹或霍夫曼樹,它是最優二叉樹。定義 給定n個權值作為n個葉子結點,構造一棵二叉樹,若樹的帶權路徑長度達到最小,則這棵樹被稱為哈夫曼樹。這個定義裡面涉及到了幾個陌生的概念,下面就是一顆哈夫曼樹,我們來看 答。01 路徑和路徑長度 定義 在一棵樹中...