题目一:
(1)最优huffman编码为:
111 (此字符为空格)
a 1010
b 100100
c 00101
d 10111
e 010
f 110100
g 100111
h 0001
i 0111
j 1101101110
k 11011010
l 10110
m 110111
n 0110
o 1000
p 100110
q 1101101100
r 0000
s 0011
t 1100
u 00100
v 1101100
w 110101
x 1101101111
y 100101
z 1101101101
(2)平均编码长度为5.74074;
(3)认为嫡值会比平均编码长度小.因为嫡值包含有概率的计算,算出来的压缩比会更高,即编码长度会较小.
(4)感觉除了标点外.英文压缩或许就字母频率了.
2哈夫曼编码实现
#include <iostream>
#include <fstream>
#include <queue>
#include <string>
#include <algorithm>
using namespace std;
class Node
{
public:
char mchar;
int mweight;
Node *lchild,*rchild;
Node()
{
mchar='!'; //不是叶子结点就叹号表示
lchild=rchild=NULL;
}
Node(char c,int w)
{
mchar=c;
mweight=w;
lchild=rchild=NULL;
}
//Node(Node &n)
//{
// mchar=n.mchar;
// mweight=n.mweight;
// lchild=n.lchild;
// rchild=n.rchild;
//}
};
bool operator <(Node a,Node b)
{
return a.mweight>b.mweight;
}
class HuffmanTree
{
public:
long mbitlenlastcoding;
int mSumBitLen;
Node *root;
//queue头中自带有优先队列.如此定义可以小的先出队.注意要如此重载<运算符
priority_queue<