[英]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.