- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
好吧,我必须使用 LZW 算法制作一个 PPM 图像压缩器,我理解该算法和代码并实现了一个字符串版本(在 Java 中,用于测试)。
最大的问题是压缩,因为如果我有:
输入:ABCDABCDABCDABCD
输出:65 66 67 68 256 258 260 259 257 68
至于我的输入,我有 16 个字符,如果我只是将输出保存为文本文件,则没有压缩,因为有 34 个字符。所以我想我会保存为二进制文件,然后在我的文件的一个字节中刻录每个字段,但是存在字段 >= 256 的问题。我也想到了将一些字段设置为值时发生的想法大于 255 之类的东西。 :
(在这种情况下,我将删除字典中的 255 字段和 0)
65 66 67 68 256 258,将是:
65 66 67 68 255 1 0 255 3 0
那么每个字段等于 255 表示出现了连续的字节和 sum 将是要添加的元素; byte 0表示sum结束。
问题是即使这样我的输出也会大于输入,压缩没有意义。然后我会问你是否有办法解决这个问题。
最佳答案
LZW 具有可预测的下一个数据 block 大小。所以你的编码器应该保存保存当前代码所需的位数。您的解码器应该计算下一个代码的位数并读取该位数。
所以你的解码器看起来像
while (read next block){
read next block bits size
decode character block
update dictionary
next block bits size = dictionary next code bit size
}
压缩算法永远不会在通用情况下起作用。 LZW 适用于高度重复的数据。对于非重复数据,压缩后的数据大小将始终大于初始数据大小。
关于java - LZW - 压缩率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23419550/
LZW 压缩算法在压缩后增加了位大小: 这是压缩函数的代码: // compression void compress(FILE *inputFile, FILE *outputFile) {
我正在寻找可以压缩和解压缩word文档的c#中的LZW压缩算法。我在谷歌上搜索过它,但它没有给我我需要的答案。任何人都可以帮助我获得它的代码并让我了解如何在我的项目中真正实现 LZW。 最佳答案 有一
我试图让这段代码正常工作,但当我尝试编码时,它似乎无法正常工作。我有一个 60 字节的文本文件。我对其进行编码,输出文件为 100 字节。当我解码该文件时,它变成了 65 字节。它解码正确,但文件大小
我很难理解 LZW 算法。我正在检查维基百科 (http://en.wikipedia.org/w/index.php?title=Lempel-Ziv-Welch&oldid=245292660)
好吧,我必须使用 LZW 算法制作一个 PPM 图像压缩器,我理解该算法和代码并实现了一个字符串版本(在 Java 中,用于测试)。 最大的问题是压缩,因为如果我有: 输入:ABCDABCDABCDA
我目前正在将 LZW 压缩和解压缩方法从 FFmpeg 源代码实现到我的项目。我偶然发现的是输出缓冲区的大小(将存储压缩数据的地方)需要大于我们要压缩的输入缓冲区的大小。这与压缩本身不矛盾吗? 下一部
我找到了 LZW 算法的实现,我想知道如何将其输出(一个 int 列表)表示为字节数组。 我曾尝试使用一个字节,但在长输入的情况下,字典有超过 256 个条目,因此我无法转换。 然后我尝试添加一个额外
我正在编写一个 C 库来将 SDL_Surfaces 导出为各种格式作为练习,到目前为止,我已经搞定了 BMP、TGA 和 PCX 格式。现在我正在制作 GIF格式,我觉得我已经非常接近让它发挥作用了
我正在尝试实现LZW压缩和解压缩技术。我的程序将任何文件作为输入流并将其读入字节数组。然后,它对其应用压缩算法,并在字符串变量中返回编码字节。 然后我应用解压缩算法返回原始数字。 现在为了检索原始文件
我有一个 LZW 算法 - private void start(int maxNumBits) throws IOException{ System.out.println("Beginni
谁能告诉我如何用 c 语言构建 LZW 压缩树?是不是像 结构树{ 短下一个[255]; } 最佳答案 LZW 的树更像是一本字典。每个条目由一个代码(索引)和一个字符组成。树在逻辑上用所有字符初始化
我希望更改 LZW 压缩器,使其能够在 LZW 编码文件中搜索单词并查找该搜索词的匹配数。例如,如果我的文件用作 Prompt:>lzw "searchterm" encoded_file.lzw 3
我做了一些研究,但没有什么真正与我的问题有关...... 我实际上正在尝试为学校编写 LZW 压缩代码,并且我需要一个函数来检查某个元素是否在我的字典中。 但是,当我调用这个函数时,它尝试访问我的字典
这里是函数本身。我在那里遇到了段错误,因为显然我无法将字符串分配给数组中的该值。 clang/gcc 都给我一个警告。 Clang 的好一点,它是“期望 char 分配 char *”。我不知道还有什
我有以下形式的字符串(大约 1-5Kb): FF,A3V,X7Y,aA4,.... lzw 非常好地压缩这些,但包含土耳其字符。然后将它们提交到 MySQL 数据库。 有时 MySQL 可能会“播放”
我正在编写一个通用的 LZW 解码器 c++ 程序,但我无法找到有关所用代码字长度(以位为单位)的文档。我发现一些文章说代码字长 12 位,而其他人说 16 位,还有一些文章说使用可变位长度。那是哪一
所以我正在尝试用 C++ 制作一个简单的文件压缩器/解压缩器(我的目标不是尽可能获得最好的结果)但我真的被卡住了,因为我充满了疑问所以他们在这里: 我应该使用哪种字典(我正在使用 map )?我应该存
CGPDFScanner 会解压缩它遇到的任何 LZW 压缩吗?还是我要为此负责? [我假设它确实如此,因为我正在使用大量的 Tj 运算符等] 最佳答案 是的,CGPDFScanner 将解压缩它找到
当我使用长度为 256 的符号表(字典)时,我的 LZW 压缩工作正常,编码器和解码器都使用 256 并且一切正常但是当我将这个数字增加到例如 512、1024、4096 时,解码文件输出是与第一个输
注意:这不是 LZW 压缩的正确用法。我只是在玩弄它。 问题 在一次传递中,是否可以同时更新字典中元素的频率计数? 我的实现 import sys from collections import de
我是一名优秀的程序员,十分优秀!