[數(shù)據(jù)結(jié)構(gòu)]計(jì)算WPL 解題報(bào)告

Problem Description

Huffman編碼是通信系統(tǒng)中常用的一種不等長(zhǎng)編碼,它的特點(diǎn)是:能夠使編碼之后的電文長(zhǎng)度最短。


輸入:

第一行為要編碼的符號(hào)數(shù)量n
第二行~第n+1行為每個(gè)符號(hào)出現(xiàn)的頻率

輸出:

對(duì)應(yīng)哈夫曼樹的帶權(quán)路徑長(zhǎng)度WPL


測(cè)試輸入

5
7
5
2
4
9

測(cè)試輸出

WPL=60

AcCode

//
//  main.cpp
//  計(jì)算WPL
//
//  Created by jetviper on 2017/3/26.
//  Copyright ? 2017年 jetviper. All rights reserved.
//

#include <stdio.h>
#define true 1
#define false 0
typedef  struct {
    unsigned int weight;
    unsigned int parent,leftChild,rightChild;
}HTNode, *HuffmnTree;

HTNode hufmanTree[100000];
int main() {
    
    int num,m;
    scanf("%d",&num);
    m = 2 * num -1;
    for(int i=1;i<=num;i++){
        scanf("%d",&hufmanTree[i].weight);
        hufmanTree[i].parent = 0;
        hufmanTree[i].leftChild = 0;
        hufmanTree[i].rightChild = 0;
    }
    int s1,s2,max1,max2,iset1,iset2;
    
    for(int i=num+1;i<=m;i++){
        max1 =0,max2=0;
        iset1 =0,iset2=0;
        for(int j=1;j<i;j++){
            if(hufmanTree[j].parent == 0){
                if(iset1 == 0){
                    max1 = hufmanTree[j].weight;
                    s1 = j;
                    iset1 = 1;
                    continue;
                }
                if(max1>hufmanTree[j].weight){
                    max1 = hufmanTree[j].weight;
                    s1 = j;
                    
                }
                
            }
        }
        for(int j =1;j<i;j++){
            if(j == s1)continue;
            if(hufmanTree[j].parent == 0) {
                if (iset2 == 0) {
                    max2 = hufmanTree[j].weight;
                    s2 = j;
                    iset2 = 1;
                    continue;
                }
                if (max2 > hufmanTree[j].weight) {
                    max2 = hufmanTree[j].weight;
                    s2 = j;
                }
            }
        }
        
        hufmanTree[s1].parent = i;
        hufmanTree[s2].parent = i;
        hufmanTree[i].leftChild = s1;
        hufmanTree[i].rightChild = s1;
        hufmanTree[i].weight = hufmanTree[s1].weight + hufmanTree[s2].weight;
    }
    
    int result =0;
    for(int i =1;i<=num;i++){
        
        if(hufmanTree[i].parent != 0){
            int temp= hufmanTree[i].parent;
            int count = 1;
            while(1){
                if(hufmanTree[temp].parent!=0){
                    temp = hufmanTree[temp].parent;
                    count++;
                    continue;
                }
                else break;
            }
            result += count * hufmanTree[i].weight;
        }
    }
    
    printf("WPL=%d\n",result);
    
    
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖护姆,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異掏击,居然都是意外死亡卵皂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門砚亭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)灯变,“玉大人,你說(shuō)我怎么就攤上這事捅膘√砘觯” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵寻仗,是天一觀的道長(zhǎng)刃泌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)署尤,這世上最難降的妖魔是什么耙替? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮曹体,結(jié)果婚禮上俗扇,老公的妹妹穿的比我還像新娘。我一直安慰自己箕别,他們只是感情好铜幽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著究孕,像睡著了一般啥酱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厨诸,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音禾酱,去河邊找鬼微酬。 笑死绘趋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颗管。 我是一名探鬼主播陷遮,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垦江!你這毒婦竟也來(lái)了帽馋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤比吭,失蹤者是張志新(化名)和其女友劉穎绽族,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衩藤,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吧慢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赏表。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片检诗。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瓢剿,靈堂內(nèi)的尸體忽然破棺而出逢慌,到底是詐尸還是另有隱情,我是刑警寧澤间狂,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布攻泼,位于F島的核電站,受9級(jí)特大地震影響前标,放射性物質(zhì)發(fā)生泄漏坠韩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一炼列、第九天 我趴在偏房一處隱蔽的房頂上張望只搁。 院中可真熱鬧,春花似錦俭尖、人聲如沸氢惋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)焰望。三九已至,卻和暖如春已亥,著一層夾襖步出監(jiān)牢的瞬間熊赖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工虑椎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留震鹉,地道東北人俱笛。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像传趾,于是被迫代替她去往敵國(guó)和親迎膜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理浆兰,服務(wù)發(fā)現(xiàn)磕仅,斷路器,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 前面的文章主要從理論的角度介紹了自然語(yǔ)言人機(jī)對(duì)話系統(tǒng)所可能涉及到的多個(gè)領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識(shí)簸呈。這篇文章榕订,甚至之后...
    我偏笑_NSNirvana閱讀 13,880評(píng)論 2 64
  • 我是一個(gè)單身狗卸亮,可我現(xiàn)在卻要來(lái)跟大家討論“表白”——這個(gè)對(duì)我來(lái)說(shuō)久違的事情。 (久違你也有臉給我們講M嫒埂<婷场!) 那又...
    看星星的人閱讀 708評(píng)論 1 1
  • 為了應(yīng)景吃溅,寫點(diǎn)和孩子有關(guān)的事情溶诞,但,也許無(wú)關(guān)决侈。 1 昨天去了一所特殊學(xué)校螺垢,和孩子們待了一天。這里大多是語(yǔ)言遲緩和身...
    思潔大太陽(yáng)哦閱讀 260評(píng)論 1 1
  • 總說(shuō)生活源自根本,其實(shí)相處并不是一件易事庐冯。愛(ài)人孽亲、家人、朋友展父,以至身邊的各種關(guān)系返劲,不與我相關(guān)的人和事,可以不去關(guān)心栖茉,...
    了了爍然閱讀 389評(píng)論 0 0