HDU 1053 Entropy 哈夫曼樹

2021-07-09 01:42:28 字數 1732 閱讀 8686

題意:根據哈夫曼編碼原則壓縮乙個字串,問壓縮後的大小和壓縮比。

思路:就是寫一棵哈夫曼樹。

ps:第一次寫哈夫曼樹,寫得好醜
/*********************************************

problem : hdu 1053

author : nmfloat

********************************************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define rep(i,a,b) for(int i = (a) ; i <= (b) ; i ++)

#define rrep(i,a,b) for(int i = (b) ; i >= (a) ; i --)

#define repe(p,u) for(edge * p = g[u].first ; p ; p = p -> next)

#define cls(a,x) memset(a,x,sizeof(a))

#define eps 1e-8

using

namespace

std;

const

int mod = 1e9+7;

const

int inf = 0x3f3f3f3f;

const

int maxn = 1e5+5;

const

int maxe = 2e5+5;

typedef

long

long ll;

typedef

unsigned

long

long ull;

int t,n,m,k;

int fx = ;

int fy = ;

char s[100005];

int a[30];

int tot = 0;

struct leaf t[1000];

struct node

bool

operator

< (const node b) const

};priority_queuep;

int ans ;

void dfs(int u,int depth)

dfs(t[u].x,depth+1);

dfs(t[u].y,depth+1);

}void huffman()

}if(a[26])

//puts("");

if(p.size() == 1)

while(p.size() != 1)

ans = 0;

dfs(tot-1,0);

}void input()

void solve()

tot = 1;

huffman();

printf("%d %d %.1lf\n",len*8,ans,(double)(len*8)/(double)ans);

}int main(void)

return

0;}

HDU1053 Entropy 哈夫曼樹

認真讀題,別怕題長,此題考查的就是哈夫曼樹並求出最小編碼值,注意每一次要將陣列清0,否則會出錯!ac include include using namespace std define m 1000000 struct node ha 100 int main int k 0 for i 0 i ...

Hdu 1053 Entropy查出錯(修改)

pragma warning disable 4786 include include include includeusing namespace std struct node int findminindex vector ht,int n for i n 1 i m i return ht ...

hdu1053(哈夫曼編碼)

題意是,給出一排字串,要求求出字元的8位編碼的長度,哈夫曼編碼值,以及之間的比值 因為僅僅只要求求出哈夫曼編碼值,所以不用建立哈夫曼樹,可以建立優先佇列,只要將每次最小的 出隊的兩個元素合成乙個新的大數,然後放進優先佇列中,直到只剩下乙個元素為止,那個元素就是哈夫曼編碼值。注意只有一種字元的情況 a...