哈夫曼編碼(貪心)

2021-10-10 08:28:03 字數 558 閱讀 9573

題目描述

給定乙隻含有小寫字母的字串;輸出其哈夫曼編碼的長度

輸入第一行乙個整數t,代表樣例的個數,接下來t行,每行乙個字串,0輸出

對於每個字串,輸出其哈夫曼編碼長度

樣例輸入

3hrvsh

lcxea***dphiopd

mntflolfbtbpplahqolqykrqdnwdoq

樣例輸出

1051

115每次取頻率最小的兩個合併,新的結果放入

#include

using

namespace std;

#define ll long long

int t,a[30]

;string str;

priority_queue <

int,vector<

int>

,greater<

int>

> q;

intmain()

q.pop();

cout<}return0;

}

貪心 哈夫曼編碼 哈夫曼樹

解決問題 哈夫曼樹 眾所周知,計算機以01串來儲存和運算。所以,如果我們想要存乙個字元或漢字,例如a,計算機會將它變為乙個01串,這個串就是a的編碼。如果我們輸入了乙個詞 cat。如果a的編碼是1,c的編碼是10,t的編碼是11,那麼 cat 對應的編碼就是 10111 好了,那麼問題來了 1011...

貪心 哈夫曼編碼

哈夫曼編碼 所謂編碼就是對於任意給定的文字,通過查閱編碼表逐一將其中的字元轉譯為二進位制編碼,這些編碼依次串接起來即得到了全文的編碼。編碼方案確定後,儘管編碼結果必然確定,但解碼過程和結果卻不見得唯一。例如,字元a的編碼為01,b的編碼為011,c的編碼為11,d的編碼為101。當給定一串字元011...

經典貪心,哈夫曼編碼。

include include include include using namespace std vectorv struct node class op priority queue,op q int dfs node p,int level void destroy node p int ...