以示例來描述一下這個壓縮機制:AAAAAABBCDDEEEEEF算法
因爲半角字母中,1個字符是做爲1個字節的數據被保存在文件中的。所以上述的文件大小就是17字節。好,那咱們如今開始以「編程
上述的壓縮方法稱爲RLE(Run Length Encoding,行程長度編碼)算法。RLE算法是一種很好的壓縮算法,常常被用於壓縮傳真的圖像等。由於圖像文件本質上也是字節數據的集合體。工具
然而,在實際的文本中,一樣字符屢次重複出現的狀況並很少見。雖然針對相同數據常常連續出現的圖像、文件等,RLE算法能夠發揮不錯的效果,但它並不適合文本文件的壓縮。不過,由於該壓縮機制很是簡單,所以使用RLE算法的程序也相對更容易編寫。編碼
莫爾斯編碼把通常文本中出現頻率高的字符用短編碼來表示。這裏所說的出現頻率,不是經過對出版物等文章進行統計調查得來的,而是根據印刷行業的印刷活字數目而肯定的。如上表所示,假設表示短點的位是1,表示長點的位時11的話,那麼E(嘀)這一字符的數據就能夠用1位的1來表示,C(嗒嘀嗒嘀)這一字符的數據就能夠用9位的110101101來表示。在實際的莫爾斯編碼中。若是短點的長度是1,長點的長度就是3,短點和長點的間隔就是1.這裏的長度指的是聲音的長度。接下來,就讓咱們嘗試一下用莫爾斯編碼來表示前面提到的AAAAAABBCDDEEEEEF這個17個字符的文本。在莫爾斯編碼中,各個字符之間須要加入表示間隔的符號。這裏咱們用00來進行區分。所以,就編程了A*6+B*2+C*1+D*2+E*5+F*1+字符間隔*16=4*6+8*2+9*1+6*2+1*5+8*1+2*16=106位=14字節。由於文件只能以字節位單位來存儲數據,所以不滿1字節的部分就要圓整成1個字節。若是全部字符佔用的空間都是1個字節(8位),這樣文本中列出來的17個字符=17字節,那麼摩爾斯電碼的壓縮比率就是14/17=82%。3d
哈夫曼算法是指,爲各壓縮對象文件分別構造最佳的編碼體系,並以該編碼體系爲基礎來進行壓縮。所以,用什麼樣式的編碼(哈夫曼編碼)對數據進行分割,就要由各個文件而定。用哈夫曼算法壓縮過的文件中,存儲着哈夫曼編碼信息和壓縮過的數據,以下圖:對象
接下來,咱們嘗試一下把AAAAAABBCDDEEEEEF這些字符按照「出現頻率高的字符用盡可能少的位數編碼來表示」這一原則進行整理。咱們假定用下面的方案:blog
JPEG格式和GIF格式的圖像文件有一些模糊,是由於他們是非可逆壓縮,所以還原後會有一些模糊。而GIF格式的文件雖然是可逆壓縮,但由於有色數不能超過256色的限制,因此還原後顏色信息會有一些缺失,進而致使了圖像模糊。TIFF格式的圖像文件雖然不模糊,但卻比原始的BMP格式文件還要大,由於TIFF格式的文件中帶有各類標籤信息。字符編碼