В настоящее время я пишу приложение для Windows Mobile, которое должно иметь возможность выбирать пары значений ключа из штрих-кодов 1D (настройки конфигурации). Чем меньше штрих-кодов нужно сканировать, тем лучше. Пример ввода:
------------------------------
| Key | Value |
------------------------------
| 12 | Söme UTF-8 Strîng |
| 9 | & another string |
------------------------------
Я придумал следующий алгоритм:
<сильный>1. Объедините пары ключ-значение и закодируйте значения с помощью Base64
Таким образом, мы получим что-то вроде 12=U8O2bWUgVVRGLTggU3Ryw65uZw==&9=JiBhbm90aGVyIHN0cmluZw==
<сильный>2. Используйте кодировку Хаффмана для сжатия данных
Я бы использовал для этого фиксированное дерево Хаффмана со следующей информацией, которая помогает мне сжимать данные:
-------------------------------------------
| Enties | Priority |
-------------------------------------------
| =, & | High |
| 0-9 | Medium |
| 5-bit Base64 Words (w/o 0-9) | Low |
-------------------------------------------
<сильный>3. Создание штрих-кодов Code 128B из закодированных данных
Примените кодировку Base96 к битовому потоку, сгенерированному алгоритмом Хаффмана, чтобы получить символы ASCII, которые можно использовать в штрих-коде Code 128B. При необходимости разделите полученную строку на несколько штрих-кодов.
Кодирование этих шагов не будет для меня проблемой, но я хотел бы получить отзывы об эффективности и дизайне алгоритма.
Вопросы
- Я где-то теряю потенциал для лучшего сжатия/укорочения строк?
- Есть ли лучший способ сжать случайные данные в кодировке UTF8?
- Должен ли я встраивать динамическую таблицу Хаффмана в закодированные данные?
- Как я могу учесть сжатие Code 128B (
0
требует меньше места, чем&
)?