簡體   English   中英

霍夫曼編碼基於貪婪方法或動態編程

[英]Huffman coding is based on what Greedy Approach or Dynamic Programming

我們可以通過動態編程來解決霍夫曼編碼問題,有沒有算法

霍夫曼編碼通過創建節點的二叉樹來工作。 這些可以存儲在常規數組中,其大小取決於符號數n。 通過使用Greedy Algorithm方法,可以在O(n logn)時間內實現霍夫曼編碼。 霍夫曼編碼不適用於動態編程解決方案,因為該問題不包含重疊的子問題。

根據我對算法的了解,我相信霍夫曼編碼是基於貪婪的方法。 正如我們在Activity選擇問題中那樣做。 任務調度和背包問題是它的另一個例子。

[ 更新 ]:我認為我在下面提到的解決方案會生成最佳前綴代碼,但不一定與霍夫曼代碼相同。 根據定義,霍夫曼代碼是通過貪婪的方法生成的。 雖然它是最佳的,但它不是唯一的解決方案。 (例如,一旦生成了霍夫曼樹,您就可以在同一級別中交換葉子,以便在保持最佳狀態時為它們提供不同的代碼)


我認為這可以使用動態編程來解決,盡管效率不高。 這里的方法非常類似於找到最佳二進制搜索樹,因為當你向下一級時,你又向葉子添加一個位。

在此輸入圖像描述

以下是代碼計算最小總位數的鏈接。 當然這是指數級的,但如果你使用DP,它可以在O(n ^ 2)時間內解決。 我沒有嘗試生成編碼,但我相信應該是可能的。

暫無
暫無

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

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