5

こんにちは、ビットセットまたはビットアレイで動作する優れたライブラリを探しています。boost::dynamic_bitset よりも優れている (またはすべての場合で悪くない) ことを知っている人はいますか? ライブラリがオープン ソースか商用かは関係ありません。

私のプロジェクトでは、1 の数が少ない大きなビット マスクを保存して操作するのが一般的なタスクです。そのため、メモリ内で適切に圧縮できます。

4

3 に答える 3

6

利用可能な圧縮ビットベクトルの実装がいくつかあります。それらは通常、圧縮形式で機能する and/or/xor/not 操作と一緒にランレングス エンコーディングを備えています。

したがって、利点は次のとおりです。

  • より小さなスペース使用量(ユースケースのように、スパースビットセットの場合)
  • 非常に高速なビット操作 (単語で動作し、CPU キャッシュにはるかに適しているため)

そしてマイナス面:

  • 遅いビット アクセス (特定の位置でビットを見つけるために反復が必要)

私が知っているいくつかの実装(私が確信している他の実装があります):

Fastbit 実際には、ビットベクトル インデックスを使用するデータベースです。圧縮された bitvector クラスは (インデックスなしで) 直接使用できます。

Lemur bitmapindex Fastbitによって導入された EWAH エンコーディングの別の実装

koen.vandamme による圧縮ビットベクター 試したことはありませんが、2 つのヘッダーと 1 つの cpp ファイルのみです。そのため、試してみる努力はあまり必要ありません。

ハードウェア サポート (sse2 など) を含む複数の圧縮ビットベクトルを実装するBitmagic本格的なパッケージ


お役に立てれば、

ローランド

于 2011-10-17T13:28:58.147 に答える
0

MiniSAT ライブラリはどうですか?

http://minisat.se/

これには、ビット配列の単純な実装があったことを思い出します。

于 2010-10-29T14:58:11.687 に答える
0

スペースの最適化だけを探している場合、std::vector は、スペース用に最適化されたベクトルの特殊化を提供します。

http://www.cplusplus.com/reference/stl/vector/

および C++ 標準 23.2.5

これが boost:dynamic_bitset よりも優れているかどうかはわかりませんが、まだ調べていない場合は調査する価値があります。

于 2010-10-31T00:40:56.943 に答える