compress

所属分类:其他
开发工具:Python
文件大小:0KB
下载次数:2
上传日期:2019-09-15 07:25:29
上 传 者sh-1993
说明:  无损压缩算法, 游程编码(RunLength), 霍夫曼(Huffman), LZW
(Lossless compression algorithm, RunLength, Huffman, LZW)

文件列表:
Huffman.py (5605, 2019-09-15)
LZW.py (6584, 2019-09-15)
RunLength.py (2652, 2019-09-15)
__init__.py (0, 2019-09-15)
bitio.py (2214, 2019-09-15)
data/ (0, 2019-09-15)
data/4runs.bin (5, 2019-09-15)
data/ababLZW.txt (7, 2019-09-15)
data/abra.txt (12, 2019-09-15)
data/abraLZW.txt (17, 2019-09-15)
data/medTale.txt (5632, 2019-09-15)
data/q32x48.bin (192, 2019-09-15)
data/q64x96.bin (768, 2019-09-15)
data/tale.txt (726570, 2019-09-15)
data/tinyTale.txt (277, 2019-09-15)
data/tinytinyTale.txt (51, 2019-09-15)
evaluate.py (4820, 2019-09-15)
temp_files/ (0, 2019-09-15)
temp_files/4runs.bin (5, 2019-09-15)
temp_files/4runs.bin.huffman (12, 2019-09-15)
temp_files/4runs.bin.lzw (9, 2019-09-15)
temp_files/4runs.bin.rl (4, 2019-09-15)
temp_files/ababLZW.txt (7, 2019-09-15)
temp_files/ababLZW.txt.lzw (8, 2019-09-15)
temp_files/abra.txt (12, 2019-09-15)
temp_files/abra.txt.huffman (15, 2019-09-15)
temp_files/abra.txt.lzw (17, 2019-09-15)
temp_files/abra.txt.rl (52, 2019-09-15)
temp_files/abraLZW.txt (17, 2019-09-15)
temp_files/abraLZW.txt.lzw (20, 2019-09-15)
temp_files/bitio_test.dat (10, 2019-09-15)
temp_files/medTale.txt (5632, 2019-09-15)
temp_files/medTale.txt.huffman (3083, 2019-09-15)
temp_files/medTale.txt.lzw (3399, 2019-09-15)
temp_files/q32x48.bin (192, 2019-09-15)
temp_files/q32x48.bin.huffman (102, 2019-09-15)
temp_files/q32x48.bin.lzw (147, 2019-09-15)
temp_files/q32x48.bin.rl (143, 2019-09-15)
... ...

# 数据压缩 ## First... [python二进制文件的读写操作](https://rosettacode.org/wiki/Bitwise_IO#Python) ## 游程编码 比特流中最简单的冗余形式就是一长串重复的比特. 游程编码对这些重复比特计数, 交替保存0和1的长度, 实现"压缩". 适合大量重复长游程的情况, 不适合大量短游程的数据(比如自然语言文档) ### 压缩 * 读取一个比特 * 如果它和上一个比特不同, 写入当前的计数值并将计数器归零 * 如果它和上一个比特相同且计数器已达到最大值, 则写入计数值, 再写入一个0计数值, 然后将计数值归零 * 增加计数器的值 输入流结束时, 写入计数值(最后一个游程长度)并结束. ### 解压 读取一个游程的长度, 将当前比特按照长度写入解压文件, 转换当前比特然后继续, 直到输入结束 ## Huffman Huffman压缩, 通过对字符统计频率, 为频率高的构建短编码, 为频率低的构建长编码, 使得总体编码长度最小. 非常适用于自然语言文本(对其他任意字节流也有效果), **Huffman算法为输入中的定长模式产生了一张变长的编码编译表.** ### 压缩 (将需要压缩的比特流看作8位编码的字符值, 然后按以下方式压缩) * 读取输入 * 统计输入中的每个字符值出现的频率 * 根据频率构建Huffman树 * 根据Huffman树构建每个字符的Huffman编码的编译表 * 将单词查找树(Huffman树)编码为比特流写入压缩文件 * 将字符总数编码写入压缩文件 * 使用编译表编码每个输入字符, 并写入压缩文件 ### 解压 * 读取单词查找树(Huffman树,在压缩文件开头) * 读取需要解码的字符数量 * 使用单词查找树(Huffman树)对后续比特流解码 ## LZW **Lempel-Ziv-Welch**数据压缩算法, 通过为连续的多个字符(字符串)分配定长的编码, 实现压缩.**LZW算法为输入中的变长模式(字符串)生成一张定长的编码编译表.** ### 压缩 * 首先为原始文件的字符集中的每个字符分配一个定长编码 * 然后从输入流中不断的为新字符串赋予更大的编码值 1. 找出未处理的输入在符号表中最长的前缀字符串s 2. 将s的编码值写入压缩文件 3. 扫描s后的一个字符c 4. 在符号表中将字符串s+c赋予下一个编码值 压缩时维护了一张以字符串作为键, 以(定长)编码为值的编译表 ### 解压 * 首先, 关联编码值与字符集中的每个字符, 并用val保存解码的第一个字符 1. 将val表示的字符(串)写入文件 2. 从压缩文件读取一个编码x, 并得到其关联的字符串s 3. *为val+s\[0\]分配下一个编码值* 4. 将当前val设为s 解压时维护了一张{编码值: 字符串}的符号表 ## Performance ``` python3 evaluate.py ``` ```text ------------------------------ RunLength ------------------------------ data/4runs.bin bits 40 -> 32 ,rate 0.800 compress 0.001s, expand 0.001s data/abra.txt bits 96 -> 416 ,rate 4.333 compress 0.000s, expand 0.001s data/q32x48.bin bits 1536 -> 1144 ,rate 0.745 compress 0.002s, expand 0.002s data/q64x96.bin bits 6144 -> 2296 ,rate 0.374 compress 0.008s, expand 0.006s ------------------------------ Huffman ------------------------------ data/4runs.bin bits 40 -> 96 ,rate 2.400 compress 0.001s, expand 0.000s data/abra.txt bits 96 -> 120 ,rate 1.250 compress 0.001s, expand 0.001s data/q32x48.bin bits 1536 -> 816 ,rate 0.531 compress 0.004s, expand 0.002s data/q64x96.bin bits 6144 -> 2032 ,rate 0.331 compress 0.012s, expand 0.009s data/tinytinyTale.txt bits 408 -> 352 ,rate 0.863 compress 0.002s, expand 0.001s data/tinyTale.txt bits 2216 -> 1352 ,rate 0.610 compress 0.006s, expand 0.003s data/medTale.txt bits 45056 -> 23912 ,rate 0.531 compress 0.091s, expand 0.069s data/tale.txt bits 5812560 -> 3043928 ,rate 0.524 compress 11.938s, expand 7.146s ------------------------------ LZW ------------------------------ data/4runs.bin bits 40 -> 72 ,rate 1.800 compress 0.015s, expand 0.001s data/abra.txt bits 96 -> 136 ,rate 1.417 compress 0.015s, expand 0.000s data/q32x48.bin bits 1536 -> 1176 ,rate 0.766 compress 0.025s, expand 0.003s data/q64x96.bin bits 6144 -> 2824 ,rate 0.460 compress 0.047s, expand 0.007s data/tinytinyTale.txt bits 408 -> 456 ,rate 1.118 compress 0.019s, expand 0.001s data/tinyTale.txt bits 2216 -> 1896 ,rate 0.856 compress 0.036s, expand 0.004s data/medTale.txt bits 45056 -> 27016 ,rate 0.600 compress 0.331s, expand 0.058s data/tale.txt bits 5812560 -> 2667936 ,rate 0.459 compress 30.548s, expand 6.579s data/ababLZW.txt bits 56 -> 64 ,rate 1.143 compress 0.015s, expand 0.001s data/abraLZW.txt bits 136 -> 160 ,rate 1.176 compress 0.015s, expand 0.001s ``` ## 参考 [Algorithm fourth edition: Data compression](https://algs4.cs.princeton.edu/55compression/)

近期下载者

相关文件


收藏者