Хорошая библиотека для битов или битрейров - PullRequest
5 голосов
/ 29 октября 2010

Привет всем, Я ищу хорошую библиотеку, которая работает с bitsets или bitarrays. Кто-нибудь знает что-то лучше (или не хуже во всех случаях), чем boost :: dynamic_bitset? Неважно, является ли библиотека открытым исходным кодом или коммерческая.

В моем проекте это обычная задача хранить и работать с большими битовыми масками, которые содержат меньшее количество из них. Так что они могут быть хорошо сжаты в памяти.

Ответы [ 3 ]

6 голосов
/ 17 октября 2011

Существует несколько реализаций сжатых битовых векторов.Обычно они содержат кодировку длины серии вместе с операциями и / или / xor / not, которые работают в сжатой форме.

Таким образом, преимущества заключаются в следующем:

  • меньшее использование пространства (для разреженныхбитовые наборы, как в вашем случае использования)
  • очень быстрые битовые операции (потому что они работают со словами и намного более дружественны к кэш-памяти процессора)

и ниже:

  • более медленный доступ к битам (требуется итерация, чтобы найти бит в определенной позиции)

Некоторые реализации, о которых я знаю (есть и другие, я уверен):

Fastbit Фактически это база данных, использующая индекс битового вектора.Сжатый класс битового вектора можно использовать напрямую (без индексации)

Lemur bitmapindex Еще одна реализация кодирования EWAH, представленная Fastbit

Сжатый битовый вектор от koen.vandamme Никогда не пробовал ... только два заголовка и файл cpp.Поэтому не нужно много усилий, чтобы попробовать.

Bitmagic Полноценный пакет, реализующий несколько сжатых битовых векторов, включая аппаратную поддержку (sse2, ...)


Hopeэто помогает,

Роланд

0 голосов
/ 31 октября 2010

Если все, что вам нужно - это оптимизация пространства, тогда std :: vector предоставляет векторную специализацию, оптимизированную для пространства.

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

и стандарт C ++ 23.2.5

Не знаю, лучше ли это, чем boost: dynamic_bitset, но стоит разобраться, если вы еще не изучали его.

0 голосов
/ 29 октября 2010

Как насчет библиотек MiniSAT?

http://minisat.se/

Я вспоминаю, что это была простая реализация для битовых массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...