网站横幅广告怎么做,对象存储链接WordPress,网站设计制作培训,怎么学习做网站求哈夫曼树的平均码长#xff0c;用优先队列来写#xff0c;先记录某个字符在字符串里出现的次数#xff0c;然后放入 队列。依次取出第一小和第二小的数#xff0c;将两个数相加#xff0c;构成新的虚拟结点#xff0c;放入队列中。 /*Accepted 196K 0MS C … 求哈夫曼树的平均码长用优先队列来写先记录某个字符在字符串里出现的次数然后放入 队列。依次取出第一小和第二小的数将两个数相加构成新的虚拟结点放入队列中。 /*Accepted 196K 0MS C 918B 2012-08-01 17:25:00*/
#includestdio.h
#includestring.h
#includestdlib.h
#includequeue
using namespace std;int key[1 7], len;
char t[1 10];int huffman()
{int i, a, b, c, sum 0;priority_queueint, vectorint, greaterint q;for(i 65; i 100; i ){if(key[i] 0)q.push(key[i]);}while(q.size() 1){a q.top(); q.pop();b q.top(); q.pop();c a b;sum c;q.push(c);}return sum 0 ? sum : len; //当只有一个字符的时候
}int main()
{int i, sum;while(scanf(%s, t) ! EOF){if(strcmp(t, END) 0) break;len strlen(t);memset(key, 0, sizeof key);for(i 0; i len; i )key[t[i]] ;sum huffman();printf(%d %d %.1f\n, len * 8, sum, (double)len * 8 / sum);}return 0;
} 转载于:https://www.cnblogs.com/Yu2012/archive/2012/08/01/2618720.html