序文
問題の紹介 順序付けされていない境界付き 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 数値) コード例:
完全なコードは次のとおりです。
要約: ビットマップの典型的な応用シナリオは、大量のデータの高速ソート、検索、重複排除です。 これはデータベースや検索エンジンで広く使用されており、ビットレベルの並列処理を利用することでクエリを大幅に高速化できます。 ただし、ビットマップ インデックスは大量のメモリを消費する可能性があるため、圧縮されたビットマップ インデックスを使用することをお勧めします。 それだけです。 |
<<: 避けられないアルゴリズムを完全に理解するにはどうすればよいでしょうか?
>>: 「三銃士」グループは、鉱業の諜報活動への発展を促進するためにデビューしました
生活のペースが加速し続けるにつれて、テイクアウトや物流などの輸送効率に対する人々の要求はますます高ま...
Chat GPTが普及して以来、さまざまなAIツールが次々と登場しました。AIの出現により、多くの...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
[[200675]]視聴者が足りないなら、噂話で十分だまずは噂話から始めましょう。この記事を書き始...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
マッキンゼーの「2022年世界産業用ロボット調査」によると、産業企業は世界的な労働力不足に対処するた...
AI は商業用不動産業界を変革し、あらゆるものをより効率的、アクセスしやすく、透明性の高いものにし...
もしあなたの配偶者や子供があなたに泣きながら電話をかけてきて、誘拐されたと告げたら、あなたは冷静で慎...
序文深さ優先探索 (DFS) と幅優先探索は、グラフ理論における非常に重要な 2 つのアルゴリズムで...
画像を生成するための大規模なモデルがコンピュータービジョンやグラフィックスの基礎となっている一方で、...
ロンドン動物学会(ZSL)は、英国で深刻化する生物多様性の問題に取り組むため、ネットワーク・レールと...
静かに、アルパカファミリーの“最強バージョン”が登場! GPT-4と同等のコンテキスト長32,000...
ディープラーニングは、機械学習の分野で最も注目されているテクノロジーです。ディープラーニング フレー...
わが国の著名な学者である周海中氏は、1990年代に「科学技術の進歩により、人工知能の時代が到来しよう...
NeurIPS は世界で最も権威のある AI 学術会議の 1 つです。正式名称は Neural In...