歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++ Lzw壓縮算法分析與實現【源碼+附圖】

C++ Lzw壓縮算法分析與實現【源碼+附圖】

日期:2017/3/1 10:37:17   编辑:Linux編程

一、需求分析:
在日常的工作生活中,出於文件存儲、傳輸的要求,需要對數據進行壓縮。LZW 壓縮算法是一種新穎的壓縮方法,由Lemple、Ziv及Welch三人共同創造,並用他們的名字命名。
它采用了一種先進的串表壓縮,將每個第一次出現的串放在一個串表中,用一個數字來表示串,壓縮文件只存貯 數字,則不存貯串,從而使圖象文件的壓縮效率得到較大的提高的一種無損壓縮算法。
由於LZW壓縮算法是一種可以即時傳輸壓縮數據並即時解碼數據的算法,因此它可以廣泛使用在日常的文件壓縮及文件傳輸數據壓縮中。

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/1月/27日/C++ Lzw壓縮算法分析與實現【源碼+附圖】/

二、概要設計:
要設計一套壓縮軟件,最核心的部分即是算法, 即字典的建立與添加字典數據,檢索數據等功能。
同時,還需要制定一套合理,完善的存儲規則。
自然,軟件必須分為兩部分:壓縮部分與解壓縮部分。
於是軟件整體框架即設計為:



三、詳細設計:
1、LZW字典的方法
根據字典壓縮算法,可以設計出針對LZW字典需要的基本方法,有:完成字典的初始化(即將0-255這256個數據加入字典中)、完成字典添加數據功能、完成檢加對應串的位置功能等。
2、文件存儲的規則
(1)五個字節:
文件的驗證屬性碼:l z w r q 。
(2)一個字節
原文件名的長度n
(3)n個字節
文件名
(4)n個字節
文件數據對應的壓縮後編碼
3、壓縮算法
(1)從輸入流中讀入一個字符,作為當前串的後綴。
(2)如果當前串在字典中,就用當前串的編碼作前綴,轉到第1步。
(3)如果當前串不在字典中,就把當前串放到字典中,並把前綴放到輸出流,後綴變前綴,轉到第1步。
(4)當輸入流讀完後,串中應還剩一個前綴,前其放到輸出流,結束。
4、解壓縮算法
(1)在輸入流中讀入一個字符。
(2)如果當前編碼在字典中,則把當前編碼的第一個字符作為當前串的後綴,如果當前串不在字典中,就把它加入到字典中,然後把當然編碼作為串的後綴,轉到第4步。
(3)如果當前編碼不在字典中,就把前綴的第一個字符作為後綴,把串加入到字典中,用當前串的編碼作前綴,轉到第4步。
(4)把前綴放到輸入流,轉到第1步。

Copyright © Linux教程網 All Rights Reserved