使用 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 进行文本压缩和解压缩的主要内容,如果未能解决你的问题,请参考以下文章

用于压缩和解压缩 bzip2 中的 hdfs 数据的 Pig 脚本

Linux高级命令05:压缩和解压缩命令

Qt中用QuaZip来压缩和解压缩文件

python中如何压缩和解压缩文件

jetson nano学习笔记1

jetson nano学习笔记1