- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 基于字典编码的数据压缩算法的设计与实现 答辩人: 指导教师: * * 数据压缩的提出 信息的时代 解决方法 提高硬件的制造工艺 数据压缩 数据压缩 在一定的数据存储空间要求下,将相对庞大的原始数据,重组为满足前述空间要求的数据集合,使得从该数据集合中恢复出来的信息,能够与原始数据相一致,或者能够获得与原始数据一样的使用品质。 * * 数据压缩理论基础 信息论 熵的提出 一条信息中真正需要编码的信息量 用 0 和 1 组成的二进制数码为含有 n 个符号的某条信息编码,假设符号 Fn 在整条信息中重复出现的概率为 Pn,则该符号的熵也即表示该符号所需的二进制位数为: En = - log2( Pn ) 整条信息的熵也即表示整条信息所需的二进制位数为: E = ∑knEn 信息压缩的极限 * * 数据压缩基本原理 信息存在冗余 用较少的位数表示较频繁出现的符号 技术构成 模型 得到字符或单词在信息中出现的概率 编码 精确地用模型计算出来的位数表示某个符号 压缩 = 模型 + 编码 * * 字典编码基本思想 数据本身包含有重复代码 根据字典创建方式不同分为两类: 隐式字典 查找正在压缩的字符序列是否在以前输入的数据中出现过,然后用已经出现过的字符串替代重复的部分,它的输出仅仅是指向早期出现过的字符串的“指针” 显式字典 从输入的数据中创建一个“短语字典”,编码数据过程中当遇到已经在字典中出现的“短语”时,编码器就输出这个字典中的短语的“索引号” * * 基于字典压缩算法简介 隐式字典 LZ77 LZSS 显示字典 LZ78 LZW * * 算法实现与改进 借鉴LZW for GIF 实现起来较容易 实现方法的改进 使用面向对象编程技术 技术的“改进” 零搜索 动态编码长度 * * 实现技术的选择 Delphi Object Pascal语言 面向对象的开发工具,完全可视化 方便快捷RAD工具 * * 实现简介 以类的形式实现 编码类 解码类 使用 生成对象 主要流程 GetBegin Execute GetEnd * * 类的定义 TLZWEncode = class(TObject) private EncodeTable: array [0..LZWTABLESIZE - 1] of Word; // 编码表 EncodePointer: array [0..LZWMAXCODES - 1] of LongWord; // 经过编码的缓存 ExportBlock: Pointer; // 存放编码后的数据指针(输出缓存块指针) ExportBlockPtr: array of Byte; // 该指针指向 ExportBlock ,用于访问数组 InitBits: Integer; // 压缩数据的起始位数 ClearCode: Integer; // 清除码 EofCode: Integer; // 结束码 PrefixCode: Integer; // 字头码 SuffixCode: Integer; // 字尾码 Encode: Integer; // 压缩编码 RunBits: Integer; // 当前处理位 MaxCodeSize: Integer; // 当前处理最大编码 FBegin: Boolean; // 开始处理标志 FExportSize: Integer; // 输出数据块大小 FExportIndex: Integer; // 输出数据块索引 FExportTotalSize: Integer; // 记录输出缓存块大小 ShiftBits: Integer; // 用于位处理,作临时位 ShiftCode: Integer; // 用于位处理,作临时代码 protected procedure ExportData(AData: Integer); virtual; // 输出数据(虚方法) public function GetExportPointer: Pointer; // 返回输出指针 function GetExportSize: Integer; // 返回输出大小 procedure GetBegin; // 置开始编码标志 procedure GetEnd; // 置结束编码标志
原创力文档


文档评论(0)