【自考】數據結構第四章判定樹和哈夫曼樹,期末不掛科指南,第8篇

来源:https://www.cnblogs.com/happymeng/archive/2020/01/09/shujujiegou_8.html
-Advertisement-
Play Games

判定樹和哈夫曼樹 分類與判定樹 這個小節有個比較重要的概念,就是 記住即可 哈夫曼樹與哈夫曼演算法 首先瞭解一下什麼是哈夫曼樹 給定一組值p~1~,...p~k~,如何構造一棵有k個葉子且分別以這些值為權的判定樹,使得其平均比較次數最小。滿足上述條件的判定樹稱為哈夫曼樹。 哈夫曼率先給出了一個求哈夫曼 ...


判定樹和哈夫曼樹

分類與判定樹

這個小節有個比較重要的概念,就是用於描述分類過程的二叉樹稱為判定樹 記住即可

哈夫曼樹與哈夫曼演算法

首先瞭解一下什麼是哈夫曼樹

給定一組值p~1~,...p~k~,如何構造一棵有k個葉子且分別以這些值為權的判定樹,使得其平均比較次數最小。滿足上述條件的判定樹稱為哈夫曼樹。
哈夫曼率先給出了一個求哈夫曼樹的簡單而有效的方法,稱為哈夫曼演算法。

非形式的描述如下

  1. 給定的值{p~1~,p~2~,...,p~k~}構造森林{T~1~,T~2~,T~k~},其中每個T~i~為一棵只有根結點且其權為p~i~的二叉樹。
  2. 從F中選取根結點的權最小的兩棵二叉樹T~i~和T~j~,構造一棵分別以T~i~和T~j~為左、右子樹的新的二叉樹T~h~,置T~h~根結點的權為T~i~,T~j~根結點的權值之和。
  3. 從F中刪去T~i~和T~j~,並將T~h~加入F,若F中仍多於一棵二叉樹,則返回第二步,直到F中只含有一棵二叉樹為止,這棵樹就是哈夫曼樹。

參照案例

重點來了,看真題,請記住==哈夫曼樹不唯一、時刻考慮權值最小==

真題參考

動態展示這道題目的解答方法,已經去掉了結點之間的連線

哈夫曼編碼

哈夫曼編碼比較簡單,就是將某棵二叉樹中每個結點的左分支標誌“0”,右分支標誌“1”,這樣,從根到每個葉結點形成“0”/“1”序列,將該序列作為葉結點對應字元的編碼,由此得到的二進位編碼稱為哈夫曼編碼。

請讀題

設某通訊系統中一個待傳輸的文本有6個不同字元,它們的出現頻率分別是0.5,0.8,1.4,2.2,2.3,2.8,試設計哈夫曼編碼

教材中給出了樹和哈夫曼編碼,直接看一下即可

出現頻率為0.5的字元編碼為1000
出現頻率為0.8的字元編碼為1001
出現頻率為1.4的字元編碼為101
出現頻率為2.2的字元編碼為00
出現頻率為2.3的字元編碼為01
出現頻率為2.8的字元編碼為11

小結

樹形結構的應用非常廣泛,判定樹和哈夫曼樹可分別用於求解分類問題和有效分類問題以及哈夫曼編碼,哈夫曼編碼演算法的關鍵點是:每次合併具有最小權值和次小權值的兩個根結點,直到只剩下一個根結點為止。
對哈夫曼樹的每個結點的左分支和右分支分別置“0”或“1”,就可得到哈夫曼編碼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天碰到個負載高引起的問題但是查看zabbix監控並沒有報警,檢查後發現監控取值與實際伺服器內負載不一致。 解決方法 修改zabbix模板Template OS Linux找到 Processor load (1 min average per core)修改key把 system.cpu.load ...
  • 一.介紹安裝 公司由於linux雲伺服器還沒批下來,暫時先在windows伺服器上測試。Windows版nginx使用本地Win32 API(而非Cygwin模擬層)。當前僅使用select()和poll()(1.15.9)連接處理方法(事件驅動模型),因此不應期望高性能和可伸縮性(在linux上支 ...
  • 參考穀粒學院的linux視頻教程:http://www.gulixueyuan.com/course/300/task/7091/show ...
  • CPU主要功能:處理指令、執行操作、要求進行動作、控制時間、處理數據。 結合資料庫實例CPU占用高,可能的原因是資料庫在執行大量的操作(全表查詢、大量排序等)。 由於公司沒有DBA,遇到資料庫問題只能自己排查。 一、是否存在死鎖 查詢死鎖以及解鎖的語句參考下方: 查看死鎖ID 查看死鎖ID SELE ...
  • 摘要: 下文講述在sqlserver資料庫中,將日期數據轉換為指定格式的方法分享,如下所示; 實驗環境:sqlserver 2008 R2 實現思路: 實現方法1: 使用year函數和month函數獲取相應的數值,然後採用字元串拼接的方法輸出相應的數據 實現方法2: CONVERT(varchar( ...
  • 概要 本文主要講述在 mongodb 中,怎麼更新嵌套數組的值。 使用$更新數組 測試 for (let i = 0; i < 3; i++) { let data = { name1_1: 'test' + i, arr_1: [{ a: i, b: 2 }, { a: i + 1, b: 2 } ...
  • 昨天工作的時候寫了圖片的排序介面,讓後臺自定義圖片的位置. 話不多說先上修改圖片序號的實現原理: 將5號移到2號, 此時區間 [ 2,5 ) 內的排序號都要加1. 將2號移到5號, 此時區間 ( 2,5 ] 內的排序號都要減1. 新增圖片序號的實現原理: 新增圖片序號為3,那麼區間 [ 3,∞ ) ...
  • 1 . 使用資料庫中,可能出現死鎖, 導致程式 無法正常使用. Create procedure [dbo].[sp_who_lock] ( @bKillPID Bit=0 -- 0: 查詢 1: 結束掉相對應的死鎖ID (可能導致數據異常)) as begin declare @spid int ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...