哈夫曼編碼問題

2021-10-09 01:22:53 字數 972 閱讀 8143

給定乙個數字n,代表有n種不同的字元,已知每種字元的出現次數,現在要求你設計一種編碼,使得任意乙個編碼都不是另外乙個編碼的字首,並且使得這些字元經過編碼壓縮之後的總長度最小; 

乙個數字n 代表有多少種不同的字元(0<=n<=1000)n個數字  每個數字代表一種字元的出現次數

乙個數字,代表總的編碼長度

512

3453

388

33

30

正常版

#includeusing namespace std;

bool bj[2001];

struct jg;

struct nsj

;int data[2001],cd[2001];

jg shu[2001];

void dfs(int x,int y);

nsj zhapy(int x);

int main()

for(i=1;i<=n;i++)

cnt=n;

while(cnt<2*n-1)

dfs(2*n-1,0);

int ans=0;

for(i=1;i<=n;i++)

cout<**版:

#includeusing namespace std;bool bj[2001];struct jg;struct nsj;int data[2001],cd[2001];jg shu[2001];void dfs(int x,int y);nsj zhapy(int x);int main()for(i=1;i<=n;i++)cnt=n;while(cnt<2*n-1)dfs(2*n-1,0);int ans=0;for(i=1;i<=n;i++)cout<

哈夫曼編碼問題

輸入乙個整數n,n 100,下面n行分別為n個字元及其出現頻率 輸出所有字元的頻率與其編碼長度的乘積之和 輸入 5 a 35 b 10 c 20 d 20 15 輸出 225輸入 3 x 20 y 50 z 5輸出 100整體思路 class node node 注意點 void printf in...

哈夫曼編碼問題

1 介紹 在計算機資料處理中,哈夫曼編碼使用變長編碼表對源符號 如檔案中的乙個字母 進行編碼,其中變長編碼表是通過一種評估 符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的字串的平均長度 期望值降低,從而達到無失真壓縮資料的目的。例如,在英...

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....