行程编码实验报告_第1页
行程编码实验报告_第2页
行程编码实验报告_第3页
行程编码实验报告_第4页
行程编码实验报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、行程编码算法实现姓名:k学号:201426810618班级:计自1401班一、实验目的:了解行程算法的压缩和解压过程,学会计算压缩比以及与行程算法相关的问题。二、软件设计说明:1、实验平台:visual studio 2013 2、实验原理:该程序主要是为了实现压缩和解压的功能。压缩算法相对较为简单,主要是对输入 的要压缩的数据进行遍历,遍历并同时记录相同的数据的数目,当遍历到不相同的 数据后停止遍历并将数据和数目压入到 vector中保存,考虑到可能会在数据间产生 误差,我加入用于区分不同的两个数据,还有若数据的长度为1时,我不将1保存到vector中,以此方式尽可能的减少压缩数据的长度,增

2、加压缩的效果。函数中 使用了 <sstream外的功能,其作用为将int转换为string的类型,便于储存数据, 其功能函数如下:/a传入要压缩的数据原数据的长度保存压缩后的数据void compress(vector<string> a)int length=a.size();vector<string> temp;int j=0;int n=1;for(int i=0;i<length-1;i+)string b=ai;if(i!=length-2) if(ai!=ai+1)if(n!=1)if(b="")temp.push_back

3、(b);temp.push_back(b);elsetemp.push_back(b);string s;stringstream out;out<<n;s = out.str();temp.push_back(s);s=""temp.push_back(s);n=1;j=j+2;elseif(b="")temp.push_back(b);temp.push_back(b);elsetemp.push_back(b);string s;s=""temp.push_back(s);n=1;j=j+1;elsen+;elsei

4、f(ai=ai+1)n+;if(b="")temp.push_back(b);temp.push_back(b);elsetemp.push_back(b);string s;stringstream out;out<<n;s = out.str();temp.push_back(s);n=1;j=j+2;elseif(n!=1)if(b="")temp.push_back(b);temp.push_back(b);elsetemp.push_back(b);string s;stringstream out;out<<n;s =

5、 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);elsetemp.push_back(ai+1);j=j+2;elseif(b="")temp.push_back(b);temp.push_back(b);elsetemp.push_back(b);string s;s=""temp.push_back(s);n=1;if(ai+1="&q

6、uot;)temp.push_back(ai+1);temp.push_back(ai+1);elsetemp.push_back(ai+1);j=j+2;print(temp,a,j);/用于数据的输出然后是解压算法的设计思路如下,主要是定义三个vector 的向量,一个用于记录要压缩的数据,一个用于记录标志 的在 string 中的位置,然后根据 的位置求出数据的数目,将数目保存到另外一个vector 中,然后根据数据和长度一一对应输出,这样就将数据解压完成。 但是在这里需要特别注意对 的处理在压缩的过程中若压缩的字符为 ,则输出的时候记为 ,判断的时候主要是判定连续3 个字符是否全为 ,

7、以此判断是否是遇到标志字符 。代码如下:void uncompress(string a)/记录数据/记录标志的位置/记录个数据的长度/记录每个数据的各个位上的数值/记录数据和标志的位置vector<char> data;vector<int> loca;vector<int> len;vector<int> zhi;for(int i=0;i<a.length();i+)if(i=0)if(ai='') data.push_back('');loca.push_back(1);i+;elsedata.pus

8、h_back(a0);loca.push_back(i);else if(a.length()-i-1>2)if(ai=''&&ai+1=''&&ai+2='')data.push_back('');loca.push_back(i+2);i=i+2;elseif(ai=''&&ai+1!='')data.push_back(ai+1);loca.push_back(i+1);elseif(ai=''&&ai+1=

9、''&&ai+2='')data.push_back('');loca.push_back(i+2);i=i+2; elseif(ai=''&&ai+1!='')data.push_back(ai+1);loca.push_back(i+1);/记录数据的长度for(int j=0;j<data.size();j+)if(data.size()=1) if(locaj=a.length()-1&&dataj!='')len.push_back(1

10、);else if(locaj=a.length()-1&&dataj='')len.push_back(1);elseint lensi=0;for(int k=locaj+1;k<a.size();k+)if(ak>='0'&&ak<='9')zhi.push_back(int)ak-48);if(zhi.size()=0)lensi=1;elsefor(int l=0;l<zhi.size();l+)int z=zhi.size()-l-1;lensi=lensi+zhil*pow(f

11、loat)10,z);len.push_back(lensi);lensi=0;zhi.clear();elseif(j=data.size()-1)if(a.length()-locaj=0)len.push_back(1);elseint lensi1=0;for(int k=locaj+1;k<a.size();k+)if(ak>='0'&&ak<='9')zhi.push_back(int)ak-48);if(zhi.size()=0)lensi1=1;elsefor(int l=0;l<zhi.size();l+

12、)int z=zhi.size()-l-1;lensi1=lensi1+zhil*pow(float)10,z);len.push_back(lensi1);lensi1=0;zhi.clear();elseint lensi2=0;for(int k=locaj+1;k<locaj+1-1;k+)if(ak>='0'&&ak<='9')zhi.push_back(int)ak-48);if(zhi.size()=0)lensi2=1;elsefor(int l=0;l<zhi.size();l+)int z=zhi.si

13、ze()-l-1;lensi2=lensi2+zhil*pow(float)10,z);len.push_back(lensi2);lensi2=0;zhi.clear();for(int h=0;h<loca.size();h+)cout<<locah<<""print2(data,len);运行截图:压缩不同字符,输入:dddddddddhhhhhhhhhh3111888899999999结果如下:蜜 c:.wind5入£ycmd.exe居13jjl- hs 63 18 h 一佰h xt 度度2.据hll压 £数dha

14、k-tfj-rrdd5十后dd入 ejejdd输 ®压®解dd请输入特殊的字符,包含 一,输入:000008788888运算结果如下:请输入你想压缩的数据;wwsx000008 788888 s压缩后的数据为工x6 05 xs 78 5 、蹉麟霸15 压缩率为!ieelsewww000008 788888s请输入你想压缩的数据,源代码如下:#include<iostream>#include<vector>#include<string>#include<sstream>using namespace std;输出解压后的数据

15、void print(vector<string> &temp,vector<string> & a)(double rate;cout<<"压缩后的数据为:"<<endl;for(int k=0;k<temp.size();k+)cout<<tempk;cout<<endl;cout<<"压缩前的长度为:"<<a.size()<<endl;cout<<"压缩后的长度为:"<<tem

16、p.size()<<endl;rate=a.size()/(temp.size()*1.0);cout<<"压缩率为:"<<rate<<endl;/输出压缩后的数据void print2(vector<char> &a,vector<int> &b) cout<<" 解压后的数据为: "<<endl;for(int i=0;i<a.size();i+)for(int j=0;j<bi;j+)cout<<ai;void c

17、ompress(vector<string> a,vector<string> &temp)/压缩算法int length=a.size();int j=0;int n=1;for(int i=0;i<length-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);temp.push_back(b);string s;stringstream out;out<<n;s = out.st

18、r();temp.push_back(s);s=""temp.push_back(s);n=1;j=j+2;elseif(b="")temp.push_back(b);temp.push_back(b);elsetemp.push_back(b);string s;s=""temp.push_back(s);n=1;j=j+1; elsen+;elseif(ai=ai+1)n+;if(b="")temp.push_back(b);temp.push_back(b);elsetemp.push_back(b);str

19、ing s;stringstream out;out<<n;s = out.str();temp.push_back(s);n=1;j=j+2;elseif(n!=1)if(b="")temp.push_back(b);temp.push_back(b);elsetemp.push_back(b);string s;stringstream out;out<<n;s = out.str();temp.push_back(s);s=""temp.push_back(s);n=1;if(ai+1="")temp.p

20、ush_back(ai+1);temp.push_back(ai+1);elsetemp.push_back(ai+1);j=j+2;elseif(b="")temp.push_back(b);temp.push_back(b); elsetemp.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);elsetemp.push_back(ai+1);j=j+2;print(temp,a)

21、;/解压算法/保存数据/保存标志的位置/保存数据的长度void uncompress(string a)vector<char> data;vector<int> loca;vector<int> len;vector<int> zhi;for(int i=0;i<a.length();i+)if(i=0)if(ai='')data.push_back('');loca.push_back(1);i+;elsedata.push_back(a0);loca.push_back(i);elseif(a.leng

22、th()-i-1>2)if(ai=''&&ai+1=''&&ai+2='')data.push_back('');loca.push_back(i+2);i=i+2;elseif(ai=''&&ai+1!='')data.push_back(ai+1);loca.push_back(i+1);elseif(ai=''&&ai+1=''&&ai+2='')data.pu

23、sh_back('');loca.push_back(i+2);i=i+2;elseif(ai=''&&ai+1!='')data.push_back(ai+1);loca.push_back(i+1);for(int j=0;j<data.size();j+)if(data.size()=1)if(locaj=a.length()-1&&dataj!='')len.push_back(1);elseif(locaj=a.length()-1&&dataj=''

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论