利用matlab自带函数对字符串进行Huffman编码
来源:互联网 发布:java实现会议管理系统 编辑:程序博客网 时间:2024/06/05 00:30
1. 代码
clear; clc;str = 'You have to believe in yourself. That is the secret of success.';%根据字符串str得到符号集symbols,并计算各集合元素的出现概率数组plen = length(str);unique_str = unique(str);unique_len = length(unique_str);symbols = cell(1, unique_len);p = zeros(1, unique_len);for i = 1:unique_len symbols{1,i} = unique_str(i); p(i) = numel(find(str==unique_str(i))) / len;end%根据符号集symbols和概率数组p计算Huffman编码词典[dict, avglen] = huffmandict(symbols, p);%计算平均码长code_len = zeros(unique_len, 1);for i = 1:unique_len code_len(i) = numel(cell2mat(dict(i,2)));endmax_len = max(code_len);%打印字典表for i = 1:unique_len fprintf('`%s` : ', unique_str(i)); fprintf('%d ', dict{i,2}); fprintf('\n');endfprintf('平均码长 : %f\n', sum(p*code_len) );fprintf('信源熵 : %f\n', sum(p.*(-log2(p))) );fprintf('编码效率 : %f\n', 1/sum(p.*(-log2(p))) );%计算字符串最终编码长度enc_len = 0;for i = 1:len enc_len = enc_len + numel(dict{unique_str==str(i),2});endfprintf('编码前字符串总长度 : %d\n', numel(str));fprintf('编码后字符串二进制总长度 : %d\n', enc_len);fprintf('编码后字符串字节总长度(%d/8) : %d\n', enc_len, ceil(enc_len/8));%打印最终编码fprintf('编码结果 : ');for i = 1:len %fprintf('%s : ', str(i)); fprintf('%d', dict{unique_str==str(i),2}); fprintf(' ');endfprintf('\n');
2. 输出结果
` ` : 0 0 0 `.` : 1 0 0 1 0 `T` : 1 0 0 1 1 1 `Y` : 1 0 0 1 1 0 `a` : 0 1 1 0 1 `b` : 0 1 0 0 0 0 1 `c` : 1 1 0 1 `e` : 0 0 1 `f` : 0 1 1 0 0 `h` : 1 1 0 0 `i` : 1 1 1 1 `l` : 0 1 1 1 1 `n` : 0 1 0 0 0 0 0 `o` : 1 0 0 0 `r` : 0 1 1 1 0 `s` : 1 0 1 `t` : 0 1 0 1 `u` : 1 1 1 0 `v` : 0 1 0 0 1 `y` : 0 1 0 0 0 1 平均码长 : 3.968254信源熵 : 3.927877编码效率 : 0.254590编码前字符串总长度 : 63编码后字符串二进制总长度 : 250编码后字符串字节总长度(250/8) : 32编码结果 : 100110 1000 1110 000 1100 01101 01001 001 000 0101 1000 000 0100001 001 01111 1111 001 01001 001 000 1111 0100000 000 010001 1000 1110 01110 101 001 01111 01100 10010 000 100111 1100 01101 0101 000 1111 101 000 0101 1100 001 000 101 001 1101 01110 001 0101 000 1000 01100 000 101 1110 1101 1101 001 101 101 10010
3. 讨论
Huffman编码存在不唯一的问题。举个例子,对于字符串google
进行Huffman编码可以是如下:
随意翻到有篇论文中探讨了这个问题,提出增加三条约束来使得Huffman编码唯一化:
1)尽量减少Huffman树的层次数
2)层次多的放在右分支
3)先出现的现用于构造
0 0
- 利用matlab自带函数对字符串进行Huffman编码
- SQL2005自带扩展函数对字符串进行MD5加密
- 使用SQL2005自带扩展函数对字符串进行MD5加密(转)
- 使用SQL2005自带扩展函数对字符串进行MD5加密(转)
- SQL2005以上自带扩展函数对字符串进行MD5加密
- 使用Huffman方法对字符进行编码
- 对26个英文字母进行huffman编码
- HUFFMAN三元编码 MATLAB
- matlab 二元Huffman编码
- 对字符串进行编码
- 决策树--matlab自带函数
- matlab自带滤波器函数
- 利用Huffman树进行文本编码解码的实现
- matlab自带的分类器对人脸、鼻子、嘴进行检测
- 使用JDK自带的native2ascii工具对properties文件进行编码转换
- js 自带字符串函数
- js 自带字符串函数
- 对字符串进行编码转化
- WireShark分析RTP相关的一些经典文档
- 使用Sublime Text 3进行Markdown 编辑+实时预览
- Strict Standards: Only variables should be passed by reference 只允许传递变量
- 户籍管理系统的设计与实现
- stackoverflow: Warning: filectime(): stat failed for file2.html in test\index.php on line 14
- 利用matlab自带函数对字符串进行Huffman编码
- Easy 237题 Delete Node in a Linked List
- Creating Your First Maya Plug-in in Visual Studio with cmake
- 利用js使图片变大
- Sublime Text 3 3126 注册码
- 数据结构笔记之图(ADT)
- 深度分享|姚劲波:创业要趁早,要做未来的事情!
- 高可用性、负载均衡的mysql集群解决方案
- Go 1.8 performance improvements, one month in