Алгоритм по модулю битсета - PullRequest
1 голос
/ 31 января 2012

скажем, у меня есть 2 набора битов

bitset<1024> test, current;

Как я должен модулировать current с test и выводить его в другом bitset<1024>? Обратите внимание, что test может иметь любую форму, а не только степень двойки?

Ищете ответ либо с полным кодом, либо с полным псевдокодом. Я не приму ответы, связанные с преобразованием в другой тип, кроме bitset, потому что, хотя использование битовых наборов здесь может работать медленнее, но позже в программе битовые наборы будут очень быстрыми.

1 Ответ

0 голосов
/ 31 января 2012

Вот что вы можете попробовать, если не хотите самостоятельно реализовывать алгоритм по модулю:

  1. Вместо std::bitset, используйте boost::dynamic_bitset.
  2. Используйте boost :: to_block_range , чтобы скопировать байты набора битов в буфер.
  3. Используйте одну из множества библиотек bigint для представления 256-байтового целого числа.
  4. Заставьте 256-байтовый bigint использовать байты, скопированные на шаге 2.
  5. Выполните операцию по модулю для bigint.
  6. Преобразовать результат обратно в dynamic_bitset.
  7. Прибыль

Надеемся, что есть библиотека bigint, которая позволяет вам получить доступ к ее буферу, чтобы вы могли скопировать байты из dynamic_bitset непосредственно в bigint.

ИНадеемся, что издержки копирования 256 байтов вокруг незначительны по сравнению с самой операцией по модулю.

О, и представление bigint должно иметь тот же порядок байтов, что и dynamic_bitset.

...