freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于哈夫曼樹的文件壓縮解壓程序-示例文檔(專業(yè)版)

  

【正文】 ProgressBar2Position=100。 else searchNumber=lchild[searchNumber]。 } haveByte++。 int step=1。 22 for(int i=1。 } StatusBar2PanelsItems[0]Text=原文件長(zhǎng) +AnsiString(wantFileByte)+字節(jié) 。 return。 Label4Caption=壓縮后文件長(zhǎng)度為 +AnsiString(wantFileByte)+byte。 if (wantFileBufferSize==1048576) { (wantFileBuffer,1048576)。 Form1Update()。j1048576。 indexbuffer=0。 (inputFileByte%16777216/65536)。 //下面估計(jì)壓縮后文件長(zhǎng)度 wantFileIndexByte+=4。 Form3Image1CanvasMoveTo(X[newNodeCode]*10,40)。 continue。i++) { int t=inputFileBuffer[i]。 Label22FontColor=clNavy。 int wantFileContentByte。 StatusBar1PanelsItems[0]Text=。 } Edit8Text=。tt,vectorint amp。 Form3Image1CanvasLineTo(X[lchild[nodeCode]]*20+5,height*60+604)。rchild) { if (lchild[nodeCode]==1) { X[nodeCode]=i。 if (()==1) sS=0+sS。 另外,本課程設(shè)計(jì)中,還直接或間接地聯(lián)系到了計(jì)算機(jī)組成原理,微機(jī)接口,匯編語(yǔ)言等其它相關(guān)課程,可見,計(jì)算機(jī)是一個(gè)統(tǒng)一的學(xué)科,沒有其他課程的知識(shí)儲(chǔ)備,仍然是不能實(shí)現(xiàn)本設(shè)計(jì)的。在 windows98 系統(tǒng)中不支持如此大的幅面,而在 window2020 和windowsXP 中支持,因而本系統(tǒng)作圖功能不能在 win98 下體現(xiàn)甚至出現(xiàn)異常而終止了整個(gè)壓縮程序。換句話說(shuō),我們得由? 01001011?來(lái)還原出一棵 haffman 樹。這些信息稱為索引。首先,取出一個(gè)編碼后要和所有葉子的編碼比對(duì);其次,編碼比對(duì)是基于字符串的比對(duì),比較慢。而如果以數(shù)據(jù)塊的形式讀寫則可以有效地利用到 DMA 通訊 1,減少了 cpu 中斷,并使硬盤磁頭連續(xù)移動(dòng),顯著加快了速度。 E 壓縮編碼寫入算法 —— 一級(jí) 32 位緩沖器算法 Cpu 與 i/0 設(shè)備通訊 是并行處理的辦法,最小處理單元是一個(gè)字節(jié),即8bist,所以希望以 bit 為單位將編碼寫到壓縮文件中這在硬件上就是不可能的, C++語(yǔ)言也更不可能提供有關(guān)的語(yǔ)句了。按此 256 種字節(jié)出現(xiàn)頻率可構(gòu)造 haffman 樹進(jìn)行重新編碼,編碼后每字節(jié)的新編碼平均長(zhǎng)度將 =8bits,將每個(gè)字節(jié)對(duì)應(yīng)了壓縮編碼寫到新文件中,從而達(dá)到壓縮文件的目的。rchild,vectorint amp。index,vectorintamp。 B 哈夫曼樹構(gòu)造算法: 用數(shù)組 int fre[0..255]表示第 0 號(hào)至第 255 號(hào)字節(jié)節(jié)點(diǎn)的出現(xiàn)頻率,找出最小的 fre[a]與 fre[b],則構(gòu)建第 256 號(hào)節(jié)點(diǎn),其左孩子為 a 號(hào)節(jié)點(diǎn),右孩子為 b 號(hào)節(jié)點(diǎn),不妨用數(shù)組記錄: left[256]=a,right[256]=b 。因而我們要設(shè)置一個(gè)緩沖區(qū),當(dāng)緩沖區(qū)中編碼達(dá)到或超過(guò) 8bits 時(shí),將前 8bits 做為一個(gè) byte 寫出到壓縮文件中。而 c++語(yǔ)言的 iofstream 類的read()與 write()成員函數(shù)為此思想的實(shí)現(xiàn)提供了可能。 對(duì)于前者的改進(jìn)可以通過(guò): 的長(zhǎng)度之后長(zhǎng)度相同的編碼比對(duì)等等。上頁(yè)的細(xì)節(jié)問(wèn)題中提到最好在壓縮后的文件中標(biāo)出原文件的長(zhǎng)度,這也是索引信息。 本系統(tǒng)是這樣做的,首先得把樹結(jié)構(gòu)編碼從文件中讀到一個(gè)數(shù)組中,把葉子編號(hào)讀到另一個(gè)數(shù)組中,然后由這兩個(gè)數(shù)組用遞歸的方法造出樹。因而作圖這一部分得使用 try/catch1這樣的異常處理機(jī)制以確保壓縮程序在各個(gè)系統(tǒng)的穩(wěn)定運(yùn)行。 另外在本課程設(shè)計(jì)中,我了解到了快速應(yīng)用程序開發(fā)的工具—— borland c++ builder 6 這是一個(gè)龐大的系統(tǒng),我閱讀很多相關(guān)的資料和網(wǎng)頁(yè),這種知識(shí)則是課內(nèi)所學(xué)不到的。 if (()==1) sMs=00+sMs。 15 i++。 searchdraw(lchild[nodeCode],height+1,lchild,rchild)。index,int amp。 Edit9Text=。 StatusBar1PanelsItems[1]Text=。 int buffer。 Form1Update()。 if (t0) t+=256。 } b=++()。 searchdraw(newNodeCode,1,lchild,rchild)。 wantFileIndexByte+=1。 (inputFileByte%65536/256)。 } } if (indexbuffersize!=0) { indexbuffer=indexbuffer(8indexbuffersize)。j++) { int t=inputFileBuffer[j]。 step++。 wantFileBufferSize=0。 Edit13Text=ShowNowTime()。 } Label7FontColor=clNavy。 //讀入索引 int newNodeCode=256。i=indexByteSize。 int haveByte=0。 if (haveByte/double(wantFileByte)*100=step) { StatusBar2PanelsItems[1]Text=已解壓 +AnsiString(step)+%。 if (searchNumber256) { wantFileBuffer[wantFileBufferSize++]=searchNumber。 (wantFileBuffer,wantFileBufferSize)。 StatusBar2PanelsItems[2]Text=AnsiString(haveByte)+字節(jié) 。128) searchNumber=rchild[searchNumber]。 wantFileBufferSize=0。 makeIndex(nodeCode,tt,index,indexNum,code,lchild,rchild)。 vectorint index。 wantFileByte=wantFileByte*256+t。 if (!FileExists(Edit2Text)) { ShowMessage(Edit2Text+ 文件不存在 !)。 Label3Caption=內(nèi)容長(zhǎng)度為 +AnsiString(wantFileContentByte)+byte。 buffer=buffer8。 StatusBar1PanelsItems[1]Text=AnsiString(CompressedByte)+字節(jié) 。 for(int j=0。 indexbuffersize=0。 //寫入文件長(zhǎng)度 19 (inputFileByte/16777216)。 indexSearch(newNodeCode,lchild,rchild,index,code)。 Form3Image1CanvasBrushColor=clYellow。 if (afirst==0) { (a)。iinputFileRestSize。 Label21FontColor=clOlive。 int wantFileContentBit=0。 ProgressBar3Position=0。 return。 } void makeIndex(int nodeCode,int amp。 if (lchild[nodeCode]!=1) { Form3Image1CanvasMoveTo(X[nodeCode]*20+5,height*60+10+4)。lchild,vectorint amp。 if (()==1) sM=0+sM。算法也是越琢磨越明白,看問(wèn)題也越來(lái)越深刻,本程序共做了四次比較大規(guī)模的修改,如果沒有前面 Pascal 與 c++的基礎(chǔ),光修改程序的工作量就是不可想象的,其間還重寫了一次原代碼,可見,數(shù)據(jù)結(jié)構(gòu)和程序設(shè) 計(jì)是密不可分的。 由于節(jié)點(diǎn)眾多,整個(gè)樹畫出來(lái)需要非常寬的幅面,大約5000個(gè)象素的寬度。 AB 兩種建索引的方法都很方便于索引的解碼,但空間占用大后者靈活性差,而若使用 C 方法,則索引的解碼也成了問(wèn)題。 3.文件索引算法 9 A. 簡(jiǎn)介 由解壓縮的算法可知,一個(gè)壓縮了的文件解壓縮的前提是知道原文件的具體每個(gè)字節(jié)的編碼。這是最容易想到的方法,但效率很低。不停的字節(jié)讀寫會(huì)給cpu 帶來(lái)頻繁的中斷并且硬盤的磁頭來(lái)回在磁道扇區(qū)中移動(dòng),減慢了速度。關(guān)于使用此種編碼結(jié)構(gòu)在速度上的優(yōu)勢(shì),將在后面詳細(xì)解釋。Rect, bool Active) PageControl 的標(biāo)簽頁(yè)的色彩描繪 5. void __fastcall TForm1::CompareFiles(TObject *Sender) 文件比對(duì)函數(shù) 當(dāng)然還有一些相關(guān)按鈕的響應(yīng) 函數(shù),在此不在贅述,詳見程序清單部分 4 2. 函數(shù)調(diào)用示意圖 5 三 詳細(xì) 設(shè)計(jì) 1. 壓縮算法部分 A 核心算法: 文件由若干個(gè)字節(jié)組成,一個(gè)字節(jié)有 8bits,故有 28=256 種字節(jié)構(gòu)成形式,對(duì)應(yīng)字節(jié)碼為 0255。lchild,vectorint amp。code)索引編碼遞歸函數(shù) 3. void makeIndex(int nodeCode,int amp。fre[256]=fre[a]+fre[b].刪除 a,b 節(jié)點(diǎn)。 如果編碼存儲(chǔ)結(jié)構(gòu)是字符串,那么緩沖區(qū)也自然是一個(gè)字符串,寫入文件時(shí)涉及到字符串與數(shù)字的轉(zhuǎn)換,效率上是很不劃算的。 所以,可以開辟一個(gè) 1024K 的緩沖區(qū),先將文件前 1024K 的字節(jié)讀入內(nèi)存緩沖區(qū)中( 在本設(shè)計(jì)中,這稱為二級(jí)緩沖器 ),編碼后的字節(jié)也不急于寫入文件中,而是先寫到另一個(gè)二級(jí)緩沖區(qū)中,當(dāng)其足夠 1024K 時(shí)再以數(shù)據(jù)塊的形式寫到壓縮文件中。而后者的改進(jìn)則出現(xiàn)了 B 算法。一般索引信息放在文件的最前部分。然后由這棵樹再求出每個(gè)葉子的編碼。 畫出來(lái)的圖比較大,一個(gè)屏幕顯示不下,而僅使用滾動(dòng)條又比較麻煩,因而本系統(tǒng)采用了?手抓?功能,可以用鼠標(biāo)拖動(dòng)畫面。 最后,感謝老師在平時(shí)對(duì)我的指導(dǎo)與鼓勵(lì),正是課間給我的精辟回答使我有了更為明晰的思路,才有最終的設(shè)計(jì)結(jié)果。 if (()==2) sMs=0+sMs。 return。 Form3Image1CanvasMoveTo(X[nodeCode]*20+5,height*60+10+4)。indexNum,listint amp。 Edit10Text=。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1