Дистанционное кодирование (DC) BWT
Я пытаюсь написать BWT с программой сжатия Хаффмана с Java. В BWT я хочу реализовать дистанционное кодирование (DC). Я ищу несколько примеров, но их не так много.
Я нашел этот пример:
http://www.cs.ucr.edu/~stelo/cpm/cpm07/move_to_front_gagie.pdf
ДК начинается с 29 стр. Но это действительно трудно понять, потому что нет комментариев.
Может быть, кто-то реализовал DC или знает теорию, как реализовать его в реальном коде?:)
Я понял ту часть, что прежде всего нужно написать, что такое char. Но потом с расстоянием я не понял.
Я отмечаю, что для каждого символа DC находит свое следующее вхождение в последовательности, записывает его в S и выводит расстояние до него. Если вхождения нет, напишите 0.
Благодарю.
1 ответ
Я написал реализацию на Java: http://code.google.com/p/kanzi/source/browse/java/src/kanzi/function/DistanceCodec.java
Вы можете увидеть объяснение алгоритма в начале кода (полный пример). Кроме того, взгляните на кодер блоков (он включает BWT + MoveToFront + преобразование нулевой длины + кодирование энтропии): http://code.google.com/p/kanzi/source/browse/java/src/kanzi/function/BlockCodec.java
Я попытался использовать кодирование расстояния вместо перемещения вперед. Выход меньше (лучшее сжатие) с DC по сравнению с MTFT. Однако после энтропийного кодирования результат обратный: MTFT выглядит более поддающимся энтропийному сжатию.