1

私は 2^n ベクトルで作業しています。たとえば、n=3 可能な値は次のとおりです。

000、001、010、011、100、101、110、111

組み合わせのセットが言うことを考えると、最も効率的な方法は何かを見つけたいと思います

000、000、001、100、000、110、000、110

指定された値が可能なセットに含まれているかどうかを確認する方法。

1 つの方法は、リスト全体を調べることです (総当たり攻撃)。もう 1 つは、log_2(n) +1 のバイナリ検索など、従来の検索方法のいずれかを使用することです。

ブルーム フィルターを使用する方法もありますが、これは確率的な方法です。

メンバーシップを効率的にテストするために、ビット文字列のリストを指定して、他に何かあるかどうかを知りたいです。

4

2 に答える 2

0

ある種のハッシュベースのセット ( HashSetJava など) は、償却された定数時間で挿入と検索を行います。これは、漸近的に得られる最高のものです。

本当にボートを押し出したい場合、およびセットが密集している場合 (つまり、可能なビット文字列のかなりの割合が存在すると予想される場合)、それらを整数に変換してビットフィールドを使用します。これも一定時間ですが、より高速な定数です。

于 2014-10-29T17:26:51.620 に答える