1. 问题
2. 解析
构造最优前缀码的贪心算法就是哈夫曼算法。
构建哈夫曼树的过程:
1.按照贪心算法每次找权值最小(即值最小)的两个数,构成孩子结点,并将这两个数据排除出这一堆数据之外。
2.由于哈弗曼树的数据全在叶子结点,所以把上述权值最小的两个数据构成父结点,然后再将父结点的权值放回上述数据,返回第一步,重复上述过程,直到所有的数据都变成哈夫曼树的叶子结点。
实例:{5, 5, 10, 10, 10, 15, 20, 25}
引理1:C是字符集,∀c∈C,f©为频率,x,y∈C,f(x),f(y)频率最小,那么存在最优二元前缀码使得x,y码字等长且仅在最后以为不同。
3. 设计
4. 分析
O(nlogn)频率排序;for 循环 O(n),插入操作 O(logn)
算法时间复杂度是 O(nlogn)