[料][作] 霍夫曼@Morris' Blog|PChome Online 人新台
2013-01-02 19:42:49| 人13,169| 回1 | 上一篇 | 下一篇

[料][作] 霍夫曼

0 收藏 0 0 站台

作容:

建一Huffman tree

依照入的元素以及其率(率小模式且其和1)

透Huffman coding其



※注意率低的一其0

(例如:a 0.25 b 0.35 c 0.4 第一次a0 b1

第二次 (a & b) 0.6   c 0.4       (a & b)1 c0

也就是最後的 a:10 b:11 c:0
 

入及出明:

入一字元且其後面字元之出率依此格式直到所有字元皆入

字元容皆小英文字母(a~z)

出列出所有字元(以其字母序排列)以及其Huffman code(以0、1表示)

sample input 1:

a 0.10 b 0.15 c 0.30 d 0.16 e 0.29

sample output 1:

a : 010
b : 011
c : 11
d : 00
e : 10

sample input 2:

a 0.8 b 0.12 c 0.42

sample output 2:

The sum of frequency is not equal to 1

交方式及期限:

deadline : 1/11 22:00

交一天扣成10%

1/15 22:00後交不予分

交一上到FTP的hw5料下

交也一上到FTP的交料hw5交料中的日期料下  (即:交/hw5交/之日期)


coderar/zip/7z後上

名格式101522054_hw5_ver1.rar

(期限如果想再重新上命名ver2 ver3依此推

助教改作以最後一版,名格式者不被改到)

次作有任何的同寄信或到lab找助教 

小光的疑
a 0.10 b 0.15 c 0.30 d 0.16 e 0.29
a 0.8 b 0.12 c 0.42
a 0.2 c 0.2 d 0.2 b 0.2 e 0.2
a 0.49999999999 b 0.50000000001
a -1 b 2
ab 1 c 0
a 1 a 0


助教解析

不出有率相同的
以免造成建出的huffman tree不同

些分回答

1
a 0.49999999999 b 0.50000000001
的 超float的
因此都被0.500000

2
的率是不被允的
不初在作sample未加入
感提醒

3
sample的可以理多字元
(基本上字或其他符也行)
不作需求要求小英文字母

4
重的部分的是把它作不同的符理
不在次作的也不有

如果有任何可以再信,感


以下是小光代,不要直接照抄上作, ... 我想也不有我班的同看。


#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <sstream>
#include <map>
#include <queue>
#include <vector>
#define eps 1e-6
using namespace std;
struct ND {
    int l, r, ptr;
    string token;
    double p;
    void set(int a, int b, int c, string d, double e) {
        l = a, r = b, ptr = c;
        token = d;
        p = e;
    }
};
struct cmp {
    bool operator() (ND a, ND b) {
        return a.p > b.p;
    }
};
ND nd[1024];
char buf[128];
map<string, string> hufcode;
void dfs(int idx, int dep) {
    if(!idx)    return;
    buf[dep] = '0';
    dfs(nd[idx].l, dep+1);
    buf[dep] = '1';
    dfs(nd[idx].r, dep+1);
    if(!nd[idx].l) {
        buf[dep] = '\0';
        hufcode[nd[idx].token] = buf;
    }
}
int main() {
    puts("Input data (seperate by space):");
    string line, token;
    getline(cin, line);
    stringstream sin(line);
    int size = 0, i;
    double p, sump = 0;
    priority_queue<ND, vector<ND>, cmp> pQ;
    ND L, R;
    while(sin >> token >> p) {
        ++size;
        nd[size].set(0, 0, size, token, p);
        sump += p;
        pQ.push(nd[size]);
    }
    if(fabs(sump-1) > eps) {
        puts("The sum of frequency is not equal to 1");
        system("pause");
        return 0;
    }
    while(pQ.size() >= 2) {
        L = pQ.top(), pQ.pop();
        R = pQ.top(), pQ.pop();
        ++size;
        nd[size].set(L.ptr, R.ptr, size, "", L.p+R.p);
        pQ.push(nd[size]);
    }
    dfs(size, 0);
    for(map<string, string>::iterator it = hufcode.begin();
        it != hufcode.end(); it++) {
        cout << it->first << " : " << it->second << endl;
    }
    system("pause");
    return 0;
}

台: Morris
人(13,169) | 回(1)| 推 (0)| 收藏 (0)|
全站分: 不分 | 人分: 其他目 |
此分下一篇:[性代][作] Gram Schmidt Process
此分上一篇:[性代][作] 旋矩


作好像是1/18是死喔XD
我是你班同
真的XDDDDDD
中央心XDDD
2013-01-18 17:34:16
是 (若未登入"人新台"看不到回覆唷!)
* 入:
入片中算式的果(可能0) 
(有*必填)
TOP
全文
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86