www.pudn.com > Huffman.rar > huffman_f.h


#ifndef _HUFFMAN_F_HEADER_001_
#define _HUFFMAN_F_HEADER_001_

#include "huffman_base.h"

// 在huffman_e的基础上,将排序改为利用堆排序原理选择最小的两个权值
// 也即,将所有元素的权值组织成堆后,每次堆内的根结点就是最小值了
// 每取出一个根结点后,就把堆尾元素调到根结点重建堆。取出两个最小
// 值合并成一个子树后,再把子树作为叶子结点放到堆中,并让其上升到
// 合适的位置,保持堆性质不变
// 因为每次不必完成整个排序过程,而只是组织成堆,因此,这种方法要
// 比使用快速排序更快
// 上述算法参考了mg-1.2.1中Huffman编码的实现,见
// http://www.cs.mu.oz.au/mg/

class huffman_f :
	public huffman_base
{
public:
	huffman_f() {}	
	virtual ~huffman_f(void) {}

public:
	void generate_codes(int num, const unsigned long* weights);
};

#endif