Сжатие и декомпрессия текста с использованием 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. При дополнительном применении кодирования с перемещением вперед данные будут иметь формат, который обычно больше сжимается даже статистическими кодерами нулевого порядка, такими как традиционные реализации кодирования Хаффмана или арифметического кодирования.