实验6.1python完成LZW 编解码算法实现与分析

该实验旨在掌握词典编码原理,通过Python实现LZW编解码,对不同文件类型进行压缩。实验内容包括LZW编码、解码程序的编写和压缩效率分析。结果显示,所有文本文件的压缩效率为0.844,图像文件中jpg格式压缩效率最高,达到0.162。
摘要由CSDN通过智能技术生成

实验目的

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

LZW编解码原理

编码0-255用来存储Ascii码为[0,255]的字符,放在字典里。

编码从256开始,将出现过的字符计入字典

核心思想:利用字符的可重用性,每当往结果输出一个编码,就将一个新的string存入dictionary

实验内容

1.首先调试LZW的编码程序,以一个文本文件作为输入,得到输出的LZW编码文件。
2. 以实验步骤一得到的编码文件作为输入,编写LZW的解码程序。在写解码程序时需要对关键语句加上注释,并说明进行何操作。在实验报告中重点说明当前码字在词典中不存在时应如何处理并解释原因。
3. 选择至少十种不同格式类型的文件,使用LZW编码器进行压缩得到输出的压缩比特流文件。对各种不同格式的文件进行压缩效率的分析。

实验文件

1.文本文件
在这里插入图片描述

2.图像文件
在这里插入图片描述

实验步骤

输入文件,输出LZW编码文件

#LZW编码
def LZW(InFileName,OutFileName):
    f = open(InFileName,'rb') #读取对应的文件
    string = f.read()
    string = string.decode("utf-8")
    f.close()
    print("压缩前的编码:",string)

    dictionary = {
   chr(i): i for i in range(0, 256)}#导入ASC码进入字典1
    last = 256#新的编码从第256位开始
    p = ""#定义前一个字符,开始为空
    result1 = []#定义一个空数组作为编码输出

    for c in string:  #c为后一个字符,如果c在字符串中执行循环,执行完一次后c指向下一个字符
        pc = p + c    #将前后两个字符组成一个新的字符用pc表示
        if pc in dictionary:  #如果pc在字典中,把pc作为前一个字符
            p = pc
        else:
            result1.append(dictionary[p])  #如果pc不在字典中,把前一个
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值