【問題描述】
設計一個利用哈夫曼算法的編碼和譯碼系統,重復地顯示并處理以下項目,直到選擇退出為止。
【基本要求】
(1)初始化:鍵盤輸入字符集大小n、n個字符和n個權值,建立哈夫曼樹;
(2)編碼:利用建好的哈夫曼樹生成哈夫曼編碼;
(3)輸出編碼;
(4)設字符集及頻度如下表:
字符:A B C D E F
頻度:4 9 23 2 17 15
字符:G H I J K
頻度:1 2 3 3 4
算法框架:
a.. 問題的解空間:應用回溯法解問題時,首先應明確定義問題的解空間。問題的解空間應到少包含問題的一個(最優)解。
b. 回溯法的基本思想:確定了解空間的組織結構后,回溯法就從開始結點(根結點)出發,以深度優先的方式搜索整個解空間。這個開始結點就成為一個活結點,同時也成為當前的擴展結點。在當前的擴展結點處,搜索向縱深方向移至一個新結點。這個新結點就成為一個新的活結點,并成為當前擴展結點。如果在當前的擴展結點處不能再向縱深方向移動,則當前擴展結點就成為死結點。換句話說,這個結點不再是一個活結點。此時,應往回移動(回溯)至最近的一個活結點處,并使這個活結點成為當前的擴展結點。回溯法即以這種工作方式遞歸地在解空間中搜索,直至找到所要求的解或解空間中已沒有活結點時為止。
(3). 運用回溯法解題通常包含以下三個步驟:
a. 針對所給問題,定義問題的解空間;
b. 確定易于搜索的解空間結構;
c. 以深度優先的方式搜索解空間,并且在搜索過程中用剪枝函數避免無效搜索;