SDUT OJ 資料結構實驗之二叉樹六 哈夫曼編碼

2021-08-22 12:05:24 字數 1847 閱讀 7058

time limit: 1000 ms memory limit: 65536 kib

submit

statistic

discuss

problem description

字元的編碼方式有多種,除了大家熟悉的ascii編碼,哈夫曼編碼(huffman coding)也是一種編碼方式,它是可變字長編碼。該方法完全依據字元出現概率來構造出平均長度最短的編碼,稱之為最優編碼。哈夫曼編碼常被用於資料檔案壓縮中,其壓縮率通常在20%~90%之間。你的任務是對從鍵盤輸入的乙個字串求出它的ascii編碼長度和哈夫曼編碼長度的比值。

input

輸入資料有多組,每組資料一行,表示要編碼的字串。

output

對應字元的ascii編碼長度la,huffman編碼長度lh和la/lh的值(保留一位小數),資料之間以空格間隔。

sample input

aaaaabcd

the_cat_in_the_hat

sample output

64 13 4.9

144 51 2.8

hint

source

xam

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

int main()

int priority;

int value;

};在該結構中,value為值,priority為優先順序。

通過自定義operator《操作符來比較元素中的優先順序。

在示例3中輸出結果為:

優先順序  值

9          5

8          2

6          1

2          3

1          4

但如果結構定義如下:

struct node

int priority;

int value;

};則會編譯不過(g++編譯器)

因為標準庫預設使用元素型別的《操作符來確定它們之間的優先順序關係。

而且自定義型別的《操作符與》操作符並無直接聯絡,故會編譯不過。

//**清單

#include#includeusing namespace std;

struct node

int priority;

int value;

};int main()

; priority_queueq1;

for(int i=0;i<6;i++)

for(int j=0;j<6;j++)

priority_queue< int,vector,greater>q2;

for(int i=0;i<6;i++)

for(int j=0;j<6;j++)

priority_queueq3;

node b[10];

b[0].priority = 6; b[0].value = 1;

b[1].priority = 9; b[1].value = 5;

b[2].priority = 2; b[2].value = 3;

b[3].priority = 8; b[3].value = 2;

b[4].priority = 1; b[4].value = 4;

for(int i=0;i<5;i++)

for(int i=0;i<5;i++)

system("pause");

return 0;

}

SDUT OJ 資料結構實驗之二叉樹五 層序遍歷

time limit 1000ms memory limit 65536k 已知乙個按先序輸入的字串行,如abd,eg,cf,其中,表示空結點 請建立二叉樹並求二叉樹的層次遍歷序列。輸入資料有多行,第一行是乙個整數t t 1000 代表有 t行測試資料。每行是 乙個長度小於50 個字元的字串。輸出二...

SDUT OJ資料結構實驗之二叉樹三 統計葉子數

time limit 1000ms memory limit 65536k 已知二叉樹的乙個按先序遍歷輸入的字串行,如abc,de,g,f,其中,表示空結點 請建立二叉樹並求二叉樹的葉子結點個數。連續輸入多組資料,每組資料輸入乙個長度小於50個字元的字串。輸出二叉樹的葉子結點個數。abc,de,g,...

SDUT OJ 資料結構實驗之二叉樹六 哈夫曼編碼

time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 字元的編碼方式有多種,除了大家熟悉的ascii 編碼,哈夫曼編碼 huffman coding 也是一種編碼方式,它是可變字長...