組み込みアルゴリズム: ビッグデータ可変長ストレージアルゴリズム

組み込みアルゴリズム: ビッグデータ可変長ストレージアルゴリズム

1. 適用シナリオ

高精度のサンプリング結果の場合、最大値には 3 バイト、最小値には 1 バイトが必要になる場合があります。標準 C の基本データ型を使用すると、U16 は要件を満たすには小さすぎ、U32 はメモリを無駄にします。サンプルサイズが大きい場合、それが占めるスペースが問題になります。可変長データ型をストレージに使用できますか? 小さなデータには U8 を使用し、大きなデータには U32 を使用し、値のサイズに応じてストレージ領域を動的に割り当てます。これがこの記事の焦点です。

2. データの冗長性の除去

U32 空間の最大値の範囲は 2^32 に近く、非常に大きな値です。実際の値の範囲はそれよりもはるかに小さく、上位ビットは 0 である必要があります。たとえば、U32 は 0x00000001 を使用して 1 を表し、最初のビットはすべて 0 です。これが表す値は、U8 の 0x01 と同じです。先頭の 0 の繰り返し文字列は冗長データ領域に属し、削除できます。

5 つのデータ D0..4 があり、それぞれが元々 U32 型に固定されていると仮定します。上位ビットの冗長な 0 を削除し、それらを U8 の 1 次元配列に連結すると、占有スペースが大幅に削減されます。基本的な考え方は、U32またはU64アレイをU8アレイに切り取ってつなぎ合わせ、それが使用できるようにすることです。

U8配列に保存されている情報に従って、対応する値を復元します。

0x00000001、0x00000101、0x00000001 の 3 つのデータがあり、その有効部分は 0x01、0x0101、0x01 であるとします。これらをそのまま連結すると、0x01010101 の意味を区別できなくなります。したがって、上位の 0 を削除した後も、後続の分析と復元を容易にするために、データをエンコードしてマークする必要があります。

3. データのエンコード

データ エンコーディングの主な機能は、現在のデータが占める連続バイト数をマークすることです。次の 2 つの方式があります。

1. バイト長を定義する固定ビット(2ビットで4バイトを表すことができます)

1バイト: 00******

2 バイト: 01******、00******

3 バイト: 10******、01******、00******

4 バイト: 11******、10******、01******、00******

5バイト: 2ビットを使用 サポートされていません

各バイトの最上位 2 ビットは、元のデータの番号 (0 から始まる) を示します。前の例の 3 バイトは次のように表すことができます。

0x01 エンコードされたバイナリは 00-000001 で、最上位 2 ビットは 0 であり、これは現在がエンコードされたデータの最後のバイトであることを示します。

0x0101 は、2 進数で 01-000001--00-000001 としてエンコードされます。解析するときは、各バイトの 2 ビットを判定に使用します。00 の場合は、コード化された値の終了を意味します。

最初の 2 ビットはバイト数を示すために固定されているため、各バイトの実際の使用可能範囲は 6 ビットのみです。元のデータが 1000 0001 の場合、上位 2 桁の 10 を表すには別のバイトを占有する必要があり、最終的なコードは 01-000010--00-000001 になります。

このエンコード方式では、すべてのバイトの有効ビットが固定されており、エンコードとデコードが簡単に実装できます。欠点は、4 バイトには有効なデータが 24 ビットしかないことです。元のデータが最大 25 ビットの場合、各バイトを表すために 3 ビットが割り当てられます。ただし、このような大きなデータは組み込みシステムではほとんど使用されません。

2. バイトの最上位ビットは、UTF8でエンコードされた残りのデータがあることを示します。

1バイト: 0*******

2 バイト: 110*****、10******

3 バイト: 1110****、10******、10******

4 バイト: 11110***、10******、10******、10******

5 バイト: 111110**、10******、10******、10******、10******

6 バイト: 1111110*、10******、10******、10******、10******、10******

7バイト: サポートされていません

このエンコード方式では、最上位バイトの有効ビットが変更され、他のバイトの有効ビットは 6 ビットになります。

2 つのエンコード方式の選択は、主に元のデータの分布確率に基づいています。元のデータ範囲が 24 ビット以内の場合、先頭の固定ビット方式が優勢です。32 ビットを超える場合は、動的方式が適切です。データ範囲が 16 ビット以内の場合、それほど面倒な作業を行う必要はありません。

ソースコードや詳細なコミュニケーションについては、WeChat パブリック アカウント Embedded Systems をフォローしてください。

4. データアクセス

元のデータの各値は固定バイト長を占め、配列の添え字を使用して簡単にトラバースできます。つまり、アドレス オフセットは (単一の数値が占めるバイト数) * (バイト数) です。可変長データにエンコードした後、元のデータの特定のエンコードされた値を取得する場合、配列の先頭からトラバースを開始すると、効率が非常に低くなります。もっと良い方法はありますか?

前の 1 次元配列を 2 次元配列に変換します。配列の各行は、前のエンコードに従って実装されます。データには 4 バイトが予約されています。各行がいっぱいになると、末尾は現在の行の終わりと、含まれている元のデータの累積量を示します。次のエンコード値は次の行に格納され、以下同様に続きます。

上の図に示すように、2 次元配列の行は 1 次元配列に縮退し、各行は固定された位置に格納する番号をマークします。 C10 を検索する必要がある場合は、まずマークされた番号のバイト アドレスに従ってトラバースし、2 行目 (0 から始まる) が 13 であることがわかります。これは、検索する必要のあるデータがこの行にあることを意味します。この行をトラバースし、C9 以降からクエリを実行するだけで済みます。

5. まとめ

適切なデータ型を選択すると、ストレージ スペースが削減されます。また、さまざまなデータに可変長型のスプライシング ストレージを使用すると、多少の時間は犠牲になりますが、RAM またはフラッシュ スペースが節約されます。これは、リソースが制限された組み込みデバイスにとって確実に価値があります。

この記事はWeChatのパブリックアカウント「Embedded Systems」から転載したものです。以下のQRコードからフォローできます。この記事を転載する場合は、Embedded System パブリック アカウントにお問い合わせください。

<<:  ハーバード大学の研究者がAIを活用して世界中の密猟を阻止

>>:  Python における 7 つの主要なキーワード抽出アルゴリズムのベンチマーク

ブログ    
ブログ    

推薦する

OpenAIをターゲットに!元Google CEOがAI+サイエンスのムーンショット計画を発表

元 Google CEO のエリック・シュミット氏は、AI を活用して科学研究の課題に取り組むことを...

初心者からプロまでが使用する機械学習ソフトウェア トップ 10

この記事では、機械学習に最適なソフトウェアについて説明します。これらのソフトウェアは、ML コードを...

DL時代のコード補完ツールは言語モデルよりもはるかに効果的である

プログラマーからデータ エンジニアまで、プログラム コードを書くことは基本的なスキルですが、長いコー...

機械学習では、いくつかの分類アルゴリズムが一般的に使用されています。適切なアルゴリズムを選択するにはどうすればよいでしょうか?

今日は、機械学習における一般的な分類アルゴリズム 6 つ (K 最近傍法、決定木、単純ベイズ、ロジス...

2015年に中国の電子商取引消費者に最も優しい製品が発表されました:ビッグデータアルゴリズム+専門家のコメント=優れた中国のデザイン

消費者の実際の購買行動や実際のユーザーレビューのビッグデータ分析に基づいた中国初の「2015年中国電...

プログラマーが知っておくべき10の基本的な実用的なアルゴリズムとその説明

アルゴリズム1: クイックソートアルゴリズムクイックソートは、Tony Hall によって開発された...

多くの場所でAI顔認識の使用が制限されており、監視は技術開発のペースに追いついています

最近、南京、江蘇省、天津などではAI顔認識技術の使用を禁止し始めている。 11月末、南京市のある男性...

Rocket Launch: 効率的で軽量なネットワーク トレーニング フレームワーク

まとめクリックスルー率の推定などのオンラインリアルタイム応答システムでは、応答時間に関して非常に厳し...

AI論文が急増、10万件以上の引用を誇るResNetの登場は良いことなのか悪いことなのか?この研究は、

[[442368]] 1週間前、コンピュータービジョン分野の古典であるHe Kaiming氏のRe...

製造業の未来:AIGCとその他の先進技術

製造業とメタバースMetaverse テクノロジーを製造業に統合すると、企業の運営方法に革命をもたら...

今後数年間の AI 求人市場はどのようになるでしょうか?

[[353999]] AI がもたらす自動化の脅威によって仕事が奪われる一方で、AI は新しい職種...

信頼できるAIの基礎は、適切なタイミングで適切なデータを得ることです

私たちは人工知能の存在に慣れ始めており、生成型人工知能(GenAI)の普及により、人工知能が世界に与...

DeepMind、囲碁、チェス、ポーカーをプレイするための汎用学習アルゴリズムSoGを発表

2016年3月、ロボットと世界チャンピオンでプロ棋士のイ・セドル九段による人機囲碁対決が世界中から大...

今日は秋分の日で収穫の季節。ドローンがショーの中心です。

9月22日は秋分の日であり、私の国では3回目の「農民の収穫祭」でもあります。収穫の季節と重なる黄金...