CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

关于压缩算法

楼主SharpStar(锋利星空)2003-02-03 21:54:42 在 专题开发/技术/项目 / 数据结构与算法 提问

如何在delphi中实现象winzip,winrar那样的压缩技术?恳请高手指教!!  
  email:         vinvin2003a@yahoo.com.cn 问题点数:0、回复次数:6Top

1 楼fishy(死鱼)回复于 2003-02-04 04:26:47 得分 0

一种比较简单的压缩算法是Huffman   Tree,我曾写过一个代码,前两天被我删了:P  
  我在这里给你描述一下算法吧  
  Huffman   Tree的压缩原理是用不等长代码。用长度短的代码来代表出现频率高的代码,以实现压缩的目的。  
  因为代码不等长,所以需要任何一个代码不能是其他代码的前缀,所以可以通过建立Huffman   Tree来生成Huffman代码。  
  比如要压缩文本:'So   cool!'  
  转换为二进制的Ascii码为:  
  01010011   01101111   00100000   01100011   01101111   01101111   01101100   00100001  
  为64位  
  每个字符出现的次数分别为  
  S:1  
  o:3  
    :1  
  c:1  
  l:1  
  !:1  
  首先将每个字符作为单独的节点:  
  S:1   o:3     :1   c:1   l:1   !:1  
  将出现次数最少的两个节点作为左右子节点建立一二叉树,夫节点出现此书记录为子节点之和,并代替原两子节点放入队列:  
        2     o:3   c:1   l:1   !:1  
      /   \  
  S:1     :1  
  重复此过程,直到队列中只剩一个节点:  
        2               2       o:3   !:1  
      /   \           /   \  
  S:1     :1   c:1   l:1  
   
            3                 2         o:3  
          /   \             /   \  
        2     !:1     c:1   l:1  
      /   \  
  S:1     :1  
   
                    5             o:3  
                  /   \  
            3                 2  
          /   \             /   \  
        2     !:1     c:1   l:1  
      /   \  
  S:1     :1  
   
                            8  
                        /     \  
                    5             o:3  
                  /   \  
            3                 2  
          /   \             /   \  
        2     !:1     c:1   l:1  
      /   \  
  S:1     :1  
   
  然后从根节点开始遍历此二叉树,左子树记为0,右子树记为1,遍历到每个根节点时的串就为根节点的该字符的Huffman码:  
  S:0000  
    :0001  
  !:001  
  c:010  
  l:011  
  0:1  
  于是'So   cool!'用Huffman码表示就为:  
  0000   1   0001   010   1   1   011   001  
  比较两种编码:  
  Ascii     :0101001101101111001000000110001101101111011011110110110000100001(64)  
  Huffman:00001000101011011001(20)  
  达到压缩目的  
  当然,用Huffman编码压缩后需要储存字典Top

2 楼xdspower(杂食菜熊)回复于 2003-02-04 09:10:58 得分 0

你到网络上下一个控件就可以了,或者找一个命令行工具来调用也可以的,这样的工具是十分多的。Top

3 楼oustar(欧文)回复于 2003-02-04 17:19:00 得分 0

算法不是你开发的障碍,关键是你如何定位你的应用!Top

4 楼sgoat(一天到晚游泳的鱼)回复于 2003-02-04 21:37:19 得分 0

不知道winzip用的是什么样的算法Top

5 楼ZhangYv(迎着朝阳,走向地狱)回复于 2003-02-04 21:39:52 得分 0

ZIP的压缩算法应该是公开的吧,找找就是。Top

6 楼seanzh(云剑)回复于 2003-06-16 11:14:31 得分 0

如果要压缩的不仅仅是字母和数字呢,而且重复率不高的话,HUFFMAN编码根本就起不到预期的作用Top

相关问题

  • 压缩算法,急!
  • 求压缩算法
  • 求压缩算法
  • LZSS压缩算法
  • 有关压缩算法
  • 谁有压缩算法?
  • 求lzw压缩算法.
  • 请教jpeg压缩算法
  • 急~~~~~无损压缩算法!!!!
  • 求数据压缩算法!~!!!!!!!!!!!!!!!!!

关键词

  • 节点
  • 算法
  • 代码
  • 字符
  • 编码
  • 压缩
  • huffman
  • tree
  • 出现

得分解答快速导航

  • 帖主:SharpStar

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo