關於哈夫曼編碼壓縮文件

參考Crash Course的課程,做下筆記,原視頻在這裏 ↓

https://www.bilibili.com/video/BV1EW411u7th?p=21

  1. 我們要對如下一張 4像素 X 4像素的 圖片進行壓縮,
    在這裏插入圖片描述
    而在磁盤中圖片是一串像素值的形式存儲的,每個像素的顏色由RGB確定,這樣一張圖片需要 48(16*3) 個字節
    在這裏插入圖片描述
  2. 爲了能夠壓縮圖片,我們需要減少冗餘的信息或者用更緊湊的表示方法。可以發現,有很多相同的排列:白黃、黑黃、黃黃、白白,這個序列可以有這四種排列組成(當然也有其他不同的方式),我們爲這四種排列生成緊湊代碼,用更少的字節表示每對排列

在這裏插入圖片描述

  1. 我們會發現,這四對出現的頻率並不相同
    在這裏插入圖片描述
    黃黃出現的次數最多,所以我們希望通過最緊湊的方式來表示,其次是白黃,黑黃和白白出現的次數最少,我們可以用長一點的來表示

  2. 爲了實現以上的表示,我們需要構造哈夫曼樹

    • 列出所有的塊和頻率,每輪選擇兩個最低的頻率,將它們組成一個樹。這裏BY和WW頻率最低,將其組成一個樹,組成後的頻率爲2,這樣就完成了一輪算法。
      在這裏插入圖片描述
    1. 下一輪中重複這樣的操作。現在白色的兩個頻率最低,合併!
      在這裏插入圖片描述
      合併之後的情況如下
      在這裏插入圖片描述
    2. 第三輪同理
      在這裏插入圖片描述
      這樣我們就完成了哈夫曼樹,它是按照頻率排序的,頻率低的在下面,頻率高的在上
  3. 完成了哈夫曼樹,我們還需要生成字典,即如何訪問各個節點。我們可以將所有的左子樹的分支用0標示,右子樹用1標示
    在這裏插入圖片描述
    這樣我們就完成了字典
    在這裏插入圖片描述
    這樣我們可以用0 標示YY,111標示 WW…
    經過這樣的壓縮後,原本的字符可以表示爲如下的形式
    在這裏插入圖片描述
    這樣原來的48字節我們用14位就能表示了!!! (48字節=48 X 8位 = 384 位)

  4. 當然,只保存14位的數據是沒有意義的,我們需要將字典也保存下來才能知道表示的信息
    在這裏插入圖片描述
    加上字典信息後我們需要30字節的空間,仍然比48字節好很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章