“数据压缩实验之LZW 编解码算法实现与分析”实验报告_201810413045_陈诚

2023-11-11

1.实验项目名称

LZW 编解码算法实现与分析

2.实验目的

掌握词典编码的基本原理,用C/C++/Python等语言编程实现LZW解码器并分析编解码算
法。

3.什么是LZW编解码算法与它的原理

3.1 LZW编解码算法介绍

摘自维基百科:

LZW算法(Lempel-Ziv-Welch),是以色列科学家亚伯拉罕·蓝波(Lempel)、杰可布·立夫(Ziv)与美国学者泰瑞·卫曲(Welch)共同提出的一种无损数据压缩算法。它在1984年由泰瑞·卫曲改良亚伯拉罕·蓝与杰可布·立夫在1978年发表的LZ78的版本而来(主要是基于Lampel、Ziv的压缩概念,设计出一套具有可逆推的逻辑程序)。

3.2 LZW编解码算法原理

3.2.1 编码流程图及为了便于理解和期末复习举实例说明

在这里插入图片描述
假如要给“abbababac”编码,初始化词典如下:
在这里插入图片描述
第一步,P=空,C=“a”,P+C=“a”,经判断“a”在词典中,所以P=“a”,接着C=“b”,P+C=“ab”,经判断“ab”不在词典中,所以输出,把“ab”写入词典里,然后P=“b”,读下一个字符“b”并令C=“b”…以此类推,当编到P=“a”,C="b"时,如图,词典里已经有了“ab”:
在这里插入图片描述
所以经判断后P=“ab”,读下一个字符“a”,P+C就为“aba”,经判断就把“aba”写到词典里,之后P=“a”,读下一个字符“b”,P+C就为“ab”,经判断后P=“ab”,读下一个字符C=“a”,经判断后P=“aba”,C=“c”,经判断就把“abac”写到词典里
在这里插入图片描述

3.2.2 解码流程图及举实例说明(重点说明当前码字在词典中不存在的情形)

在这里插入图片描述
假如要给“97 98 98 256 259 99”解码,初始化词典如下:
在这里插入图片描述
第一次循环CW=“97”,输出“a”到码字流中后令PW=“97”,CW=“98”,经判断string.CW(此处即为“b”)在词典中,所以输出“b”,之后P=“a”,C=“b”,把P+C=“ab”写到词典中,第二次循环PW=“98”,CW=“98”,经判断string.CW(此处即为“b”)在词典中,所以输出“b”,之后P=“b”,C=“b”,把P+C=“bb”写到词典中,第三次循环执行PW=“98”,CW=“256”时,词典如下:
在这里插入图片描述
经判断输出“ab”,之后P=“b”,C=“a”(取“ab”的第一个字符),把P+C=“ba”写到词典中:
在这里插入图片描述
第四次循环PW=“256”,CW=“259”,经判断经判断string.CW不在词典中,所以P=“ab”,此时按照流程图,应该取字典里序号为259对应字符的第一个字符,但是字典里序号为259的String是空的,怎么办?
按照老师的解释,这是由于在编码时,新的“P+C”刚被创建,下一个“P”就需要使用它造成的,新创建的“P+C”的尾缀是新创建的“P+C”的首字符“,所以序号为259的String为“aba”,输出“aba”

在这里插入图片描述
第五次循环PW=“259”,CW=“99”,经判断string.cw在词典中,所以输出“c”,然后全部解码结束。

4.用C语言实现该算法

4.1 实验关键代码及其注释

bitio.c:


BITFILE *OpenBitFileInput( char *filename){
   //打开要读入的文件
	BITFILE *bf;
	bf = (BITFILE *)malloc( sizeof(BITFILE));
	if( NULL == bf) return NULL;
	if( NULL == filename)	bf->fp = stdin;
	else bf->fp = fopen( filename, "rb");
	if( NULL == bf->fp) return NULL;
	bf->mask = 0x80;
	bf->rack = 0;
	return bf;
}

BITFILE *OpenBitFileOutput( char *filename){
   //创建要写出的文件
	BITFILE *bf;
	bf = (BITFILE *)malloc( sizeof(BITFILE));
	if( NULL == bf) return NULL;
	if( NULL == filename)	bf->fp = stdout;
	else bf->fp = fopen( filename, "wb");
	if( NULL == bf->fp) return NULL;
	bf->mask = 0x80;
	bf->rack = 0;
	return bf;
}

void CloseBitFileInput( BITFILE *bf){
   //关闭读入文件比特流
	fclose( bf->fp);
	free( bf);
}

void CloseBitFileOutput( BITFILE *bf){
   //输出剩余比特数据后关闭比特流
	if( 0x80 != bf->mask) fputc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“数据压缩实验之LZW 编解码算法实现与分析”实验报告_201810413045_陈诚 的相关文章

  • 合肥工业大学编译原理实验三 LR(1)分析法

    前言 刚开始的时候觉得这个东西不好写 估计花的时间比前一个LL1更长 但后来转念一想 UI可以挪用上次的 改个标题 换点控件 换个总控程序不就可以了吗 剩下的问题就是用python的哪个数据结构来表示和存储LR文法的一些东西 比如项目怎么表
  • 合肥工业大学编译原理实验二 LL1分析

    写在开头 当老师说这个实验最好写成图形界面时 我笑了 滑稽 心想终于可以用到python了 python真香 用python的数据结构可以很方便的表示LL1的某些东西 当然有利也有弊 方便的同时也会有一些坑 当然Java也牛逼 Java的图
  • 《深入理解计算机系统》怎样学?个人看法和资源分享

    前言 我与 深入理解计算机系统 有三次接触吧 真有缘 第一次 在我读专科大二的时候 自己就看过一遍 深入理解计算机系统 想想就是放寒假前看完的 和现在的时间也差不了多少 第二次 在专科大三下学期又重新重头看起了本书 其主要原因为第一遍看的比
  • 实验 :OSPF综合应用场景

    R1 interface GigabitEthernet0 0 0 ip address 12 1 1 1 255 255 255 0 interface GigabitEthernet0 0 1 interface GigabitEthe
  • Spark Streaming(组件、updateStateByKey、Windows)总结

    Spark Streaming 1 SparkStreaming 是什么 2 实时计算框架对比 3 Spark Streaming组件 4 Spark Streaming 编码实战 无状态 4 1 Spark Streaming编码步骤 4
  • AutoSAR系列讲解(实践篇)7.7-实验:配置SWC&RTE(下)

    AutoSAR系列讲解 实践篇 7 7 实验 配置SWC RTE 下 实验 配置SWC RTE 下 三 步骤二 配置Runnable及其Tasks映射 1 添加及配置Runnable 2 打开Cfg并同步工程 3 导入DBC文件 4 创建T
  • 【管理篇 / 配置】❀ 06. 日志与监控 ❀ FortiGate 防火墙

    简介 在这个实验里 你将在FortiGate飞塔防火墙本地配置日志设置 配置警告邮件和显示日志 在防火墙上配置日志 为了记录网络活动 你必须在FortiGate配置日志 在这人练习里 你将配置日志设置 包括威胁权重以及在防火墙启用日志 使用
  • 【跑实验01】TypeError: ‘function‘ object is not subscriptable

    在运行实验的过程中 遇到了一个问题 Traceback most recent call last File get cropped val images py line 86 in
  • 【计算机网络】实验五 UDP

    Objective To look at the details of UDP User Datagram Protocol UDP is a transport protocol used throughout the Internet
  • 【管理篇 / 配置】❀ 02. 常用设置 ❀ FortiGate 防火墙

    简介 这个实验提供FortiGate飞塔防火墙命令及图形管理入门 此外 这个实验将指导你怎样正确的备份和恢复一个配置文件 建立一个新的管理员帐号和改变管理员访问权限 工作在命令行界面 你可以使用命令行界面 CLI 访问一台FortiGate
  • shell练习2

    要求 1 取出 etc inittab文件的第6行 2 取出当前系统上所有用户的shell 要求 每种shell只显示一次 并且按顺序进行显示 使用cut sort结合管道实现 3 如果 var log messages文件的行数大于100
  • 如何更改conda环境位置

    参考Anaconda 安装及修改环境默认位置 把环境从C盘移动到D盘 首先 D conda envs是我的目标文件夹路径 在conda中输入命令 torch 04seaFusion D pythonProjects paper06 yolo
  • EMOTIVE EPOC和EPOC + 快速入门指南

    EMOTIVE EPOC AND EPOC Quick Start Guide EMOTIVE EPOC和EPOC 快速入门指南 1 charge your headset Set your headset to off position
  • 操作系统-在分页式管理方式下采用位示图来表示主存分配情况,实现主存空间的分配和回收。

    实验六 一 实验题目 在分页式管理方式下采用位示图来表示主存分配情况 实现主存空间的分配和回收 二 实验内容 1 分页式存储器把主存分成大小相等的若干块 作业的信息也按块的大小分页 作业装入主存时可把作业的信息按页分散存放在主存的空闲块中
  • 合肥工业大学数值分析(计算方法)满分实验代码(python实现)

    用到的库 所有实验一共用到了numpy matplotlib pandas这几个常用的科学计算库 以及内置的数学库 正文开始 所有代码如下图 链接在文末 实验一 实验一的第一个实验主要是比较三种差值方法的差异 书上的差不多忘完了 直接上运行
  • “数据压缩实验之LZW 编解码算法实现与分析”实验报告_201810413045_陈诚

    文章目录 1 实验项目名称 2 实验目的 3 什么是LZW编解码算法与它的原理 3 1 LZW编解码算法介绍 3 2 LZW编解码算法原理 3 2 1 编码流程图及为了便于理解和期末复习举实例说明 3 2 2 解码流程图及举实例说明 重点说
  • shell第3次练习

    要求 1 ping主机测试 2 判断一个用户是否存在 3 判断当前内核主版本是否为3 且次版本是否大于10 4 判断vsftpd软件包是否安装 如果没有则自动安装 5 判断httpd是否运行 6 判断指定的主机是否能ping通 必须使用 1
  • 合肥工业大学 汇编语言程序设计 高分实验代码

    感觉最困难的就是写汇编代码了 当时成功完美运行的时候兴奋的像当年第一次 Hello World 一样 且几乎所有关键之处都有注释 需要的朋友自取 链接 https pan baidu com s 1q4nVJ7aK4JEPQ F6PH45R
  • 【图像压缩】QOI图像格式详解

    最近听说一种图像格式比较流行 想起我曾经是做图像压缩的emmmm 就来研究一下 QOI Quite OK Image Format 很好的图像格式 git链接 能快速地无损压缩图像 原理也非常简单 没有各种变换 直接空域处理 而无损压缩 自
  • 数据压缩实验之 H.264编解码实验

    文章目录 1 将两个 264文件进行解码 得到相应的YUV文件 2 将上述两个视频序列编码为 264文件 2 1 固定码率 以不同的GOP长度及形状编码 2 1 1 GOP 15 2B帧 2 1 2 GOP 12 2B帧 2 1 3 GOP

随机推荐

  • 05-JVM内存分配机制深度剖析

    上一篇 04 JVM对象创建深度剖析 1 对象栈上分配 我们通过JVM内存分配可以知道JAVA中的对象都是在堆上进行分配 当对象没有被引用的时候 需要依靠GC进行回收内存 如果对象数量较多的时候 会给GC带来较大压力 也间接影响了应用的性能
  • react入门必看攻略

    一 react是什么 react是一个用于构建用户界面的 JavaScript 库 二 使用步骤 安装react 1 安装脚手架 npm i create react app g 2 创建项目 create react app 项目名 3
  • JavaScript 全局

    解释 JavaScript 全局属性和方法可用于创建Javascript对象 JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值 NaN 指示某个值是不是数字值 undefined 指示未定义的值 JavaS
  • 宝塔面板解决跨域

    1 找到宝塔面板配置nginx文件的地方 2 增加如下代码 add header Access Control Allow Origin add header Access Control Allow Methods POST PUT GE
  • 使用git查看修改记录

    查看文件中每行代码的最近一次修改人 git blame file name git blame
  • 判断能否被3,5,7整除

    输入一个整数 判断它能否被3 5 7整除 并输出以下信息 1 能同时被3 5 7整除 直接输出3 5 7 每个数中间一个空格 2 能被其中两个数整除 输出两个数 小的在前 大的在后 例如 3 5或者 3 7或者5 7 中间用空格分隔 3 能
  • 简单的Arima模型自动最优拟合与预测

    昨天用R折腾了一个简单的时间序列数据Arima自动拟合与预测 过程不复杂 但由于用得不多 为了防止忘记 撰文记录 打开R 安装一个叫做 Forecast 的包 每次开启R后 使用之前用 library forecast 加载该包 这里我用传
  • pickle.load,pickle.dump构建Coco数据集labels的pickle文件

    1 效果图 write pickle coco classes pickle done loading coco classes pickle person bicycle car motorcycle airplane bus train
  • OSI七层模型,报文数据包帧详解,tcp三次握手与四次挥手说明,WireShark抓包分析

    目录 浅谈OSI参考模型 七层模型 什么是OSI参考模型 OSI参考模型的划分 OSI模型与TCP IP模型的比较 七层详解 工作流程 TCP IP协议栈 简介 通用协议栈描述 报文 数据报 报文段 数据包 帧的概念 tcp三次握手与四次挥
  • Callable接口详解

    Callable接口详解 Callable 返回结果并且可能抛出异常的任务 优点 可以获得任务执行返回值 通过与Future的结合 可以实现利用Future来跟踪异步计算的结果 Runnable和Callable的区别 1 Callable
  • pg_dump实例详解

    本文转自 http blog chinaunix net uid 354915 id 3504632 html 一 pg dump的用法 数据库的导入导出是最常用的功能之一 每种数据库都提供有这方面的工具 例如Oracle的exp imp
  • 密封类(sealed class)

    密封类 使用关键字 sealed 密封类里面可以有若干个子类 这些子类如果要继承密封类 则必须和密封类在同一个文件里 sealed class LicenseStatus2 单例继承密封类 object UnQualified Licens
  • 转-如何绘制业务流程图(二)

    转自 http blog jobbole com 22509 本来写完上篇 我发现没有太多必要单纯讨论这一部分内容 因为对于很多人来讲 缺的不是具体的做法 而是做这件事情的意义以及目标性的明确 一旦对这件事情的意义和目标有深刻认同 那自然会
  • JavaScript 扁平化数组转成Tree

    有时候我们得到的数据结构并不是想要的 这个时候就需要对得到的数据进行处理了 比如 我们拿到的是扁平化的数组 但我们要应用在 tree 树形组件或级联选择器组件中 这样的组件要求数据结构是具有层级递进关系的 tree 结构 或者我们并不需要层
  • 【JVM类加载及字节码技术】类加载阶段——加载、链接(一)

    类在JVM中的流程分析 类加载 1 加载 2 链接 2 1 验证 2 2 准备 2 3 解析 总结 类加载 类的生命周期 加载 gt 验证 gt 准备 gt 解析 gt 初始化 gt 使用 gt 卸载 加载阶段 加载 链接阶段 验证 准备
  • DTCC2023第十四届中国数据库大会分享:MySQL性能诊断平台:利用eBPF技术实现高效的根因诊断

    主题 8月16 18日 DTCC2023第十四届中国数据库大会在北京国际会议中心召开 17日下午在云原生数据库开发与实践分论坛 我将带来分享 MySQL性能诊断平台 利用eBPF技术实现高效的根因诊断 敬请期待 欢迎大家提前试用我们发布的产
  • 5种CSS3鼠标悬停图片显示文字信息

    下载地址 5种CSS3鼠标悬停图片显示文字信息是一款鼠标悬停特效 含5种不同风格的鼠标悬停图片显示文字信息 dd
  • 用Double-DQN方法解决简单迷宫寻路问题

    环境描述 25 25离散的栅格图 起点左上角 终点右下角 障碍物1 1随机分布 动作空间维度2 向右 向下 每次移动奖励 1 遇到障碍物或移动出环境奖励 100 到终点奖励20 注 针对这个任务期望SARSA Q learning等方法能够
  • Android中控件AutoCompleteTextView的使用方法和一些属性

    版权声明 本文为博主原创文章 未经博主允许不得转载 AutoCompleteTextView一些属性
  • “数据压缩实验之LZW 编解码算法实现与分析”实验报告_201810413045_陈诚

    文章目录 1 实验项目名称 2 实验目的 3 什么是LZW编解码算法与它的原理 3 1 LZW编解码算法介绍 3 2 LZW编解码算法原理 3 2 1 编码流程图及为了便于理解和期末复习举实例说明 3 2 2 解码流程图及举实例说明 重点说