6.5 屈我峯議哘喘!恷單屈我峯(込健凧峯)
1?込健凧峯議児云古廷
恷單屈我峯?匆各込健凧?Haffman?峯?頁峺斤噐匯怏揮嗤鳩協幡峙議匐潤泣?更夛議醤嗤恷弌揮幡揃抄海業議屈我峯。
椎担焚担頁屈我峯議揮幡揃抄海業椿?
壓念中厘断初府狛揃抄才潤泣議揃抄海業議古廷?遇屈我峯議揃抄海業夸頁峺喇功潤泣欺侭嗤匐潤泣議揃抄海業岻才。泌惚屈我峯嶄議匐潤泣脅醤嗤匯協議幡峙?夸辛繍宸匯古廷紗參容鴻。譜屈我峯醤嗤n 倖揮幡峙議匐潤泣?椎担貫功潤泣欺光倖匐潤泣議揃抄海業嚥屢哘潤泣幡峙議核持岻才出恂屈我峯議揮幡揃抄海業?芝葎?
凪嶄Wk 葎及k 倖匐潤泣議幡峙?Lk 葎及k 倖匐潤泣議揃抄海業。泌夕6.16 侭幣議屈我峯?万議揮幡揃抄海業峙WPL?2×2?4×2?5×2?3×2?28。
壓公協匯怏醤嗤鳩協幡峙議匐潤泣?辛參更夛竃音揖議揮幡屈我峯。箭泌?公竃4 倖匐潤泣?譜凪幡峙蛍艶葎1?3?5?7?厘断辛參更夛竃侘彜音揖議謹倖屈我峯。宸乂侘彜音揖議屈我峯議揮幡揃抄海業繍光音屢揖。
宸励臣峯議揮幡揃抄海業蛍艶葎?
?a?WPL?1×2?3×2?5×2?7×2?32
?b?WPL?1×3?3×3?5×2?7×1?29
?c?WPL?1×2?3×3?5×3?7×1?33
?d?WPL?7×3?5×3?3×2?1×1?43
?e?WPL?7×1?5×2?3×3?1×3?29
喇緩辛需?喇屢揖幡峙議匯怏匐徨潤泣侭更撹議屈我峯嗤音揖議侘蓑才音揖議揮幡揃抄海業?椎担泌採孀欺揮幡揃抄海業恷弌議屈我峯?軸込健凧峯?椿?功象込健凧峯議協吶?匯臣屈我峯勣聞凪WPL 峙恷弌?駅倬聞幡峙埆寄議匐潤泣埆真除功潤泣?遇幡峙埆弌議匐潤泣埆垓宣功潤泣。込健凧?Haffman?卆象宸匯蒙泣戻竃阻匯嶽圭隈?宸嶽圭隈議児云房?頁?
?1?喇公協議n 倖幡峙{W1?W2?…?Wn}更夛n 臣峪嗤匯倖匐潤泣議屈我峯?貫遇誼欺匯倖屈我峯議鹿栽F?{T1?T2?…?Tn}?
?2?壓F 嶄僉函功潤泣議幡峙恷弌才肝弌議曾臣屈我峯恬葎恣、嘔徨峯更夛匯臣仟議屈我峯?宸臣仟議屈我峯功潤泣議幡峙葎凪恣、嘔徨峯功潤泣幡峙岻才?
?3?壓鹿栽F 嶄評茅恬葎恣、嘔徨峯議曾臣屈我峯?旺繍仟秀羨議屈我峯紗秘欺鹿栽F 嶄?
?4?嶷鹸?2??3?曾化?輝F 嶄峪複和匯臣屈我峯扮?宸臣屈我峯宴頁侭勣秀羨議込健凧峯。
夕6.18 公竃阻念中戻欺議匐潤泣幡峙鹿栽葎W?{1?3?5?7}議込健凧峯議更夛狛殻。辛參柴麻竃凪揮幡揃抄海業葎29?喇緩辛需?斤噐揖匯怏公協匐潤泣侭更夛議込健凧峯?峯議侘彜辛嬬音揖?徽揮幡揃抄海業峙頁屢揖議?匯協頁恷弌議。
2?込健凧峯議更夛麻隈
壓更夛込健凧峯扮?辛參譜崔匯倖潤更方怏HuffNode 隠贋込健凧峯嶄光潤泣議佚連?功象屈我峯議來嵎辛岑?醤嗤n 倖匐徨潤泣議込健凧峯慌嗤2n?1 倖潤泣?侭參方怏HuffNode 議寄弌譜崔葎2n?1?方怏圷殆議潤更侘塀泌和? 凪嶄?weight 囃隠贋潤泣議幡峙?lchild 才rchild 囃蛍艶隠贋乎潤泣議恣、嘔頃徨潤泣壓方怏HuffNode 嶄議會催?貫遇秀羨軟潤泣岻寂議購狼。葎阻登協匯倖潤泣頁倦厮紗秘欺勣秀羨議込健凧峯嶄?辛宥狛parent 囃議峙栖鳩協。兜兵扮parent 議峙葎?1?輝潤泣紗秘欺峯嶄扮?乎潤泣parent 議峙葎凪褒牌潤泣壓方怏HuffNode 嶄議會催?祥音氏頁?1 阻。
更夛込健凧峯扮?遍枠繍喇n 倖忖憲侘撹議n 倖匐潤泣贋慧欺方怏HuffNode 議念n倖蛍楚嶄?隼朔功象念中初府議込健凧圭隈議児云房??音僅繍曾倖弌徨峯栽旺葎匯倖熟寄議徨峯?耽肝更撹議仟徨峯議功潤泣乏會慧欺HuffNode 方怏嶄議念n 倖蛍楚議朔中。
和中公竃込健凧峯議更夛麻隈。
#define MAXVALUE 10000 /*協吶恷寄幡峙*/
#define MAXLEAF 30 /*協吶込健凧峯嶄匐徨潤泣倖方*/
#define MAXNODE MAXLEAF*2-1
typedef struct {
int weight;
int parent;
int lchild;
int rchild;
}HNodeType;
void HaffmanTree(HNodeType HuffNode [ ])
{/*込健凧峯議更夛麻隈*/
int i,j,m1,m2,x1,x2,n;
scanf(“%d”,&n); /*補秘匐徨潤泣倖方*/
for (i=0;i<2*n-1;i++) /*方怏HuffNode[ ]兜兵晒*/
{ HuffNode[i].weight=0;
HuffNode[i].parent=-1;
HuffNode[i].lchild=-1;
HuffNode[i].rchild=-1;
}
for (i=0;i<n;i++) scanf(“%d”,&HuffNode[i].weight); /*補秘n 倖匐徨潤泣議幡峙*/
for (i=0;i<n-1;i++) /*更夛込健凧峯*/
{ m1=m2=MAXVALUE;
x1=x2=0;
for (j=0;j<n+i;j++)
{ if (HuffNode[j].weight<m1 && HuffNode[j].parent==-1)
{ m2=m1; x2=x1;
m1=HuffNode[j].weight; x1=j;
}
else if (HuffNode[j].weight<m2 && HuffNode[j].parent==-1)
{ m2=HuffNode[j].weight;
x2=j;
}
}
/*繍孀竃議曾臣徨峯栽旺葎匯臣徨峯*/
HuffNode[x1].parent=n+i; HuffNode[x2].parent=n+i;
HuffNode[n+i].weight= HuffNode[x1].weight+HuffNode[x2].weight;
HuffNode[n+i].lchild=x1; HuffNode[n+i].rchild=x2;
}
}
麻隈6.25
3?込健凧峯壓園鷹諒籾嶄議哘喘
壓方象宥儷嶄?将械俶勣繍勧僕議猟忖廬算撹喇屈序崙忖憲0?1 怏撹議屈序崙堪?厘断各岻葎園鷹。箭泌?邪譜勣勧僕議窮猟葎ABACCDA?窮猟嶄峪根嗤A?B?C?D 膨嶽忖憲?飛宸膨嶽忖憲寡喘燕6.2 (a)侭幣議園鷹?夸窮猟議旗鷹葎000010000100100111 000?海業葎21。壓勧僕窮猟扮?厘断悳頁錬李勧僕扮寂勝辛嬬玉?宸祥勣箔窮猟旗鷹勝辛嬬玉??堡撮u瞞岷狢觀衆顕耼繒諜舂調翮覯珊散漫1?6.2 (b)侭幣葎総匯嶽園鷹圭宛?喘緩園鷹斤貧峰窮猟序佩園鷹侭秀羨議旗鷹葎00010010101100?海業葎14。壓宸嶽園鷹圭宛嶄?膨嶽忖憲議園鷹譲葎曾了?頁匯嶽吉海園鷹。泌惚壓園鷹扮深打忖憲竃孖議撞楕?斑竃孖撞楕互議忖憲寡喘勝辛嬬玉議園鷹?竃孖撞楕詰議忖憲寡喘不海議園鷹?更夛匯嶽音吉海園鷹?夸窮猟議旗鷹祥辛嬬厚玉。泌輝忖憲A?B?C?D 寡喘燕6.2 (c)侭幣議園鷹扮?貧峰窮猟議旗鷹葎0110010101110?海業叙葎13。
込健凧峯辛喘噐更夛聞窮猟議園鷹悳海恷玉議園鷹圭宛。醤悶恂隈泌和?譜俶勣園鷹議忖憲鹿栽葎{d1?d2?…?dn}?万断壓窮猟嶄竃孖議肝方賜撞楕鹿栽葎{w1?w2?…?wn}?參d1?d2?…?dn 恬葎匐潤泣?w1?w2?…?wn 恬葎万断議幡峙?更夛匯臣込健凧峯?号協込健凧峯嶄議恣蛍屶旗燕0?嘔蛍屶旗燕1?夸貫功潤泣欺耽倖匐潤泣侭将狛議揃抄蛍屶怏撹議0 才1 議會双宴葎乎潤泣斤哘忖憲議園鷹?厘断各岻葎込健凧園鷹。
壓込健凧園鷹峯嶄?峯議揮幡揃抄海業議根吶頁光倖忖憲議鷹海嚥凪竃孖肝方議核持岻才?匆祥頁窮猟議旗鷹悳海?侭參寡喘込健凧峯更夛議園鷹頁匯嶽嬬聞窮猟旗鷹悳海恷玉議音吉海園鷹。
壓秀羨音吉海園鷹扮?駅倬聞販採匯倖忖憲議園鷹脅音頁総匯倖忖憲園鷹議念弸?宸劔嘉嬬隠屬咎鷹議率匯來。箭泌燕6.2 (d)議園鷹圭宛?忖憲A 議園鷹01 頁忖憲B 議園鷹010 議念弸何蛍?宸劔斤噐旗鷹堪0101001?屡頁AAC 議旗鷹?匆頁ABD 才BDA 議旗鷹?咀緩?宸劔議園鷹音嬬隠屬咎鷹議率匯來?厘断各岻葎醤嗤屈吶來議咎鷹。
隼遇?寡喘込健凧峯序佩園鷹?夸音氏恢伏貧峰屈吶來諒籾。咀葎?壓込健凧峯嶄?耽倖忖憲潤泣脅頁匐潤泣?万断音辛嬬壓功潤泣欺凪万忖憲潤泣議揃抄貧?侭參匯倖忖憲議込健凧園鷹音辛嬬頁総匯倖忖憲議込健凧園鷹議念弸?貫遇隠屬阻咎鷹議掲屈吶來。
和中網胎糞孖込健凧園鷹議麻隈。糞孖込健凧園鷹議麻隈辛蛍葎曾寄何蛍?
?1?更夛込健凧峯?
?2?壓込健凧峯貧箔匐潤泣議園鷹。
箔込健凧園鷹?糞嵎貧祥頁壓厮秀羨議込健凧峯嶄?貫匐潤泣蝕兵?冽潤泣議褒牌全囃指曜欺功潤泣?耽指曜匯化?祥恠狛阻込健凧峯議匯倖蛍屶?貫遇誼欺匯了込健凧鷹峙?喇噐匯倖忖憲議込健凧園鷹頁貫功潤泣欺屢哘匐潤泣侭将狛議揃抄貧光蛍屶侭怏撹議0?1 會双?咀緩枠誼欺議蛍屶旗鷹葎侭箔園鷹議詰了鷹?朔誼欺議蛍屶旗鷹葎侭箔園鷹議互了鷹。厘断辛參譜崔匯潤更方怏HuffCode 喘栖贋慧光忖憲議込健凧園鷹佚連?方怏圷殆議潤更泌和?
凪嶄?蛍楚bit 葎匯略方怏?喘栖隠贋忖憲議込健凧園鷹?start 燕幣乎園鷹壓方怏bit嶄議蝕兵了崔。侭參?斤噐及i 倖忖憲?万議込健凧園鷹贋慧壓HuffCode[i].bit 嶄議貫HuffCode[i].start 欺n 議蛍楚貧。
込健凧園鷹麻隈宙峰泌和。
#define MAXBIT 10 /*協吶込健凧園鷹議恷寄海業*/
typedef struct {
int bit[MAXBIT];
int start;
}HCodeType;
void HaffmanCode ( )
{ /*伏撹込健凧園鷹*/
HNodeType HuffNode[MAXNODE];
HCodeType HuffCode[MAXLEAF],cd;
int i,j, c,p;
HuffmanTree (HuffNode ); /*秀羨込健凧峯*/
for (i=0;i<n;i++) /*箔耽倖匐徨潤泣議込健凧園鷹*/
{ cd.start=n-1; c=i;
p=HuffNode[c].parent;
while(p!=0) /*喇匐潤泣?貧岷欺峯功*/
{ if (HuffNode[p].lchild==c) cd.bit[cd.start]=0;
else cd.bit[cd.start]=1;
cd.start--; c=p;
p=HuffNode[c].parent;
}
for (j=cd.start+1;j<n;j++) /*隠贋箔竃議耽倖匐潤泣議込健凧園鷹才園鷹議軟兵了*/
HuffCode[i].bit[j]=cd.bit[j];
HuffCode[i].start=cd.start;
}
for (i=0;i<n;i++) /*補竃耽倖匐徨潤泣議込健凧園鷹*/
{ for (j=HuffCode[i].start+1;j<n;j++)
printf(“%ld”,HuffCode[i].bit[j]);
printf(“\n”);
}
}
麻隈6.26
3?込健凧峯壓登協諒籾嶄議哘喘
箭泌?勣園崙匯倖繍為蛍崙廬算葎励雫蛍崙議殻會。?堡撮?乏茂鮑楴魑ィv子Ď虵談?鱐鐓箟秧浜螻鼻H脾?
if (a<60) b=”bad”;
else if (a<70) b=”pass”
else if (a<80) b=”general”
else if (a<90) b=”good”
else b=”excellent”;
宸倖登協狛殻辛參夕6.19 (a)侭幣議登協峯栖燕幣。泌惚貧峰殻會俶郡鹸聞喘?遇拝耽肝議補秘楚載寄?夸哘深打貧峰殻會議嵎楚諒籾?軸凪荷恬侭俶勣議扮寂。咀葎壓糞縞嶄?僥伏議撹示壓励倖吉雫貧議蛍下頁音譲堡議?邪譜凪蛍下号舵泌和燕侭幣? 夸80?參貧議方象俶序佩眉肝賜眉肝參貧議曳熟嘉嬬誼竃潤惚。邪協參5?15?40?30 才10 葎幡更夛匯臣嗤励倖匐徨潤泣議込健凧峯?夸辛誼欺泌夕6.19 (b)侭幣議登協狛殻?万辛聞寄何蛍議方象将狛熟富議曳熟肝方誼竃潤惚。徽喇噐耽倖登協崇脅嗤曾肝曳熟?繍宸曾肝曳熟蛍蝕?誼欺泌夕6.19 (c)侭幣議登協峯?梓緩登協峯辛亟竃屢哘議殻會。邪譜嗤10000 倖補秘方象?飛梓夕6.19 (a)議登協狛殻序佩荷恬?夸悳慌俶序佩31500 肝曳熟?遇飛梓夕6.19 (c)議登協狛殻序佩荷恬?夸悳慌叙俶序佩22000 肝曳熟。