使用 BWT 进行文本压缩和解压缩
Posted
技术标签:
【中文标题】使用 BWT 进行文本压缩和解压缩【英文标题】:Text Compression and Decompression using BWT 【发布时间】:2017-12-31 06:15:40 【问题描述】:我想问一下,我们可以结合 BWT MTF 和 Huffman 算法在 java 中获得更高的压缩率吗?过程是什么? MTF 文件写入错误?
public class MTF
static File f=new File("MTF.txt");
public static File encode(String msg, String symTable)throws Exception
if(!f.exists())
f.createNewFile();
StringBuilder s = new StringBuilder(symTable);
for(char c : msg.toCharArray())
int idx = s.indexOf("" + c);
FileWriter writer = new FileWriter(f);
writer.write(idx+" ");
System.out.print(idx+" ");
writer.flush();
writer.close();
s = s.deleteCharAt(idx).insert(0, c);
System.out.println("MTF done");
return f;
【问题讨论】:
高于什么?顺便说一句,这大概就是 bzip2 所做的 比简单的哈夫曼压缩更高..我需要自己实现它 绝对优于简单的 Huffman 压缩,因为 BWT + MTF 有效地提供了基于符号右上下文的上下文预测。 我试过 BWT 比 MTF 和 Huffman 但文件大小增加了一倍...当我从中间删除 mtf 时它压缩了 7%.. 可能是什么原因? 你能找到一个非常小的文件来实现并发布它,它的 BWT、MTF 的数据和霍夫曼代码的长度吗? 【参考方案1】:验证这个假设很容易,过程是:
获取一组有代表性的字符串(您的程序将在“现实世界”中处理的字符串); 使用 BWT MTF 编码(互联网上的实现很多); 用霍夫曼压缩;一般而言:应用 MTF 应该会提高可压缩性,例如此处提到的:http://michael.dipperstein.com/bwt/
BWT 很有用,因为它将数据转换为一种格式 通常通过运行长度编码器和统计更可压缩 顺序大于 0 的编码器。通过另外应用 移到前端编码,数据的格式通常为 甚至零阶统计编码器更可压缩,例如 霍夫曼编码或算术编码的传统实现。
【讨论】:
以上是关于使用 BWT 进行文本压缩和解压缩的主要内容,如果未能解决你的问题,请参考以下文章