版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2016數(shù)據(jù)結(jié)構(gòu)Data structure講授:劉斌構(gòu)造哈夫曼樹的算法常州信息職業(yè)技術(shù)學(xué)院02教學(xué)目標(biāo)123哈夫曼樹結(jié)點(diǎn)的結(jié)構(gòu)03哈夫曼樹的描述構(gòu)造哈夫曼樹的步驟4構(gòu)造哈夫曼樹具體算法三、鏈表的插入04構(gòu)造哈夫曼樹的算法1.33哈夫曼樹及哈夫曼編碼3、構(gòu)造哈夫曼樹的算法1哈夫曼樹結(jié)點(diǎn)的結(jié)構(gòu)哈夫曼樹的結(jié)點(diǎn)用一個(gè)大小為2n-1的向量來存儲,每個(gè)結(jié)點(diǎn)包含權(quán)值域weight、指示左右孩子結(jié)點(diǎn)在向量中下標(biāo)的整型量lchild和rchild、指示雙親結(jié)點(diǎn)在向量中下標(biāo)的整型量parent。lchildweightparentrchild圖4-26 結(jié)點(diǎn)結(jié)構(gòu)weightlchildrchildparent0
2、5構(gòu)造哈夫曼樹的算法1.3122哈夫曼樹的描述#define n 100 /葉子數(shù)目#define m 2*n-1/樹中結(jié)點(diǎn)總數(shù)typedef struct /定義結(jié)點(diǎn)類型 double weight; /定義權(quán)值域 int lchild,rchild,parent; /定義左右孩子及雙親指針HTNode;typedef HTNode HuffmanTreem; /*定義HuffmanTree為新的類型標(biāo)識符,用該標(biāo) 符定義的變量是具有HTNode類型的含有m個(gè)元素的向量。*/C數(shù)組的下界為0,故用-1表示空指針。樹中某結(jié)點(diǎn)的lchild、rchild和parent不等于-1時(shí),它們分別是該結(jié)
3、點(diǎn)的左、右孩子和雙親結(jié)點(diǎn)在向量中的下標(biāo)。設(shè)置parent域有兩個(gè)作用:其一是使查找某結(jié)點(diǎn)的雙親變得簡單;其二是可通過判定parent的值是否為-1來區(qū)分根與非根結(jié)點(diǎn)。(iii)新結(jié)點(diǎn)Ti的權(quán)值置為Tp1和Tp2的權(quán)值之和。 06構(gòu)造哈夫曼樹的算法1.33構(gòu)造哈夫曼樹T的步驟(1)初始化:將T0m-1中2n-1個(gè)結(jié)點(diǎn)里的三個(gè)指針均置為空(即置為-1),權(quán)值置為0。(2)輸入:讀入n個(gè)葉子的權(quán)值存于向量的前n個(gè)分量(即T0 n-1)中。它們是初始森林中n個(gè)孤立的根結(jié)點(diǎn)上的權(quán)值。(3)合并:對森林中的樹共進(jìn)行n-1次合并,所產(chǎn)生的新結(jié)點(diǎn)依次放入向量T的第i個(gè)分量中(nim-1)。每次合并分兩步:在當(dāng)
4、前森林T0 i-1的所有結(jié)點(diǎn)中,選取權(quán)最小和次小的兩個(gè)根結(jié)點(diǎn)Tp1和Tp2作為合并對象,這里0p1,p2i-1。 將根為Tp1和Tp2的兩棵樹作為左右子樹合并為一棵新的樹,新樹的根是新結(jié)點(diǎn)Ti。(iii)新結(jié)點(diǎn)Ti的權(quán)值置為Tp1和Tp2的權(quán)值之和。 06構(gòu)造哈夫曼樹的算法1.3具體操作:(i)將Tp1和Tp2的parent置為i;(ii)將Ti的lchild和rchild分別置為p1和p2;(iii)新結(jié)點(diǎn)Ti的權(quán)值置為Tp1和Tp2的權(quán)值之和。 合并后Tpl和Tp2在當(dāng)前森林中已不再是根,因?yàn)樗鼈兊碾p親指針均已指向了Ti,所以下一次合并時(shí)不會被選中為合并對象。07構(gòu)造哈夫曼樹的算法1.3構(gòu)
5、造哈夫曼樹T具體算法示例:給定5個(gè)葉子結(jié)點(diǎn)a,b,c, d和e,分別帶權(quán)7,6,12,15和1007構(gòu)造哈夫曼樹的算法1.3void InitHuffmanTree(HuffmanTree T) /初始化 int i; for (i=0; im; i+) Ti.weight=0;Ti.lchild=-1;Ti.rchild=-1;Ti.parent=-1; 構(gòu)造哈夫曼樹T具體算法初始化函數(shù)weightlchildrchildparent0-1-1-10-1-1-10-1-1-10-1-1-10-1-1-10-1-1-10-1-1-10-1-1-10-1-1-107構(gòu)造哈夫曼樹的算法1.3構(gòu)造哈
6、夫曼樹T具體算法void InputWeight(HuffmanTree T)/輸入權(quán)值double w;int i;for (i=0; in;i+) printf(n輸入第%d個(gè)權(quán)值:,i+1); scanf(%lf,&w); Ti.weight=w;輸入權(quán)值函數(shù)weightlchildrchildparent7-1-1-16-1-1-112-1-1-115-1-1-110-1-1-10-1-1-10-1-1-10-1-1-10-1-1-108構(gòu)造哈夫曼樹的算法1.3void SelectMin(HuffmanTree T, int i, int *p1,int *p2)/選擇兩個(gè)小的結(jié)點(diǎn)d
7、ouble min1=999999;/定義并初始化最小權(quán)值double min2=999999;/定義并初始化次小權(quán)值int j;for (j=0;j=i;j+) if(Tj.parent=-1)選擇兩個(gè)權(quán)最小的根結(jié)點(diǎn)函數(shù)if(Tj.weightmin1) min2=min1; /改變最小權(quán),次小權(quán)及其位置 min1=Tj.weight; /找出最小的權(quán)值 *p2=*p1; *p1=j;else if(Tj.weightmin2) min2=Tj.weight;/改變次小權(quán)及位置 *p2=j;weightlchildrchildparent7-1-1-16-1-1-112-1-1-115-1-
8、1-110-1-1-10-1-1-10-1-1-10-1-1-10-1-1-109構(gòu)造哈夫曼樹的算法1.3void CreateHuffmanTree(HuffmanTree T)/構(gòu)造哈夫曼樹,Tm-1為其根結(jié)點(diǎn)int i,p1,p2;InitHuffmanTree(T); /將T初始化InputWeight(T); /輸入葉子權(quán)值至weight域for(i=n;im;i+)/共n-1次合并,新結(jié)點(diǎn)存于Ti中SelectMin(T,i-1,&p1,&p2); /選建立哈夫曼樹函數(shù)。擇權(quán)最小的根結(jié)點(diǎn)Tp1.parent=Tp2.parent=i;Ti.lchild=p1; /最小權(quán)根結(jié)點(diǎn)是新結(jié)
9、點(diǎn)左孩子Ti.rchild=p2; /次小權(quán)根結(jié)點(diǎn)是新結(jié)點(diǎn)右孩子Ti.weight=Tp1.weight+Tp2.weight;weightlchildrchildparent7-1-1-16-1-1-112-1-1-115-1-1-110-1-1-10-1-1-10-1-1-10-1-1-10-1-1-1weightlchildrchildparent7-1-156-1-1512-1-1-115-1-1-110-1-1-11310-10-1-1-10-1-1-10-1-1-1weightlchildrchildparent7-1-156-1-1512-1-1615-1-1-110-1-161310-12242-10-1-1-10-1-1-1weightlchildrchildparent7-1-15
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023試用期合同協(xié)議書七篇
- 2025交通事故自行調(diào)解書協(xié)議書12篇
- 個(gè)人股權(quán)轉(zhuǎn)讓協(xié)議書七篇
- 個(gè)人土地轉(zhuǎn)租協(xié)議范本
- 關(guān)注細(xì)節(jié)的“管理新星”-記工程局勞動模范經(jīng)管部部長孫獻(xiàn)龍
- 跖疣病因介紹
- 四大名著之紅樓春趣經(jīng)典解讀2
- 2023-2024學(xué)年天津市河北區(qū)高二(上)期末語文試卷
- 2023年天津市靜海一中高考語文模擬試卷(一)
- 重慶2020-2024年中考英語5年真題回-教師版-專題02 完形填空
- 鋼管焊接施工方案全套資料
- 員工輪崗機(jī)制管理制度(含表格)
- 《混凝土結(jié)構(gòu)》(樓蓋)課程設(shè)計(jì)任務(wù)書
- 金屬屋面工程質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 唐山三友氯堿有限責(zé)任公司聚合釜冷凝器高壓水清洗方案
- 趙本山《賣拐》臺詞
- 彈性金屬塑料瓦的認(rèn)識
- 工程測量英語常用詞匯
- 物業(yè)維修管家巡查記錄表
- 橋梁維修加固施工組織設(shè)計(jì)
- IPC-A-610E培訓(xùn)教材(完整版)
評論
0/150
提交評論