0

我正在爲我的類分配創建哈夫曼壓縮程序。我知道如何實現它,但由於解碼器必須使用編碼器存儲的轉換表或者從零開始創建霍夫曼樹,所以我想通過編碼器存儲完整的霍夫曼樹,因此解碼器不需要重構它。我開始知道用指針保存一個事物是不一樣的,所以我看到序列化可能會有所幫助。我的主要問題是:將序列化幫助將霍夫曼樹存儲到文件

1-將序列化能夠存儲樹照原樣嗎? 2-存儲樹會佔用更多空間,然後存儲轉換表並重新構建它?

我想最小化要存儲在編碼文件中的樹數據。 我在這裏說純文本壓縮。 - 謝謝

+1

解碼器必須使用由編碼器存儲的轉換表或從零開始創建霍夫曼樹這聽起來似乎是靜態霍夫曼編碼。 (對「傳輸」的所有符號使用相同的代碼/「概率」 - 替代方案將是_動態霍夫曼編碼_:編碼器和解碼器都會隨着它們的變化而修改「概率」,並相應地編碼;以「相等概率」 )。 1-使它變得如此2-取決於細節,幾乎完全。建議一方面表示樹,另一方面表示表格。比較它們。看看別人發現和使用的是什麼。 – greybeard

+0

@greybeard是的,自適應霍夫曼編碼絕對比較簡單,但現在我專注於簡單的編碼,並希望使其實現有點不同,然後在網上提供。感謝您的建議 –

回答

1

您不需要轉移樹。一旦你有每個符號的代碼長度,丟棄樹。然後您可以根據長度和符號的順序構造一個canonical code。然後,您只會將長度傳輸到解碼器,解碼器將根據長度構建相同的規範代碼。

+0

謝謝,我也來到這個答案。這似乎是最好的辦法。但有沒有一個教程或一個書面的算法或僞代碼,我可以遵循和實施? –

+0

你可以看看[puff.c]中的實際代碼(https://github.com/madler/zlib/blob/master/contrib/puff/puff.c)。 –