丁香婷婷网,黄色av网站裸体无码www,亚洲午夜无码精品一级毛片,国产一区二区免费播放

現(xiàn)在位置:范文先生網(wǎng)>理工論文>計(jì)算機(jī)論文>動(dòng)態(tài)哈夫曼編碼的改進(jìn)

動(dòng)態(tài)哈夫曼編碼的改進(jìn)

時(shí)間:2023-02-20 22:50:56 計(jì)算機(jī)論文 我要投稿
  • 相關(guān)推薦

動(dòng)態(tài)哈夫曼編碼的改進(jìn)

  《計(jì)算機(jī)世界月刊》1994年7月號(hào)所登載的《動(dòng)態(tài)哈夫曼編碼的數(shù)據(jù)壓縮方法》一文給出了一種實(shí)時(shí)性較強(qiáng)的數(shù)據(jù)壓縮方法,該方法的最大特點(diǎn)是不需預(yù)先對(duì)原始數(shù)據(jù)進(jìn)行一遍掃描以建立哈夫曼樹,而改為以動(dòng)態(tài)變化的哈夫曼樹對(duì)數(shù)據(jù)編碼。
該文所附的動(dòng)態(tài)哈夫曼編碼數(shù)據(jù)壓縮與解壓源程序中的UpDate函數(shù)是動(dòng)態(tài)修改哈夫曼樹的關(guān)鍵部分,該函數(shù)對(duì)動(dòng)態(tài)哈夫曼樹的一種可能情況無法正確修改,針對(duì)這一點(diǎn),本文附上對(duì)該函數(shù)的一個(gè)修正定義,以使該壓縮與解壓程序更加完善。
以下就舉例說明原UpDate函數(shù)無法正確修改的一種哈夫曼樹。例如若要壓縮“TThhis”字符串,則在壓縮完“TTh”之后的動(dòng)態(tài)哈夫曼樹為圖所示(設(shè)根結(jié)點(diǎn)序號(hào)為1000):
@@04A07700.GIF;圖 壓縮完“TTh”之后的動(dòng)態(tài)哈夫曼樹@@
此時(shí)若再將字符h進(jìn)行壓縮編碼,則在輸出h的編碼“01”后需調(diào)整哈夫曼樹,以997號(hào)葉結(jié)點(diǎn)為當(dāng)前結(jié)點(diǎn),則與當(dāng)前結(jié)點(diǎn)具有同樣重量的且序號(hào)最大的結(jié)點(diǎn)為998號(hào)結(jié)點(diǎn),而該結(jié)點(diǎn)是997號(hào)結(jié)點(diǎn)的父結(jié)點(diǎn),對(duì)二者按原文所提供的UpDate函數(shù)進(jìn)行交換,則將導(dǎo)致998號(hào)結(jié)點(diǎn)變成葉結(jié)點(diǎn),996號(hào)結(jié)點(diǎn)變成997號(hào)結(jié)點(diǎn)的左孩子,997號(hào)結(jié)點(diǎn)則既為自己的父結(jié)點(diǎn)又是自己的右孩子,這樣在對(duì)后繼字符i進(jìn)行壓縮編碼時(shí),首先就無法輸出996號(hào)空結(jié)點(diǎn)的編碼了,此時(shí)壓縮程序陷入死循環(huán)。
顯然這時(shí)可以簡(jiǎn)單地將998和997號(hào)結(jié)點(diǎn)的重量加1,然后以998號(hào)結(jié)點(diǎn)的父結(jié)點(diǎn)為當(dāng)前結(jié)點(diǎn)進(jìn)行調(diào)整,根據(jù)這種思想對(duì)原文提供的UpDate函數(shù)進(jìn)行修正所得新的UpDate函數(shù)附后。
void UpDate(struct Node *Temp)
{
struct Node * Tempa, * Tempc, * Pointer;
struct LeafNode *p,*q,*b;
unsigned char Letter;
while(Temp!=Root)
{
if(Temp->Weight)
{
P=Weight;
while(p->Next->CharNode->Weight !=Temp->Weight)
p=p->Next;
if(Temp->Front!=NULL)
{
Tempa=Temp;
while(Temp->Front !=NULL)
Temp=Temp->Front;
if(Temp==Tempa->Parent)
{
Tempa->Weight++;
Tempa->After=Tempa->Front=NULL;
Temp->After=NULL;
InsertWeight(Tempa);
}
else
{
Pointer=Temp->LeftChild;
if(Pointer !=NULL)
Pointer->Parent=Tempa;
Temp->LeftChild=Tempa->LeftChild;
if(Temp->LeftChild !=NULL)
Temp->LeftChild->Parent=Temp;
Tempa->LeftChild=Pointer;
Pointer=Temp->RightChild;
if(Pointer !=NULL)
Pointer->Parent=Tempa;
Temp->RightChild=Tempa->RightChild;
if(Temp->RightChild !=NULL)
Temp->RightChild->Parent=Temp;
Tempa->RightChild=Pointer;
Letter=Temp->Letter;
Temp->Letter=Tempa->Letter;
Tempa->Letter=Letter;
if((Tempa->LeftChild==NULL)&&(Tempa->RightChild==NULL)
{
b=leaf;
while(b!=NULL)
{
if(b->CharNode==Temp)
{
b->CharNode=Tempa;
break;
}
else b=b->Next;
}
}
if((Temp->LeftChild==NULL)&&(Temp->RightChild++NULL))
{
b=Leaf;
while(b!=NULL)
{
if(b->CharNode==Tempa)
{
b->CharNode=Temp;
break;
}
else b=b->Next;
}
}
}
}
p->Next->CharNode=Temp->After;
if(Temp->After==NULL)
{
q=p->Next;
p->Next=q->Next;
free(q);
}
else Temp->After->Front=NULL;
}
Temp->Weight++;
Temp->After=Temp->Front=NULL;
InsertWeight(Temp);
Temp=Temp->Parent;
}
}


【動(dòng)態(tài)哈夫曼編碼的改進(jìn)】相關(guān)文章:

漢字的動(dòng)態(tài)編碼與顯示方案08-06

LHARC中的動(dòng)態(tài)限長(zhǎng)編碼壓縮算法08-06

針對(duì)硬件實(shí)現(xiàn)的H.264視頻編碼算法改進(jìn)08-06

嵌入式零樹小波編碼及其改進(jìn)算法的研究08-06

動(dòng)態(tài)的歷史與動(dòng)態(tài)的歷史教學(xué)08-07

Video Object編碼技術(shù)08-06

視音頻素材的編碼轉(zhuǎn)換08-06

《數(shù)字編碼》教學(xué)反思04-28

曼巴精神作文12-20