- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
系统框图 :Input :Data Compressor :Output 1..n输入符号 1..m输出符号 算法设计 字符 概率 a 0.45 b 0.24 c 0.11 d 0.08 e 0.07 f 0.05 字符 编码 a 1 b 01 c 0000 d 0001 e 0010 f 0011 Hufman编码算法 对字符按出现概率排序; 选概率最低的一对字符,建立一棵有两个叶子的树,分配其中概率低的叶子编码为1,较高的为0; 将刚才已分配编码的两个字符概率求和,并将此认作一的新字符的概率; 若剩下超过一个字符,跳转到1; 对所有字符,按从树的根节点开始到最终叶节点路径生成编码。 需求表格 名称 数据压缩模块 目的 霍夫曼数据压缩的编码模块 输入 编码表,位编码的以字节为单位的输入符 输出 已组合好的压缩过的输出符 功能 霍夫曼编码 性能 快速 生产成本 N/A 功耗 N/A 物理尺寸和重量 N/A 规格说明 Data-compressor Buffer:data-buffer Table:symbol-table Current-bit:integer Encode():boolean,data-buffer Flush() New-symbol-table() Data-buffer data-buffer[databuflen]:character len:integer insert() length() Symbol-table symbols[nsymbols]:data-buffer value():symbol load() 编码 创建新缓冲区 加入到缓冲区 返回“T” 加入到缓冲区 返回“F” 缓冲区满? T F Encode行为图 压缩进当前缓冲区 将符号位低位压缩进 当前缓冲区,高位放置 溢出缓冲区 更新长度 新符号会装满 缓冲区吗? T F Insert行为图 输入符号 程序设计 data_buf数据缓冲区类定义及实现: const int databuflen=8; const int bitsperbyte=8; const int bytemask=0xff; const char lowbitsmask[bitsperbyte]= {0,1,3,7,15,31,63,127}; typedef char boolean; #define TRUE 1 #define FALSE 0 class data_buffer{ char databuf[databuflen]; int len; int length_in_chars(){return len/bitsperbyte;} public: void insert(data_buffer,data_buffer); int length(){return len;} int length_in_bytes(){return (int)ceil(len/8.0);} void initialize(); void data_buffer::fill(data_buffer,int); data_buffer operator=(data_buffer); data_buffer(){initialize();} ~data_buffer(){}; } data_buffer empty_buffer; 程序设计 void data_buffer::insert(data_buffer newval,data_buffer newbuf){ int i,j,bitstoshift,maxbyte; bitstoshift=length()-length_in_byte()*bitsperbyte; maxbyte=newval.length()+length()databuflen*bitsperbyte? databuflen:newval.length_in_chars(); for(i = 0;i maxbyte;i++){ databuf[i+length_in_chars()] |= (newval.databuf[i] bitstoshift) bytemask; databuf[i+length_in_chars()+1] |= (newval.databuf[i] (bitsperbyte-bitstoshift)) lowbitsmask[bitsperbyte – bitstoshift]; } 程序设计 if (newval.length()+length() databuflen*bitsperbyte){ bitstoshift = lengt
您可能关注的文档
最近下载
- 《篮球训练》教学大纲.pdf VIP
- 广西桂林理工大学南宁分校招聘笔试真题2024.docx VIP
- 新大陆物联网平台操作流程.docx VIP
- Fronius伏能士 TPS 270i C Pulse MIG.MAG电源操作手册.pdf VIP
- 电焊安全技术交底.doc VIP
- 城市轨道交通运营管理毕业论文-关于铁路客运服务质量的调查与探讨.docx VIP
- 2025福建莆田市城市建设投资开发集团有限公司招聘30人考试备考题库及答案解析.docx VIP
- 物联网全栈智能应用实训系统设备接线图V2.0.pdf VIP
- 柔性触摸屏及全贴合生产项目投资计划书.pptx VIP
- 《食品安全与营养健康》课件.ppt VIP
文档评论(0)