#1852. 哈夫曼
哈夫曼
Description
hdu1053
熵编码器是一种数据编码方法,通过将“浪费的”或“额外的”信息删除,从而实现无损数据压缩。换句话说,熵编码消除了最初不必要的信息,以便准确地对消息进行编码。高熵意味着消息有大量的浪费信息;用ASCII编码的英文文本是具有高熵的消息类型的示例。已经压缩的消息,例如JPEG图形或ZIP归档,具有非常小的熵,并且不能从熵编码的进一步尝试中受益。
占64个比特。但是若用 00 表示A,用 01 表示B,用 10 表示C,用 11 表示D。则原字符串只占16个比特。
若用 0 表示 A, 10 表示 B,110 表示 C, 111 表示D, 则A出现了五次,占5个比特,B出现了1次,占2个比特,
C出现了一次,占3个比特,D出现了一次,占3个比特。一共占13个比特。
现在给一个只包含26个大写字母和下划线 "_"的字符串,使每个出现的字符都对应一个二进制串,且不能存在一个二进制串
是另一个二进制串的前缀。如若用 001表示A,0010表示B则不合法,因为001是0010的前缀。
要求在符合要求的前提下最少要多少个比特可以存得下这个字符串。
Input Format
输入数据有多组,每组一个字符串,包含大写字母和下划线,以"END"为结束符。Output Format
对于每个字符串输出一行,包含三个数字,a,b,c。
a为每个字符都占八个比特时的所占用的比特数,b为最少占用多少比特数,c为a/b,
c结果保留一位小数。
AAAAABCD
THE_CAT_IN_THE_HAT
END
64 13 4.9
144 51 2.8