Сжатие и декомпрессия текста с использованием BWT

Я хочу спросить, можем ли мы объединить алгоритмы BWT MTF и Хаффмана, чтобы получить более высокую степень сжатия в 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;
}

1 ответ

Решение

Это довольно легко проверить эту гипотезу, процесс будет:

  • взять представительный набор строк (строк, с которыми ваша программа будет иметь дело в "реальном мире");
  • кодировать с помощью BWT MTF (множество реализаций в Интернете);
  • сжать с Хаффманом;

В целом: применение MTF должно улучшить сжимаемость, как, например, упомянуто здесь: http://michael.dipperstein.com/bwt/

BWT полезен, потому что он преобразует данные в формат, который обычно более сжимаем с помощью кодеров длины серий и статистических кодеров с порядком, большим 0. При дополнительном применении кодирования с перемещением вперед данные будут иметь формат, который обычно больше сжимается даже статистическими кодерами нулевого порядка, такими как традиционные реализации кодирования Хаффмана или арифметического кодирования.

Другие вопросы по тегам