《算法分析》作业11

1. 问题

给定字符集 和每个字符的频率 ,求关于 C 的一个最优前缀码

2. 解析

构造最优前缀码的贪心算法就是哈夫曼算法(Huffman)

 

3. 设计

1.n<-|C|

2.Q<-C         //按频率递增构成队列 Q

3.for i<-1 to n-1 do

4.    z<-Allocate-Node()

5.    z.left<-Q中最小元      //取出Q中最小元作为z的左儿子

6.    z.right<-Q中最小元   //取出Q中最小元作为z的右儿子

7.    f(z)<-f(x)+f(y)

8.    Insert(Q,z)

9.return Q

 

4. 分析

O(nlogn)频率排序;for 循环 O(n),插入操作 O(logn),算法时间复杂

度是 O(nlogn)

5. 源码

[github源码地址]

https://github.com/xiaojunjun601/sfHomework1/blob/master/%E4%BB%A3%E7%A0%81/hafuman.cpp

posted @ 2021-05-24 20:45  JamZF  阅读(52)  评论(0编辑  收藏  举报