哈弗曼編碼

2021-07-05 21:23:40 字數 881 閱讀 1458

#include "iostream"

#include "queue"

#include "vector"

#include "string"

using

namespace

std;

struct huffmantree

bool

operator

< (const huffmantree &t) const

};vector

h; //相當於乙個並查集,儲存所有的父子關係

priority_queuepq; //儲存數的優先佇列,字元出現頻率小的樹先出佇列

int size = 0; // 待編碼字元數目

//初始化,將每乙個字元作為一棵樹

//n為字元個數,c為字元,w為字元出現頻率

void init(int n, char c, int w)

}//進行編碼

void encode()

int i;

for(i=0; iint index = i;

string s = "";

while(h[index].parent != -1) //自底向上搜尋並查集

h[i].code = s; //得到字元的二進位制編碼

}}void print(int n) //列印字元編碼、編碼所佔總空間

printf("檔案需要總的儲存位數為:%d kbits\n", sum);

}int main();

int w = ;

init(n, c, w);

encode();

print(n);

return

0;}

哈弗曼編碼 哈弗曼樹

哈弗曼編碼是依賴於字元使用頻率來建立的一種編碼,通過把使用頻率低的字元分配相對較多的01編碼,而使用頻率高的分配相對較低的01編碼,來建立最小的帶權路徑長度的樹,來最大化的獲得編碼儲存空間的一種編碼規則。這個樹稱為哈弗曼樹,也稱為最優二叉樹。這樣可以確定每乙個字元的編碼不可能成為其他字元編碼的坐子串...

哈弗曼編碼

include include include define my strmax 100 define infinity 1000000 typedef struct htnode,huffmantree 動態分配陣列儲存赫夫曼樹 typedef char huffmancode 動態分配陣列儲存赫...

哈弗曼編碼

定義 它是由n個帶權葉子結點構成的所有二叉樹中帶權路徑長度最短的二叉樹。因為這種樹最早由哈夫曼 huffman 研究,所以稱為哈夫曼樹,又叫最優二叉樹。1.初始化 根據給定的n個權值構成n棵二叉樹的集合f 其中每棵二叉樹ti中只有乙個帶權wi的根結點,左右子樹均空。2.找最小樹 在f中選擇兩棵根結點...