私は現在、1Dバーコード(構成設定)からキーと値のペアを取得できる必要があるWindowsMobile用のアプリケーションを作成しています。スキャンする必要のあるバーコードが少ないほど、優れています。サンプル入力:
------------------------------
| 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.エンコードされたデータからコード128Bバーコードを生成します
ハフマンアルゴリズムによって生成されたビットストリームにBase96エンコーディングを適用して、コード128Bバーコード内で使用できるASCII文字を取得します。結果の文字列を必要に応じて複数のバーコードに分割します。
この手順をコーディングすることは私にとって問題にはなりませんが、アルゴリズムの効率と設計についてフィードバックをお願いします。
質問
- どこかでより良い圧縮/より短い文字列の可能性を失っていますか?
- ランダムなUTF8エンコードデータを圧縮するためのより良い方法はありますか?
- エンコードされたデータに動的ハフマンテーブルを埋め込む必要がありますか?
- コード128Bの圧縮をどのように考慮に入れることができますか(a
0
はaよりも少ないスペースを必要とします&
)?