




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、行程編碼算法實(shí)現(xiàn) 姓名:唐超 學(xué)號: 201426810618 班級:計自1401班一、實(shí)驗?zāi)康模毫私庑谐趟惴ǖ膲嚎s和解壓過程,學(xué)會計算壓縮比以及與行程算法相關(guān)的問題。2、 軟件設(shè)計說明:1、 實(shí)驗平臺:Visual studio 20132、 實(shí)驗原理:該程序主要是為了實(shí)現(xiàn)壓縮和解壓的功能。壓縮算法相對較為簡單,主要是對輸入 的要壓縮的數(shù)據(jù)進(jìn)行遍歷,遍歷并同時記錄相同的數(shù)據(jù)的數(shù)目,當(dāng)遍歷到不相同的數(shù)據(jù)后停止遍歷并將數(shù)據(jù)和數(shù)目壓入到vector中保存,考慮到可能會在數(shù)據(jù)間產(chǎn)生誤差,我加入用于區(qū)分不同的兩個數(shù)據(jù),還有若數(shù)據(jù)的長度為1時,我不將1保存到vector中,以此方式盡可能的減少壓縮數(shù)據(jù)的
2、長度,增加壓縮的效果。函數(shù)中使用了<sstream>中的功能,其作用為將int轉(zhuǎn)換為string的類型,便于儲存數(shù)據(jù),其功能函數(shù)如下:void compress(vector<string> a)/a傳入要壓縮的數(shù)據(jù)int length=a.size();/原數(shù)據(jù)的長度vector<string> temp;/保存壓縮后的數(shù)據(jù)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.pus
3、h_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;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+
4、;elseif(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<<
5、;n;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);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);/用于數(shù)據(jù)的輸出然后是解壓算法的設(shè)計思路如下,主要是定義三個vector的向量,一個用于記錄要壓縮的數(shù)據(jù),一個用于記錄標(biāo)志的在string中的位置,然后根據(jù)的位置求出數(shù)據(jù)的數(shù)目,將數(shù)目保存到另外一個vector中,然后根據(jù)數(shù)據(jù)和長度一一對應(yīng)輸出,這樣就將數(shù)據(jù)解壓完成。 但是在這里需要特別注意對的處理在壓縮的過程中若壓縮的字符為,則輸出的時候記為,判斷的時候主要是判定連續(xù)3個字符是否全為,以此判斷是
7、否是遇到標(biāo)志字符。代碼如下:void uncompress(string a)vector<char> data;/記錄數(shù)據(jù)vector<int> loca;/記錄標(biāo)志的位置vector<int> len;/記錄個數(shù)據(jù)的長度vector<int> zhi;/記錄每個數(shù)據(jù)的各個位上的數(shù)值for(int i=0;i<a.length();i+)/記錄數(shù)據(jù)和標(biāo)志的位置if(i=0)if(ai='')data.push_back('');loca.push_back(1);i+;elsedata.push_back(
8、a0);loca.push_back(i);elseif(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、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+)/記錄數(shù)據(jù)的長度if(data.size()=1)if(locaj=a.length()-1&&dataj!='')len.push_back(1);elseif(l
10、ocaj=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(float)10,z);
11、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+)int z=zhi.
12、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.size()-l-1;le
13、nsi2=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);運(yùn)行截圖:壓縮不同字符,輸入:dddddddddhhhhhhhhhh3111888899999999結(jié)果如下:輸入特殊的字符,包含,輸入:000008788888運(yùn)算結(jié)果如下:源代碼如下:#include<iostream>#include<vector&
14、gt;#include<string>#include<sstream>using namespace std;void print(vector<string> &temp,vector<string> & a)/輸出解壓后的數(shù)據(jù)double rate;cout<<"壓縮后的數(shù)據(jù)為:"<<endl;for(int k=0;k<temp.size();k+)cout<<tempk;cout<<endl;cout<<"壓縮前的長度為:&q
15、uot;<<a.size()<<endl;cout<<"壓縮后的長度為:"<<temp.size()<<endl;rate=a.size()/(temp.size()*1.0);cout<<"壓縮率為:"<<rate<<endl;void print2(vector<char> &a,vector<int> &b)/輸出壓縮后的數(shù)據(jù)cout<<"解壓后的數(shù)據(jù)為:"<<endl;
16、for(int i=0;i<a.size();i+)for(int j=0;j<bi;j+)cout<<ai;void compress(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_ba
17、ck(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+;elseif(ai=ai+1)n+;if(
18、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 = out.str();temp.
19、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="")temp.push_b
20、ack(ai+1);temp.push_back(ai+1);elsetemp.push_back(ai+1);j=j+2;print(temp,a);void uncompress(string a)/解壓算法vector<char> data;/保存數(shù)據(jù)vector<int> loca;/保存標(biāo)志的位置vector<int> len;/保存數(shù)據(jù)的長度vector<int> zhi;for(int i=0;i<a.length();i+)if(i=0)if(ai='')data.push_back('');
21、loca.push_back(1);i+;elsedata.push_back(a0);loca.push_back(i);elseif(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);els
22、eif(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);for(int j=0;j<data.size();j+)if(data.size()=1)if(locaj=a.length()-1&&dataj!='
23、;')len.push_back(1);elseif(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(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;for(int k=locaj+1;k<a.size();k+)if(ak>='0'&a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度居民房屋租賃合同能源審計與節(jié)能改造合同
- 浙江國企招聘2024寧波奉化國有資本投資控股有限公司招聘1人筆試參考題庫附帶答案詳解
- 浙江國企招聘2024嘉興市秀洲傳媒有限公司招聘8人筆試參考題庫附帶答案詳解
- 2025重慶高新技術(shù)產(chǎn)業(yè)研究院有限責(zé)任公司招聘3人(26截止)筆試參考題庫附帶答案詳解
- 2025河北衡水金湖公路養(yǎng)護(hù)工程有限公司招聘勞務(wù)派遣人員10人筆試參考題庫附帶答案詳解
- 2025新疆機(jī)場(集團(tuán))有限責(zé)任公司下轄機(jī)場第一季度招聘(15人)筆試參考題庫附帶答案詳解
- 教你讀懂化驗單知到智慧樹章節(jié)測試課后答案2024年秋浙江中醫(yī)藥大學(xué)
- 香精香料知識培訓(xùn)課件
- 2025山西交通控股集團(tuán)招聘450人筆試參考題庫附帶答案詳解
- 工業(yè)滑升門安裝及施工方案
- 三人合伙餐飲合同范本
- 人教PEP版(2024)三年級下冊英語Unit3 Learning better單元整體教學(xué)設(shè)計(共6課時)
- 2025年河南林業(yè)職業(yè)學(xué)院單招職業(yè)技能測試題庫完整版
- 地理-浙江省強(qiáng)基聯(lián)盟2025年2月高三年級聯(lián)考試題和答案
- (必刷)湖南省醫(yī)學(xué)院校高職單招職業(yè)技能測試必會題庫(含往年真題)
- 2025《醫(yī)藥企業(yè)防范商業(yè)賄賂風(fēng)險合規(guī)指引》解讀課件
- 血透病人皮膚瘙癢課件
- 2025年度船舶焊接維修工程合同范本資料下載
- 貴州茅臺課程設(shè)計
- 工業(yè)攝像頭知識培訓(xùn)課件
- 2024-2025學(xué)年六年級數(shù)學(xué)人教版上冊寒假作業(yè)(綜合基礎(chǔ)復(fù)習(xí)篇含答案)
評論
0/150
提交評論