2022年2022年哈夫曼算法压缩和解压字符串 .pdf

上传人:C****o 文档编号:33369342 上传时间:2022-08-10 格式:PDF 页数:9 大小:652.86KB
返回 下载 相关 举报
2022年2022年哈夫曼算法压缩和解压字符串 .pdf_第1页
第1页 / 共9页
2022年2022年哈夫曼算法压缩和解压字符串 .pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《2022年2022年哈夫曼算法压缩和解压字符串 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年哈夫曼算法压缩和解压字符串 .pdf(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、2010-12-02 22:39 原 文件编码 2 用哈夫曼算法压缩和解压字符串#include #include #include /char * chrs = At the highest level of abstraction, there are three basic drawing operations: clearing the window, drawing a geometric object, and drawing a raster object. Raster objects, which include such things as two-dimensional

2、images, bitmaps, and character fonts, are covered in Chapter 8 . In this chapter, you learn how to clear the screen and to draw geometric objects, including points, straight lines, and flat polygons. 0; /char * chrs = kgasdgalfjsladd0; char * chrs = fsskffffaavbbbcscscscs0; int asciiCharsCount128; c

3、har currlCodeChrs9; int charCountSize = 0; long totalUrlLength = 0; long totalUrlOffset = 0; int currlMinValueIndex = -1;/当前最小值的索引char * resultBinString; /二进制字符串long binStringIndex = 0; /二进制字符索引char * resultBytes; /编码后的字节int resultByteSize = 0; /编码后字节的数量typedef struct treeNode /树节点 char nodename; /代

4、表的字符 int nodeFlag; /1:叶节点 ,0: 根节点 int weight; /权值, 字符的频率 char * url; /路径 TreeNode; /= void initCharCount() int i=0; memset(&asciiCharsCount,0,sizeof(asciiCharsCount); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - for(i=0;i(int)(strlen(chr

5、s);i+) int curlChar = (int)(chrsi); asciiCharsCountcurlChar = asciiCharsCountcurlChar + 1; int getMinValue() /查找数量大于 0, 并且最小的索引 int relIndex = -1; int minValue = (int)(strlen(chrs); int i=0; for(i=0;i 0) if(minValue asciiCharsCounti) minValue = asciiCharsCounti; relIndex = i; return relIndex; void b

6、inChrsToByte() int i=0; char hChrs5; char lChrs5; int resultValue = 0 x00; char bTable65 = 00000001001000110100010101100111100010011010101111001101111011110; for(i=0;i4;i+) hChrsi = currlCodeChrsi; lChrsi = currlCodeChrsi+4; hChrs4 = 0; lChrs4 = 0; for(i=0;i16;i+) int j=0; int isEqul = 1; for(j=0;j4

7、;j+) if(hChrsj = bTable(i*4)+j) if(isEqul = 4) /如果四个字符都相同名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - resultValue = i*16; isEqul +; for(i=0;i16;i+) int j=0; int isEqul = 1; for(j=0;j4;j+) if(lChrsj = bTable(i*4)+j) if(isEqul = 4) /如果四个字符

8、都相同 resultValue = resultValue + i; isEqul +; printf( %x ,resultValue); int main() int i=0; int treeNodeIndex = 0; TreeNode * treeNode; initCharCount(); for(i=0;i 0) charCountSize +; printf(-n); printf(开始构建树 :n); /总节点数量 =2n-1 (n 是出现过的字符的数量 ) treeNode = (TreeNode *)malloc(2*charCountSize-1) * sizeof(T

9、reeNode); for(i=0;i(2*charCountSize-1);i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - if(i%2 = 0) if(i=(2*charCountSize-2) /根节点不取最小值 treeNodetreeNodeIndex.nodeFlag = 0; treeNodetreeNodeIndex.weight = (treeNodetreeNodeIndex-2.weight)+(t

10、reeNodetreeNodeIndex-1.weight); printf( 根节点 %d n,i); else int urlChrI = 0; int depth = (charCountSize-i/2-1); char * url; url = (char *)malloc(depth); for(urlChrI=0;urlChrI %s n,url); treeNodetreeNodeIndex.url = url; asciiCharsCountcurrlMinValueIndex = 0; printf( 左节点 索引:%d 权:%d url:%s n,treeNodeInde

11、x,treeNodetreeNodeIndex.weight,treeNodetreeNodeIndex.url); if(i%2 = 1) if(i=1) int urlChrI = 0; int depth = (charCountSize-i/2-1); char * url; url = (char *)malloc(depth); for(urlChrI=0;urlChrI %s n,url); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - -

12、 - - - - - - currlMinValueIndex = getMinValue(); treeNodetreeNodeIndex.nodeFlag = 1; treeNodetreeNodeIndex.nodename = (char)currlMinValueIndex; treeNodetreeNodeIndex.weight = asciiCharsCountcurrlMinValueIndex; treeNodetreeNodeIndex.url = url; asciiCharsCountcurrlMinValueIndex = 0; printf( 右节点 索引:%d

13、权:%d url:%s n,treeNodeIndex,treeNodetreeNodeIndex.weight,treeNodetreeNodeIndex.url); else treeNodetreeNodeIndex.nodeFlag = 0; treeNodetreeNodeIndex.weight = (treeNodetreeNodeIndex-3.weight)+(treeNodetreeNodeIndex-2.weight); printf( 右节点 %dn,i); treeNodeIndex +; /printf(依次取最小频率字符 %c n,currlMinValueInd

14、ex); printf(-n); printf(编码前的字符串 : %s n,chrs); for(i=0;i(int)(strlen(chrs);i+) int j=0; for(j=0;j(2*charCountSize-1);j+) if(chrsi = treeNodej.nodename) /printf(%s ,treeNodej.url); totalUrlLength += strlen(treeNodej.url); /printf(n); resultBinString = (char *)malloc(totalUrlLength); for(i=0;i(int)(str

15、len(chrs);i+) int j=0; for(j=0;j(2*charCountSize-1);j+) if(chrsi = treeNodej.nodename) int k=totalUrlOffset; int urlCharIndex = 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - for(k=totalUrlOffset;k(int)(totalUrlOffset+(strlen(treeNodej.

16、url);k+) resultBinStringk = treeNodej.urlurlCharIndex; urlCharIndex +; totalUrlOffset += strlen(treeNodej.url); resultBinStringtotalUrlLength = 0; printf(编码后的字符串 : %s n,resultBinString); printf(-n); if(strlen(resultBinString)%8 != 0) resultByteSize = (strlen(resultBinString)/8 + 1; else resultByteSi

17、ze = (strlen(resultBinString)/8; resultBytes = (char *)malloc(resultByteSize); printf(压缩后的数据 : ); for(i=0;iresultByteSize;i+) int j=0; for(j=0;j= (long)(strlen(resultBinString) currlCodeChrsj = 0; /printf(%d %c n,j,0); if(binStringIndex (long)(strlen(resultBinString) currlCodeChrsj = resultBinString

18、binStringIndex; /printf(%d %c n,j,resultBinStringbinStringIndex); binStringIndex +; currlCodeChrs8 = 0; binChrsToByte(); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - printf(压缩比例 %d : %d n,strlen(chrs),resultByteSize); /printf(

19、n TotalCount : %d n,(strlen(chrs); printf(-n); /下面开始解码数据 long bingCharIndex = 0; int chrsIndex =0; char * outputDecodeChrs; i=0; outputDecodeChrs = (char *)malloc(strlen(chrs); printf(开始解码数据 n); for(chrsIndex=0;chrsIndex(int)strlen(chrs);chrsIndex+) int j=0; for(j=0;j(int)(2*charCountSize-1);j+) if(

20、treeNodej.nodeFlag = 1) int k=0; int chrEqulCount = 1; for(k=0;k(int)strlen(treeNodej.url);k+) if(treeNodej.urlk = resultBinStringbingCharIndex+k) if(chrEqulCount = (int)strlen(treeNodej.url) printf( 解码字符 : %c %s n,treeNodej.nodename,treeNodej.url); outputDecodeChrsi = treeNodej.nodename; bingCharIn

21、dex = bingCharIndex + (int)strlen(treeNodej.url); i+; chrEqulCount +; outputDecodeChrsstrlen(chrs) = 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - /strlen(chrs); /有 strlen(chrs)个 url printf(解码后的字符串 : %s n,outputDecodeChrs); printf(-n); return 0; 运行效果 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com