HuffmanTree的實現及Huffman編碼

2021-07-31 03:20:31 字數 1181 閱讀 4237

假設一共有n個data,第i個data有對應的權值wi。使從根節點到所有data的路徑長度乘以其權值和為最小。符合其條件的樹就是huffmantree,也被稱為最優二叉樹。

先將n個data建成n個只有乙個根節點的數

然後從n個中找出兩個最小的data

將這兩個數合併為乙個二叉樹,左孩子為最小值,右孩子為第二小值

將這個樹的根節點的權值設為原來兩個點的權值之和

在剩下的n-1個根節點中執行步驟2直到只剩下乙個根節點,結束迴圈。

下面來講一下huffmantree的乙個最經典的應用,huffman編碼。

#include

#include

#include

#include

using

namespace

std;

const

int maxn=100;

typedef

struct hafnode;//huffmantree的基本定義

typedef

struct hafcode;

void init(hafcode *h,int &n)//初始化輸入資料

void select(hafnode *h,int k,int &s1,int &s2)//選擇兩個最小的值

s2 = i;

for(i=0; iif(h[i].parent==0 && i!=s1 && h[i].weightvoid huffman(hafcode *h2,hafnode *h1,int n)

int s1,s2;

for(int i=n;i//建立二叉樹

h1[s2].parent=i;

h1[i].lchild=s1;

h1[i].rchild=s2;

h1[i].weight=h1[s1].weight+h1[s2].weight;

//cout<}

str[n]='\0';

//memset(str,0,sizeof(str));

int l,p;

for(int i=0;i//從每個葉子節點開始倒序遍歷

l=n-1;//倒序賦值字串

//cout//cout}

}int main()

HuffmanTree,哈夫曼樹的原理和c 實現

目錄哈夫曼樹又稱為最優樹.通過權值來構造樹,權值越大,離根節點越近 經常用於無失真壓縮演算法 用於需要優化儲存空間的場景 原理很簡單,不多贅述 需要注意 構建哈夫曼樹不僅要值,還需要對應的權值 比如越常出現的,權值越大 通過權值來構造哈夫曼樹 我畫了幾個圖,具體過程如下 上面通過權值構建了哈夫曼樹,...

方法的宣告及實現

import inte ce car nsobject int comparewithspeed car m end implementation car int comparewithspeed car m end int main 方法的定義以及使用。注意方法的呼叫用物件呼叫,其中的變數也是方法...

棧的實現及應用

1.棧定義 棧又稱堆疊,是一種運算受限的線性表,限制是僅僅允許在表的另外一端進行插入和刪除運算。2.特點 後進先出 cpu快取利用率相對較高 不允許隨意訪問 3.實現方式 棧有兩種實現方式,一種是順序儲存,和陣列類似。一種是鏈式儲存,和單鏈表類似。這是在2013編譯器下 棧裡面有以下幾種函式 voi...