序文
問題の紹介 順序付けされていない境界付き 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 数値) コード例:
完全なコードは次のとおりです。
要約: ビットマップの典型的な応用シナリオは、大量のデータの高速ソート、検索、重複排除です。 これはデータベースや検索エンジンで広く使用されており、ビットレベルの並列処理を利用することでクエリを大幅に高速化できます。 ただし、ビットマップ インデックスは大量のメモリを消費する可能性があるため、圧縮されたビットマップ インデックスを使用することをお勧めします。 それだけです。 |
<<: 避けられないアルゴリズムを完全に理解するにはどうすればよいでしょうか?
>>: 「三銃士」グループは、鉱業の諜報活動への発展を促進するためにデビューしました
Facebook は近年、世論の嵐に何度も巻き込まれてきたが、技術革新に関しては決して無縁ではなかっ...
2月8日、ホワイトハウス大統領府は最新の改訂版「重要かつ新興の技術」リスト(CETリスト)を発表しま...
ソートアルゴリズム平均時間計算量バブルソート (n2) 選択ソート (n2) 挿入ソート (n2) ...
数え切れないほど多くの企業が、意思決定を支援するために機械学習 (ML) を日常的に使用しています。...
この脆弱性は、広範囲にわたる暗号分析を行った3つの大学とマイクロソフトの研究者によって発見されたが、...
Meta は、Meta AI と呼ばれる人工知能チャットボットをリリースしました。ザッカーバーグ氏は...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
クラスの不均衡: 希少疾患の機械学習データセット(陽性が約 8%)があるとします。この場合、トレーニ...
C114ニュース、5月8日(Lesi)本日開催された「AIと光が出会うとき:インテリジェント光ネッ...
少し前、ChatGPT は突然人気を博し、ユーザーベースが急速に増加しました。多くの人が「生成 AI...