Дистанционное кодирование (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 выглядит более поддающимся энтропийному сжатию.

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