簡體   English   中英

如何有效地解壓縮霍夫曼編碼文件

[英]How to efficiently decompress huffman coded file

我發現了很多問題,但是其中的一些解釋很難理解,我無法完全理解如何有效地解壓縮文件的概念。 我發現了以下相關問題: 帶查找表的霍夫曼代碼 如何快速解碼霍夫曼代碼?

但是我不明白這個解釋。 我知道如何定期對霍夫曼樹進行編碼和解碼。 現在,在我的壓縮程序中,我可以將以下任何信息寫入文件符號霍夫曼代碼(無符號長)霍夫曼代碼長度

我計划要做的是獲取一個文本文件,將其分離為小文本文件,然后分別壓縮,然后通過將所有小壓縮文件及其各自的查找表(不知道如何執行此操作)發送給該文件,以對該文件進行解壓縮Nvidia GPU嘗試使用某種查找表並行解壓縮文件。

我有3個問題:應該將哪些信息寫入表頭的文件中以構成查找表? 如何從文件重新創建該表? 如何使用它快速解碼霍夫曼編碼的文件?

除非這是一個有教義的練習,否則不要自己寫。 使用zliblz4或其他幾個免費壓縮/解壓縮庫中的任何一個,它們經過比您能做的任何事情都經過更好的測試。

您只在談論霍夫曼編碼,這表示您將僅獲得可用壓縮的一小部分。 提到的庫中的大多數壓縮來自匹配的字符串。 查找“ LZ77”。

至於有效的霍夫曼解碼,您可以看看zlib的inflate是如何做到的。 它為代碼的最高9位創建一個查找表。 該表中的每個條目都具有該代碼的符號和位數(小於或等於9),或者如果提供的9位是較長代碼的前綴,則該條目具有指向另一個表的指針以解析該表。代碼的其余部分以及該輔助表所需的位數。 (這些輔助表有多個。)如果代碼長度小於9,則同一符號有多個條目。 實際上,一個n位代碼有2個9-n個多個條目。

因此,要進行解碼,您需要從輸入中獲取9位,並從表中獲取條目。 如果它是一個符號,則從流中刪除為代碼指示的位數,並發出該符號。 如果它是指向輔助表的指針,則從流中刪除九位,獲取表指示的位數,然后在該表中查找。 現在,您肯定會發出一個符號,以及要從流中刪除的剩余位數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM