2016-11-05 143 views
0

我在C++中實現霍夫曼編碼,我可以成功地建立霍夫曼樹,並可以編碼/解碼字符串。霍夫曼編碼文件在c + +

我想要做的下一件事是能夠編碼/解碼文件,但我有一些問題。 我正在使用bool載體來包含代碼字。我的問題是:我只能寫入字節到一個文件。我如何一點一滴地寫作?有沒有可以使用的圖書館?

另一件事是,如果我想解碼文件,我需要樹本身(或代碼表)。序列化樹的最佳方式是什麼?

任何幫助將不勝感激。

+0

兩種可能的選擇:將位編碼爲字節。或者每位使用一個字節。 –

+0

這是你的格式規範,所以做你想要的。如果你想壓縮比特位,那麼一次加入8比特的比特向量。如果你想在字節對齊的塊中編寫你的代碼,那就這樣做。你可以把你的樹變成一個數組(查看樹遍歷)或邊界列表,然後寫出你喜歡的東西。有太多的選項,因爲你沒有真正指定你已經有什麼...... – BeyelerStudios

+0

至於你的第二個問題,基本上只有三種[遍歷樹]的方法(https://en.wikipedia.org/wiki/Tree_traversal)。選一個。而不是「顯示」該樹寫入磁盤。在閱讀文件時做相反的事。 –

回答

2

C++布爾向量的內部格式太不好了,因爲它很可能已經打包了比特。

無論如何,你可以使用<<>>,並&運營商位裝入在編碼側字節,以及以在解碼側解壓縮比特。假設你知道一個字節是由8位組成的,那麼這是很簡單的。

至於發送霍夫曼碼,請閱讀關於經典霍夫曼碼。你不需要發送代碼,只需要每個符號的碼長度。爲了提高效率,長度序列本身可以通過遊程和霍夫曼編碼進行壓縮。有關示例,請參閱Deflate format

+1

從霍夫曼教授那裏得到一封死訊答案,很難想到有人在這個領域更專業。 –