數據結構----哈夫曼樹

這里寫目錄標題

  • 基本概念
    • 引子
    • 基本概念
      • 各種路徑長度
      • 各種帶權路徑長度
        • 結點的帶權路徑長度
        • 樹的帶權路徑長度
        • 哈夫曼樹
    • 哈夫曼樹的構造
      • 理論基礎
      • 構造思想
      • 總結
    • 哈夫曼樹的實現
    • 哈夫曼編碼
      • 前綴編碼
      • 哈夫曼編碼的思想
      • 案例
      • 代碼實現
    • 編碼與解碼

基本概念

引子

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
哈夫曼樹就是尋找構造最優二叉樹,用于提高效率

基本概念

各種路徑長度

在這里插入圖片描述
在這里插入圖片描述

各種帶權路徑長度

結點的帶權路徑長度

在這里插入圖片描述
在這里插入圖片描述

樹的帶權路徑長度

在這里插入圖片描述

在這里插入圖片描述

哈夫曼樹

在這里插入圖片描述
帶權路徑長度最短的樹或者二叉樹

也就是樹的葉子結點帶權路徑長度之和 :也就是葉子結點的結點路徑長度(根結點到葉子結點的路徑數) *權重 再求和
在這里插入圖片描述
在這里插入圖片描述
總結:位高權重
并且哈夫曼樹不唯一

哈夫曼樹的構造

理論基礎

在這里插入圖片描述
在這里插入圖片描述

構造思想

在這里插入圖片描述
可以看到 先將所有結點看成根結點構造出森林 并將權重賦值給結點
之后 選擇兩個小權重的結點 二者構造出新樹 如上圖 新樹根結點權重為子樹結點權重之和
這時要先將森林中的兩個樹刪除 之后 將兩個樹構造成的新樹加入森林(為了進行下一次權重的比較 從而下一步構造的順利進行)
重復23步 直到剩單根

在這里插入圖片描述
在這里插入圖片描述
度 是指結點有的子樹個數

哈夫曼樹結點的度只能是0或者2
n個葉子結點的哈夫曼樹 一共有2n-1個結點 分析如上橙色框

總結

在這里插入圖片描述

哈夫曼樹的實現

在這里插入圖片描述
首先是已知葉子結點的個數以及權重

依次放入結構數組的前面 數組一共長度是2n 因為結點一共有2n-1 所以構造2n的數組 不用0下標

進行第二步 合并的時候 將新合并出來的結點往后依次放入 所以根結點是數組中的最后一個位置

新節點合成的時候 要修改新節點數組中的孩子結點下標 兩個孩子要修改數組中雙親的下標

之后重復查找最小的權重的兩個結點 前提是parent值是空 這是判斷的關鍵 一旦parent值不為空的時候 就相當于退出了比較

在這里插入圖片描述
在這里插入圖片描述
初始化

在這里插入圖片描述
上圖中select方法 功能是在HT[K]中選擇兩個雙親域為0并且權重最小的結點 并返回s1 s2 用于后續操作

方法參數中i-1 是新合成結點的下標 ,在選最小的兩個結點時 要從新節點前面選 這里對應理論分析中“第三步的a步驟”
i會逐漸遞增

哈夫曼編碼

前綴編碼

在這里插入圖片描述
圖中為非前綴編碼 所以要設計任意一個字符的編碼都不是另一個字符編碼的前綴
但是可以前綴一樣 后面不一樣

哈夫曼編碼的思想

在這里插入圖片描述
要想出現次數最多的編碼最短 正好對應哈夫曼樹的權重越大離跟結點越近的特點
在這里插入圖片描述
所以在路徑上標注0 或者 1
看從根結點到某一個葉子結點經過的路徑 那些路徑得出來的編碼就是字符對應的二進制編碼

因為葉子結點不會出現一個字符的路徑完全包含另一個字符的路徑 所以也就是前綴編碼
并且要想出現次數最多的編碼最短 正好對應哈夫曼樹的權重越大離跟結點越近的特點 所以哈夫曼編碼效率更高
在這里插入圖片描述
因為葉子結點不會出現一個字符的路徑完全包含另一個字符的路徑 所以也就是前綴編碼
并且要想出現次數最多的編碼最短 正好對應哈夫曼樹的權重越大離跟結點越近的特點 所以哈夫曼編碼效率更高

案例

在這里插入圖片描述
先根據哈夫曼樹的設計思想 畫出來哈夫曼樹 在路徑上標注0 1
在這里插入圖片描述

代碼實現

在這里插入圖片描述
在這里插入圖片描述
其中HC數組是指針數組 每個指針指向對應的字符串 也就是字符串的頭指針

編碼與解碼

在這里插入圖片描述
進行哈夫曼編碼時 構造指針數組
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
先根據哈夫曼樹的構造思想+字符頻度表 構造出哈夫曼樹 標上各個葉子結點代表的字符 之后開始解碼 0就向左走 1就向右走 直到走到葉子結點 記錄一個字符 重復此操作即可

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40109.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40109.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40109.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker容器基礎

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 一、Docker概述1、docker是什么2、Docker的設計宗旨3、容器在內核中支持2種重要技術: 三、Docker的核心概念四、Docker相關命令1.安裝依賴包2.設置阿里云…

無線測溫產品在半導體制造項目的應用

摘 要:半導體被譽為“制造業的大腦”,在關系國家安全和國民經濟命脈的主要行業和關鍵領域占據支配地位,是國民經濟的重要支柱。 隨著數字技術的發展和數字經濟在國民經濟中所占比重越來越高,半導體產業的重要性還會進一步提升。安…

C++QT教程3——手冊4.11.1自帶教程(筆記)——創建一個QT快速應用

文章目錄 創建一個QT快速應用創建項目創建主視圖添加應用邏輯為視圖添加動畫素材文件 參考文章 創建一個QT快速應用 本教程使用內置的QML類型,介紹了Qt Quick的基本概念。有關可以選擇的用戶界面選項的更多信息,請參閱用戶界面。 本教程描述了如何使用…

部署mysql到win10電腦上

中間出現了很多問題, 記錄一下 我這邊是去官網下載的 ,鏈接:https://dev.mysql.com/downloads/mysql/ 我這邊選了不是最新版本的MySQL,因為第一次安裝8.1.0版本的,死活運行不起來,直接卸載安重裝了&#x…

常用的分布式計算引擎

記錄一下,作為備忘。 常用的分布式計算引擎 多表關聯的問題,由于NoSQL數據庫主要用于海量存儲和單表查詢,一般都不支持join,需借助更上層的計算框架來實現多表關聯,比如: 計算框架支持數據源執行效率Hive本地文件、…

神經網絡基礎-神經網絡補充概念-35-為什么正則化可以減少過擬合

概念 正則化可以減少過擬合的原因在于它通過限制模型的復雜性來約束參數的取值范圍,從而提高了模型的泛化能力。過擬合是指模型在訓練集上表現很好,但在未見過的數據上表現不佳,這通常是因為模型過于復雜,過多地擬合了訓練數據中…

自己動手寫數據庫系統:實現一個小型SQL解釋器(中)

我們接上節內容繼續完成SQL解釋器的代碼解析工作。下面我們實現對update語句的解析,其語法如下: UpdateCmd -> INSERT | DELETE | MODIFY | CREATE Create -> CreateTable | CreateView | CreateIndex Insert -> INSERT INTO ID LEFT_PARAS Fie…

后端項目打包上傳服務器記錄

后端項目打包上傳服務器記錄 文章目錄 后端項目打包上傳服務器記錄1、項目打包2、jar包上傳服務器 本文記錄打包一個后端項目,上傳公司服務器的過程。 1、項目打包 通過IDEA的插件進行打包: 打成一個jar包,jar包的位置在控制臺可以看到。 2、…

ssm蜀都天香酒樓網站設計與實現

ssm蜀都天香酒樓的網站設計與實現028 開發工具:idea 數據庫mysql5.7 數據庫鏈接工具:navcat,小海豚等 技術:ssm 摘要 近年來,信息化管理行業的不斷興起,使得人們的日常生活越來越離不開計算機和互聯網技術。首…

機器學習基礎(六)

貝葉斯分析 介紹 “貝葉斯”是指托馬斯貝葉斯(1702–1761),他證明了一個特例,也就是現在的貝葉斯定理的特例。 貝葉斯定理(英語:Bayes theorem)是概率論中的一個定理,描述在已知一些條件下,某事件的發生概率。比如,如果已知某種健康問題與壽命有關,使用貝葉斯定理則…

selenium語法進階+常用API

目錄 瀏覽器操作 瀏覽器回退,前進 與刷新 瀏覽器窗口設置大小 瀏覽器設置寬高 瀏覽器窗口最大化 瀏覽器控制滾動條 信息打印 打印頁面的標題和當前頁面的URL 定位一組元素 鼠標和鍵盤事件 鍵盤 鼠標 下拉框操作 通過索引定位(se…

【BASH】回顧與知識點梳理(三十二)

【BASH】回顧與知識點梳理 三十二 三十二. SELinux 初探32.1 什么是 SELinux當初設計的目標:避免資源的誤用傳統的文件權限與賬號關系:自主式訪問控制, DAC以政策規則訂定特定進程讀取特定文件:委任式訪問控制, MAC 32.2 SELinux 的運作模式安…

安科瑞變電所運維平臺在電力系統中應用分析

摘要:現代居民生活、工作對電力資源的需求量相對較多,給我國的電力產業帶來了良好的發展機遇與挑戰。探索電力系統基本構成, 將變電運維安全管理以及相應的設備維護工作系統性開展,能夠根據項目實踐工作要求,將滿足要求…

C語言暑假刷題沖刺篇——day2

目錄 一、選擇題 二、編程題 🎈個人主頁:庫庫的里昂 🎐CSDN新晉作者 🎉歡迎 👍點贊?評論?收藏?收錄專欄:C語言每日一練 ?其他專欄:代碼小游戲C語言初階🤝希望作者的文章能對你…

最小生成樹,prim算法

Prim算法和Kruskal算法都是用于解決最小生成樹問題的經典算法,它們在不同情況下有不同的適用性和特點。 Prim算法: Prim算法是一種貪心算法,用于構建一個無向圖的最小生成樹。算法從一個初始節點開始,逐步添加與當前樹連接且具有…

【自動電壓調節器】無功功率控制的終端電壓控制研究(Simulink)

💥💥💞💞歡迎來到本博客????💥💥 🏆博主優勢:🌞🌞🌞博客內容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ??座右銘&a…

小白的Node.js學習筆記大全---不定期更新

let、const、var的區別 (1)塊級作用域: 塊作用域由 { }包括,let和const具有塊級作用域,var不存在塊級作用域。塊級作用域解決了ES5中的兩個問題: 內層變量可能覆蓋外層變量 用來計數的循環變量泄露為全局…

【加強管理】《別輸在不懂管理上》學習記錄,黃金41條

成功有時是很難效法的,但失敗是可以避免的,從失敗中吸取經驗和教訓才是管理者的必修課。釋義: 圖形含義🌲一級重要🍀二級重要🌿三級主要🍁存在問題🌼解決辦法 1 不能從頭管到腳 不…

【討論】視頻監控集中存儲方案如何做?

視頻監控集中存儲是指將多個視頻監控攝像頭所捕捉到的視頻信號集中存儲于一個中央設備,這個中央設備可以是服務器、網絡存儲設備或其他專用設備。通過集中存儲,可以避免因為存儲設備分散而導致的管理不便和難以有效地管理和檢索視頻數據,同時…

RTT(RT-Thread)ADC設備(RTT保姆級介紹)

目錄 ADC設備 前言 ADC相關參數說明 訪問ADC設備 配置ADC設備 ADC實例 硬件設計 軟件設計 ADC設備 前言 ADC(Analog-to-Digital Converter) 指模數轉換器。是指將連續變化的模擬信號轉換為離散的數字信號的器件。 對于ADC的詳細介紹和在STM32中的裸機應用可參考以下…