compression - 高效压缩和表示从一维条形码读取的键值对

标签 compression barcode huffman-code code128

我目前正在为 Windows Mobile 编写一个应用程序,它需要能够从一维条形码(配置设置)中获取键值对。需要扫描的条形码越少越好。输入示例:

------------------------------
| Key | Value                |    
------------------------------
| 12  | Söme UTF-8 Strîng    |
|  9  | & another string     |
------------------------------

我想到了以下算法:

<强>1。连接键值对并使用 Base64 编码值

所以我们会得到类似 12=U8O2bWUgVVRGLTggU3Ryw65uZw==&9=JiBhbm90aGVyIHN0cmluZw==

<强>2。使用Huffman编码来压缩数据

为此,我将使用固定的霍夫曼树,并提供以下信息来帮助我压缩数据:

-------------------------------------------
| Enties                       | Priority |    
-------------------------------------------
| =, &                         | High     |
| 0-9                          | Medium   |
| 5-bit Base64 Words (w/o 0-9) | Low      |
-------------------------------------------

<强>3。从编码数据生成 Code 128B 条形码

将 Base96 编码应用于 Huffman 算法生成的比特流,以获得可在 Code 128B 条形码中使用的 ASCII 字符。根据需要将生成的字符串拆分为多个条形码。

编写这些步骤对我来说不是问题,但我想获得一些有关算法效率和设计的反馈。

问题

  • 我是否在某处失去了更好的压缩/更短的字符串的潜力?
  • 是否有更好的方法来压缩随机 UTF8 编码数据?
  • 我应该将动态霍夫曼表嵌入到编码数据中吗?
  • 如何考虑 Code 128B 的压缩(0& 需要的空间更少)?

最佳答案

一种简单的方法是定义直接映射到 code128 的所有 64 个字符。这将留下 30-40 个可用的代码 128 插槽。在剩余的槽中定义一些双字符。 == =& 0= 1= 2= 3= 4= 5= 6= 7= 8= 9= &0 &1 &2 &2 &5 &5 &6 &7 &8 &9 (重复最后一个字符)= =(双下一个字符) &(双下一个字符)

关于compression - 高效压缩和表示从一维条形码读取的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269408/

相关文章:

bash - 如何提取 .gz 文件的一部分(非开头)?

android - 将 zxing 条码扫描器切换到纵向模式

java - ZXing二维条码解码 : UTF-8 characters not decoded properly

c# - 在 Web 应用程序中使用条码渲染框架生成的条码下的条码编号

C++ STL : Using map with priority_queue

algorithm - 压缩文件文件夹的最有效算法

python - 字符串压缩 : Output Alphabet Restricted to Alphanumeric Characters

java - 计算 MSE(均方误差)

haskell - 递归时如何存储树? (霍夫曼解码)

java - 哈夫曼编码完成后如何用Java写入文件