ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:77.24KB ,
资源ID:29992600      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29992600.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(行程编码实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

行程编码实验报告.docx

1、行程编码实验报告行程编码以vc方式实现实验目的:了解行程算法的压缩和解压过程,学会计算压缩比以及与行程算法相关的问题。实验平台:在vc2010下以c+代码的形式完成。软件设计说明:该程序主要是为了实现压缩和解压的功能。压缩算法相对较为简单,主要是对输入 的要压缩的数据进行遍历,遍历并同时记录相同的数据的数目,当遍历到不相同的数据后停止遍历并将数据和数目压入到vector中保存,考虑到可能会在数据间产生误差,我加入用于区分不同的两个数据,还有若数据的长度为1时,我不将1保存到vector中,以此方式尽可能的减少压缩数据的长度,增加压缩的效果。函数中使用了中的功能,其作用为将int转换为strin

2、g的类型,便于储存数据,其功能函数如下:void yasuo(vector a) /a传入要压缩的数据 int length=a.size(); /原数据的长度 vector temp; /保存压缩后的数据 int j=0; int n=1; for(int i=0;ilength-1;i+) string b=ai; if(i!=length-2) if(ai!=ai+1) if(n!=1) if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; stringstream out; outn

3、; s = out.str(); temp.push_back(s); s=; temp.push_back(s); n=1; j=j+2; else if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; s=; temp.push_back(s); n=1; j=j+1; else n+; else if(ai=ai+1) n+; if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; s

4、tringstream out; outn; s = out.str(); temp.push_back(s); n=1; j=j+2; else if(n!=1) if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; stringstream out; outn; s = out.str(); temp.push_back(s); s=; temp.push_back(s); n=1; if(ai+1=) temp.push_back(ai+1); temp.push_back(ai+1)

5、; else temp.push_back(ai+1); j=j+2; else if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; s=; temp.push_back(s); n=1; if(ai+1=) temp.push_back(ai+1); temp.push_back(ai+1); else temp.push_back(ai+1); j=j+2; print(temp,a,j); /用于数据的输出然后是解压算法的设计思路如下,主要是定义三个vector的向量,一个用于记录要

6、压缩的数据,一个用于记录标志的在string中的位置,然后根据的位置求出数据的数目,将数目保存到另外一个vector中,然后根据数据和长度一一对应输出,这样就将数据解压完成。 但是在这里需要特别注意对的处理在压缩的过程中若压缩的字符为,则输出的时候记为,判断的时候主要是判定连续3个字符是否全为,以此判断是否是遇到标志字符。代码如下:void jieya(string a) vector data; /记录数据 vector loca; /记录标志的位置 vector len; /记录个数据的长度 vector zhi; /记录每个数据的各个位上的数值 for(int i=0;i2) if(ai

7、=&ai+1=&ai+2=) data.push_back(); loca.push_back(i+2); i=i+2; else if(ai=&ai+1!=) data.push_back(ai+1); loca.push_back(i+1); else if(ai=&ai+1=&ai+2=) data.push_back(); loca.push_back(i+2); i=i+2; else if(ai=&ai+1!=) data.push_back(ai+1); loca.push_back(i+1); for(int j=0;jdata.size();j+) /记录数据的长度 if(d

8、ata.size()=1) if(locaj=a.length()-1&dataj!=) len.push_back(1); else if(locaj=a.length()-1&dataj=) len.push_back(1); else int lensi=0; for(int k=locaj+1;k=0&ak=9) zhi.push_back(int)ak-48); if(zhi.size()=0) lensi=1; else for(int l=0;lzhi.size();l+) int z=zhi.size()-l-1; lensi=lensi+zhil*pow(float)10,z

9、); len.push_back(lensi); lensi=0; zhi.clear(); else if(j=data.size()-1) if(a.length()-locaj=0) len.push_back(1); else int lensi1=0; for(int k=locaj+1;k=0&ak=9) zhi.push_back(int)ak-48); if(zhi.size()=0) lensi1=1; else for(int l=0;lzhi.size();l+) int z=zhi.size()-l-1; lensi1=lensi1+zhil*pow(float)10,

10、z); len.push_back(lensi1); lensi1=0; zhi.clear(); else int lensi2=0; for(int k=locaj+1;k=0&ak=9) zhi.push_back(int)ak-48); if(zhi.size()=0) lensi2=1; else for(int l=0;lzhi.size();l+) int z=zhi.size()-l-1; lensi2=lensi2+zhil*pow(float)10,z); len.push_back(lensi2); lensi2=0; zhi.clear(); for(int h=0;h

11、loca.size();h+) coutlocah ; print2(data,len);运行截图:首先运行压缩算法:压缩不同字符,结果如下:qqqqqqqWWWWWWW22222222111111(=结果如下:输入特殊的字符,包含,输入wwww1111R运算结果如下:解压的运行结果如图,解压q7W72816(6=4,运行结果如下:解压5w414R,运行结果如下:解压w5t7,运行结果如下:此数据考虑了边界的输出情况,而输出结果也是正确的。完整代码如下:#include#include#include#includeusing namespace std;void print(vector &

12、temp,vector & a) /输出解压后的数据 double rate; cout压缩后的数据为:endl; for(int k=0;ktemp.size();k+) couttempk; coutendl; cout压缩前的长度为:a.size()endl; cout压缩后的长度为:temp.size()endl; rate=a.size()/(temp.size()*1.0); cout压缩率为:rateendl;void print2(vector &a,vector &b) /输出压缩后的数据 cout解压后的数据为:endl; for(int i=0;ia.size();i+)

13、 for(int j=0;jbi;j+) coutai;void yasuo(vector a) /压缩算法 int length=a.size(); vector temp; int j=0; int n=1; for(int i=0;ilength-1;i+) string b=ai; if(i!=length-2) if(ai!=ai+1) if(n!=1) if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; stringstream out; outn; s = out.str()

14、; temp.push_back(s); s=; temp.push_back(s); n=1; j=j+2; else if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; s=; temp.push_back(s); n=1; j=j+1; else n+; else if(ai=ai+1) n+; if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; stringstream out

15、; outn; s = out.str(); temp.push_back(s); n=1; j=j+2; else if(n!=1) if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; stringstream out; outn; s = out.str(); temp.push_back(s); s=; temp.push_back(s); n=1; if(ai+1=) temp.push_back(ai+1); temp.push_back(ai+1); else temp.pus

16、h_back(ai+1); j=j+2; else if(b=) temp.push_back(b); temp.push_back(b); else temp.push_back(b); string s; s=; temp.push_back(s); n=1; if(ai+1=) temp.push_back(ai+1); temp.push_back(ai+1); else temp.push_back(ai+1); j=j+2; print(temp,a);void jieya(string a) /解压算法 vector data; /保存数据 vector loca; /保存标志的

17、位置 vector len; /保存数据的长度 vector zhi; for(int i=0;i2) if(ai=&ai+1=&ai+2=) data.push_back(); loca.push_back(i+2); i=i+2; else if(ai=&ai+1!=) data.push_back(ai+1); loca.push_back(i+1); else if(ai=&ai+1=&ai+2=) data.push_back(); loca.push_back(i+2); i=i+2; else if(ai=&ai+1!=) data.push_back(ai+1); loca.p

18、ush_back(i+1); for(int j=0;jdata.size();j+) if(data.size()=1) if(locaj=a.length()-1&dataj!=) len.push_back(1); else if(locaj=a.length()-1&dataj=) len.push_back(1); else int lensi=0; for(int k=locaj+1;k=0&ak=9) zhi.push_back(int)ak-48); if(zhi.size()=0) lensi=1; else for(int l=0;lzhi.size();l+) int z

19、=zhi.size()-l-1; lensi=lensi+zhil*pow(float)10,z); len.push_back(lensi); lensi=0; zhi.clear(); else if(j=data.size()-1) if(a.length()-locaj=0) len.push_back(1); else int lensi1=0; for(int k=locaj+1;k=0&ak=9) zhi.push_back(int)ak-48); if(zhi.size()=0) lensi1=1; else for(int l=0;lzhi.size();l+) int z=zhi.size()-l-1; lensi1=lensi1+zhil*pow(float)10,z); len.push_back(lensi1);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1