Hufman編碼實現運用1 (原理不描述)

2021-08-28 12:19:33 字數 2062 閱讀 2414

思路:

編碼

所需標頭檔案:

#ifndef head1_h_included

#define head1_h_included

#include#include#include#include#include#include#includeusing namespace std;

struct htnode

};bool operator

charsize=mmp.size();

datearr=new _date[charsize];

int top=0;

for(it=mmp.begin(); it!=mmp.end(); ++it)

mmp.clear();

}void bulidtree()

/*二叉樹構建完成

陣列為hufarr 根節點為2*charsize-2

對應的字元在datearr.cc裡面*/}

void getcharcode(){/*

需要:哈夫曼節點陣列hufarr,字元表種類數charsize

輸出:字元對應的編碼 存到charcodearr

*/charcodearr=new char*[charsize];

char *midc=new char[charsize+1];//作為中間字串

int top,now_node,next_node;

allcodesize=0;

for(int i=0; i此**儲存到文字時按照如下方式儲存

解碼就比較簡單了:

解壓程式

*/#include"head1.h"

void compress_file(file *fp)//對檔案進行解壓 當成解壓字元assic碼並存到文字裡面(二進位制儲存)

{ int charsize,allcodesize,info_size;

int sizepos,bitpos,now_index;

char *codetable;

char *codebitarr;

char *infoarr;

htnode* hufcodearr;

int mid;

fread(&charsize,4,1,fp);//讀取 charsize

fread(&allcodesize,4,1,fp);//讀取 有用的編碼位數

fread(&info_size,4,1,fp);//讀取 原來的位元組數目

codetable=new char[charsize];//申請 字母表記憶體

hufcodearr=new htnode[2*charsize-1];//申請 hufmantree記憶體

fread(codetable,1,charsize,fp);//讀取 字母表

fread(hufcodearr,sizeof(htnode),charsize*2-1,fp);//讀取哈夫曼樹

mid=allcodesize/8;

if(mid%allcodesize)

mid++;

codebitarr=new char[mid];//申請編碼記憶體

fread(codebitarr,1,mid,fp);//讀取編碼

int top=0;

int cnt=0;

now_index=2*charsize-2;

infoarr=new char[info_size];

while(top缺陷:

1.只有一種字元無編碼

2.把乙個位元組當作乙個一種字元   壓縮力度小

後續跟更新4個位元組為以乙個字元的編碼**

Huffman編碼原理及實現

lipracer關注 2018.10.18 23 03 00字數 251閱讀 1,116 huffman編碼特點 熵編碼,編碼效率受限資訊理論熵極限 關於這部分具體理論記不得,參考物理的熵,熵極大,就是最混亂的狀態,最混亂莫過於在一定碼長的情況下盡可能表現多的資訊,這個碼長就是最短碼長,也就是熵編碼...

Base64編碼運用與基本原理

編碼說白了就是按照一定規則對資料進行轉換,工作原理有點類似於查字典,base64編碼 叫base64的原因是因為其使用64個字元來對任意資料進行編碼 可以用來將或者其他檔案的二進位制資料轉換成字串形式,以下 是將乙個通過base64編碼成字串,將字串寫入txt檔案後再讀取出來生成乙個新的 結果如下 ...

RBAC實現原理之1

rbac就是 role based access controller,基於角色 role 的許可權 access 管理,這裡簡單介紹一下他的原理與實現方式之一。首先最基本的組成有 使用者 admin 角色 role 具體許可權 auth 這三者之間的關係是這樣的 乙個使用者只擁有一種角色,一種角色...