序文
問題の紹介 順序付けされていない境界付き int 配列 {1,2,5,7} があり、これは 44=16 バイトのメモリを占有すると推定されています。数字は 4 つしかないため、必要な数字をすばやく見つけるのは簡単です。しかし、そのような数字が 10 億個あり、重複もソートもされていない unsigned int 整数が 10 億個ある場合、整数が与えられたら、どうしますか? 要件分析: Java の Int 型のストレージは 4 バイト、32 ビットを占有します。 10億4/(102410241024)=約3.72G。これだけ大量のデータを検索・ソートすると、メモリが破綻してしまうでしょう。このデータは一度に読み込む必要はなく、保存する必要があり、保存すると必然的にIOを消費してしまうという意見もあります。当社は高パフォーマンスを重視しているため、このソリューションはまったく考慮されていません。
問題分析 BitMap の考え方を使って解決すれば、はるかに良い結果が得られます。では、BitMap はどのように解決するのでしょうか? 次のようにします。 1 バイトは 8 ビットを占めます。各ビットの値が存在するか存在しないか、つまり 2 進数で 0 または 1 の場合、ビットの位置が配列値の有無を表す場合、0 は値が現れていないことを意味し、1 は配列値が出現したことを意味します。データも記述できないのでしょうか?詳細は以下の通りです。 すごいと思いませんか? 10億のデータに必要なスペースが3.72G/32だとすると、32ビットを占めるデータは1ビットしか占めなくなり、ソートはもちろんのこと、多くのスペースを節約できます。すべてがとてもスムーズに思えます。このようなデータには相関関係はありません。読み取りたい場合は、マルチスレッドを使用して読み取ることができます。時間の計算量も O(Max/n) です。ここで、Max は byte[] 配列のサイズ、n はスレッド サイズです。 3. アプリケーションとコード BitMap がこれだけの機能しか持っていないと、エレガントさが足りない気がします。これからもその魅力を味わい続けていきましょう。次の計算アイデアは、実際にはビットの論理演算によって得られます。この種の論理演算に類似したアプリケーション シナリオは、権限計算で使用できます。 コードを見る前に、まず 1 つの問題を明確にしましょう。それは、数値のインデックス番号をすばやく見つける方法、つまり、byte[index] のインデックスが何であり、それがどの位置であるかを調べる方法です。例えば、add(14)。 14はbyte[0]のマッピング範囲外であり、byte[1]の範囲内にあります。では、そのインデックスを素早く見つけるにはどうすればよいでしょうか?インデックス番号を見つけたら、どうやって見つけるのでしょうか? Index(N)はNのインデックス番号を表し、Position(N)はNの位置番号を表します。
(1) 加算(int 数値) ビットマップにデータを追加したい場合はどうすればいいでしょうか? 心配しないでください。非常にシンプルで魔法のような方法です。上記で分析したように、add の目的は位置を 0 から 1 に変更することです。他の位置は変更されません。 コード例:
(2) クリア(int num) 1 を左にシフトし、それを否定し、最後に byte[index] と AND します。 コード例:
(3) 含む(int 数値) コード例:
完全なコードは次のとおりです。
要約: ビットマップの典型的な応用シナリオは、大量のデータの高速ソート、検索、重複排除です。 これはデータベースや検索エンジンで広く使用されており、ビットレベルの並列処理を利用することでクエリを大幅に高速化できます。 ただし、ビットマップ インデックスは大量のメモリを消費する可能性があるため、圧縮されたビットマップ インデックスを使用することをお勧めします。 それだけです。 |
<<: 避けられないアルゴリズムを完全に理解するにはどうすればよいでしょうか?
>>: 「三銃士」グループは、鉱業の諜報活動への発展を促進するためにデビューしました
ちょうど昨日、米国議会は、米国政府が不時着したエイリアンの宇宙船とエイリアンの遺体を発見し、それを隠...
マルチモーダル生体認証とは何ですか? マルチモーダル生体認証は、さまざまなシナリオやセキュリティ レ...
「私は、8年間誰も発見できなかった注目度の式のバグを発見しました。GPTやLLaMAを含むすべてのT...
[[274332]]私のいとこは 2000 年代生まれで、大学に入学したばかりの才能あふれる若者で...
AIは小学校の算数の文章題を解くだけでなく、高度な数学にも取り組み始めています。最近、MIT の研...
第2回中国国際輸入博覧会が11月10日に成功裏に終了した。医療機器と医薬健康展示エリアでは、世界有数...
[[249507]]過去 1 か月間の教育業界のホットなキーワードを本当に選ぶとしたら、それは間違...