經典貪心,哈夫曼編碼。

2021-06-07 10:02:37 字數 821 閱讀 5640

#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 main() ;

// 字符集

string st = " abcdefghijklmnopqrstuvwxyz";

// 頻度

int f = ;

// 總頻數

int all = 0;

for(int i = 0; i < st.size(); ++i)

// 生成基礎節點

for(int i = 1; i < 128; ++i)

if(c[i]) q.push(new node(c[i]));

// 替換指標,擷取節點

node *x, *y, *z;

// 優先佇列合併

while(!q.empty())

int p = dfs(x, 0), q = 8 * all;

if(x->left == null && x->right == null) p = x -> len;

destroy(x);

printf("%d %d %.1lf\n", q, p, double(q)/p);

system("pause");

}

貪心 哈夫曼編碼 哈夫曼樹

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

貪心 哈夫曼編碼

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

哈夫曼編碼(貪心)

題目描述 給定乙隻含有小寫字母的字串 輸出其哈夫曼編碼的長度 輸入第一行乙個整數t,代表樣例的個數,接下來t行,每行乙個字串,0輸出 對於每個字串,輸出其哈夫曼編碼長度 樣例輸入 3hrvsh lcxea dphiopd mntflolfbtbpplahqolqykrqdnwdoq 樣例輸出 105...