`
niyayu
  • 浏览: 34136 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

哈弗曼编码

 
阅读更多
#include<iostream>

#define MAX 1001
#define INF 999999

struct stuNode
{
int nLeftTree;
int nRightTree;
int nPd;
};

struct stuNo12
{
int No1;
int No2;
};

void vInput(int nArr[], int nN);
void vBuildTree(stuNode stuJD[],int nArr[],int nN);
stuNo12 getTwo(bool bUse[],int nArr[],int nN);
void vGetCode(stuNode str[],int nLength[],int nNode,int nDepth);
void vOut(int nArr[],int nLength[],int nN);

int main()
{
int nNum;
int nLe[2*MAX];
int nArrPD[2*MAX];
stuNode stuJD[2*MAX];

while(1==(scanf("%d",&nNum)))
{
vInput(nArrPD,nNum);
memset(stuJD,0,sizeof(stuJD));
vBuildTree(stuJD,nArrPD,nNum);
vGetCode(stuJD,nLe,2*nNum-1,0);
vOut(nArrPD,nLe,nNum);
}
return 0;
}

void vInput(int nArrPD[], int nN)
{
int i;

for(i=1;i<=nN;i++)
{
scanf("%d",&nArrPD[i]);
}
}

void vBuildTree(stuNode stuJD[],int nArr[],int nN)
{
int i;
int nCount;
bool bUse[2*MAX];
stuNo12 stuTwo;

for(i=1;i<=nN;i++)
{
bUse[i]=true;
bUse[i+nN]=false;
}

nCount=nN;
while(nCount<2*nN-1)
{
stuTwo=getTwo(bUse,nArr,nCount);
nCount++;
bUse[stuTwo.No1]=false;
bUse[stuTwo.No2]=false;
bUse[nCount]=true;
stuJD[nCount].nLeftTree=stuTwo.No1;
stuJD[nCount].nRightTree=stuTwo.No2;
nArr[nCount]=nArr[stuTwo.No1]+nArr[stuTwo.No2];
stuJD[nCount].nPd=nArr[nCount];
}
}

stuNo12 getTwo(bool bUse[],int nArr[],int nN)
{
int i;
int nTemp1;
int nTemp2;
stuNo12 stuRet;

nTemp1=INF;
nTemp2=INF;
stuRet.No1=1;
stuRet.No2=1;
for(i=1;i<=nN;i++)
{
if(bUse[i])
{
if(nTemp1>nArr[i])
{
nTemp2=nTemp1;
stuRet.No2=stuRet.No1;
nTemp1=nArr[i];
stuRet.No1=i;
}
else
{
if(nTemp2>nArr[i])
{
nTemp2=nArr[i];
stuRet.No2=i;
}
}
}
}

return stuRet;
}

void vGetCode(stuNode str[],int nLenth[],int nNode,int nDepth)
{
int nL,nR;

nL=str[nNode].nLeftTree;
if(nL!=0)
{
vGetCode(str,nLenth,nL,nDepth+1);
}
else
{
nLenth[nNode]=nDepth;
return;
}
nR=str[nNode].nRightTree;
if(nR!=0)
{
vGetCode(str,nLenth,nR,nDepth+1);
}
else
{
nLenth[nNode]=nDepth;
return;
}
}

void vOut(int nArr[],int nLength[],int nN)
{
int nAns;
int i;

nAns=0;
for(i=1;i<=nN;i++)
{
nAns+=nLength[i]*nArr[i];
}
printf("%d\n",nAns);
}














分享到:
评论

相关推荐

    哈弗曼编码与译码,哈弗曼编码与译码

    哈弗曼编码是一种高效的数据压缩方法,主要用于无损数据压缩,由哈弗曼在1952年提出。它的核心思想是通过构建最优的二叉树(哈弗曼树)来为每个输入符号分配最短的唯一二进制编码,使得最频繁出现的符号拥有最短的...

    哈弗曼编码 压缩 解压 文件

    哈弗曼编码是一种高效的数据压缩方法,它基于字符出现频率构建最优前缀编码。在信息传输和存储中,哈弗曼编码能显著减少数据量,提高传输效率。本项目是针对数据结构实习编写的,目的是让学生理解并实现哈弗曼编码的...

    哈弗曼编码的实现过程

    哈弗曼编码是一种高效的数据压缩方法,主要用于无损数据压缩,尤其在文本、图像和音频文件的压缩中广泛应用。它的核心思想是通过构建一棵特殊的二叉树——哈弗曼树(也称为最优二叉树),为每个字符或符号分配一个...

    哈弗曼编码的编码解码

    哈弗曼编码是一种高效的数据压缩方法,由美国学者大卫·哈弗曼于1952年提出,广泛应用于数据通信、文件压缩等领域。其核心思想是利用最优的二叉树结构,为每个字符分配最短的唯一二进制编码,使得频繁出现的字符拥有...

    哈弗曼编码与解码实验报告

    哈弗曼编码是一种高效的数据压缩方法,其基本思想是通过构建一棵特殊的二叉树(哈弗曼树)来为每个字符分配唯一的二进制编码,使得频繁出现的字符具有较短的编码,从而提高编码效率。哈弗曼编码的过程包括以下几个...

    哈弗曼编码译码c++代码

    哈弗曼编码(Huffman Coding)是一种用于数据压缩的高效算法,由大卫·艾尔文·哈弗曼在1952年提出。它利用了字符出现频率的不均匀性,构建了一棵特殊的二叉树——哈弗曼树,使得出现频率高的字符具有较短的编码,而...

    哈弗曼编码/译码器

    哈弗曼编码是一种高效的数据压缩方法,由美国计算机科学家戴维·艾伦·哈弗曼在1952年提出。这种编码方式是基于一种特殊的二叉树结构——哈弗曼树(又称最优二叉树),它通过构建一棵权值(频率)最小的二叉树来实现...

    VC++中哈弗曼编码实现

    哈弗曼编码是一种高效的数据压缩方法,主要用于无损数据压缩,由哈弗曼在1952年提出。它的核心思想是构建一棵特殊的二叉树,即哈弗曼树,其中每个叶节点代表一个需要编码的字符,而内部节点则表示路径。字符出现频率...

    哈弗曼编码译码(C++实现,源码+可执行程序+实验报告)

    哈弗曼编码是一种高效的数据压缩方法,由美国学者大卫·哈弗曼在1952年提出。这种编码方式利用了字符出现频率的不同,构建出一棵特殊的二叉树——哈弗曼树,使得频率高的字符拥有较短的编码,频率低的字符编码较长,...

    哈弗曼编码与解码

    ### 哈弗曼编码与解码 哈弗曼编码是一种广泛应用在计算机科学中的编码方式,主要用于数据压缩。它基于二叉树结构实现,并利用字符出现的频率来构造一棵特殊的二叉树——哈弗曼树(又称最优二叉树)。在本篇内容中,...

    用哈弗曼编码对文件进行压缩与解压

    ### 哈弗曼编码对文件进行压缩与解压 #### 概述 哈弗曼编码(Huffman Coding)是一种广泛应用于数据压缩领域的算法。它通过构建一棵特殊的二叉树——哈弗曼树来实现对数据的有效编码。该文探讨了如何使用静态...

    哈弗曼编码(C语言)

    哈弗曼编码(C语言) 哈弗曼编码是一种变长前缀编码,用于无损数据压缩。该编码方法利用了字符出现频率的差异,高频字符使用短码,而低频字符使用长码。哈弗曼树是哈弗曼编码的核心结构,通过构建哈弗曼树,可以...

    哈弗曼编码算法源代码

    哈弗曼编码是一种高效的数据压缩方法,主要用于无损数据压缩。它是基于频率的变字长编码方式,由美国计算机科学家戴维·哈弗曼在1952年提出。哈弗曼编码的基本思想是通过构建一棵特殊的二叉树——哈弗曼树(也称为...

    数据结构 哈弗曼编码

    【哈弗曼编码】是一种高效的前缀编码方法,主要用于数据压缩。它的基本思想是通过构建一棵特殊的二叉树(哈弗曼树)来为每个字符或符号分配唯一的二进制编码,使得出现频率高的字符拥有较短的编码,而出现频率低的...

    哈弗曼编码及实现设计报告

    哈弗曼编码是一种高效的数据压缩方法,主要用于减少数据传输或存储时的位数。它基于一种特殊的二叉树——哈弗曼树(也称为最优二叉树),通过为每个字符分配唯一的二进制前缀编码,使得频繁出现的字符拥有较短的编码...

    基于哈弗曼编码的二叉树编码的mfc实现

    哈弗曼编码是一种高效的数据压缩方法,通过构建一棵特殊的二叉树——哈弗曼树(Huffman Tree),来为每个字符或符号分配一个唯一的前缀编码。这种编码方式确保了在解码时不会出现歧义,因为没有两个不同的字符具有...

    数据结构--哈弗曼编码实验报告

    ### 数据结构——哈弗曼编码实验报告知识点梳理 #### 实验背景与目标 - **实验题目**:使用哈弗曼编码实现文件压缩。 - **实验目的**: 1. 理解文件的基本概念。 2. 掌握线性链表的基本操作,包括插入、删除等...

    哈弗曼编码数据结构课程设计

    哈弗曼编码是一种高效的数据压缩方法,源自于数据结构中的树形结构——哈弗曼树(Huffman Tree),常用于文本、图像等数据的无损压缩。在本课程设计中,我们将深入理解哈弗曼编码的基本原理,并使用C++语言实现一个...

    哈弗曼编码问题的解决

    哈弗曼编码是一种高效的数据压缩方法,由美国计算机科学家大卫·艾伦·哈弗曼在1952年提出。这种编码方式通过构建一棵特殊的二叉树——哈弗曼树,来为每个输入符号(通常是字符)分配一个唯一的二进制编码。在哈弗曼...

    基于M进制哈弗曼编码解码程序

    哈弗曼编码是一种高效的数据压缩方法,由哈弗曼在1952年提出,它利用了字符出现频率的不同来构建最优的前缀编码。在经典的二进制哈弗曼编码中,频率高的字符通常拥有较短的编码,而频率低的字符编码较长,这样可以...

Global site tag (gtag.js) - Google Analytics