Код в JustBasic можно найти здесь вместе с входным текстовым файлом.
Just BASIC Files Archive - сообщение на форуме
EBPE от TomC 02/2014 - расширенная кодировка пар байтов
EBPE имеет две постпроцессы для кодирования пары байтов
1. Сжимает словарь (считается новинкой)
Словарная запись состоит из 3 байтов:
AA – the two char to be replaced by (byte pair)
1 – this single token (tokens are unused symbols)
Итак, "AA1"
говорит нам при декодировании, что каждый раз, когда мы видим "1"
в
файл данных, замените его на "AA"
.
Хотя возможны длинные серии последовательных токенов, давайте посмотрим на это
Пример 8 токенов:
AA1BB3CC4DD5EE6FF7GG8HH9
Длина 24 байта (8 * 3)
Токен 2 отсутствует в файле, указывая, что он не был открытым токеном для
использовать, или как-то иначе сказать: 2 было в исходных данных.
Мы видим, что последние 7 токенов 3,4,5,6,7,8,9
являются последовательными, поэтому в любое время мы
увидеть последовательный прогон из 4 или более токенов, давайте изменим наш словарь так:
AA1BB3<255>CCDDEEFFGGHH<255>
Где <255>
говорит нам, что подразумеваются токены для пар байтов и
увеличиваются на 1
больше, чем последний маркер, который мы видели (3
) . Мы увеличиваем
на единицу, пока мы не увидим следующее <255>
, указывающее конец пробега.
- Оригинальный словарь был 24 байта,
- Расширенный словарь составляет 20 байтов.
Я сохранил 175 байтов, используя это улучшение в текстовом файле, где токены
128 к 254 будет в последовательности, как и другие в целом, чтобы включить
прогон, созданный предварительной обработкой строчных букв.
2. Сжимает файл данных
Повторное использование редко используемых символов в качестве токенов не является чем-то новым.
После использования всех символов для сжатия (кроме <255>
),
мы сканируем файл и находим один "j"
в файле. Пусть этот символ делает двойной
обязанность по:
"<255>j"
означает, что это литерал "j"
"j"
теперь используется в качестве токена для повторного сжатия,
Если j
встречается 1 раз в файле данных, нам нужно добавить 1 <255>
и 3-байтовая запись словаря, поэтому нам нужно сохранить более 4 байтов в BPE
чтобы это того стоило.
Если j
встречается 6 раз, нам понадобится 6 <255>
и 3-байтовый словарь
запись, поэтому нам нужно сохранить более 9 байтов в BPE, чтобы это того стоило.
В зависимости от того, возможно ли дальнейшее сжатие и сколько осталось байтовых пар
в файле этот пост-процесс сэкономил более 100 байтов при тестовых запусках.
Примечание: При распаковке убедитесь, что не распаковываете каждые "j"
.
Нужно посмотреть на предыдущий символ, чтобы убедиться, что это не <255>
в порядке
распаковать Наконец, после декомпрессии, удалите <255>
восстановить исходный файл.
3. Что дальше в EBPE?
Неизвестно в это время