Как я могу эффективно хранить двоичные коды? Для определенных фиксированных размеров, например 32 бита, существуют примитивные типы, которые можно использовать. Но что, если мои двоичные коды намного длиннее?Как хранить и вычислять расстояние Хэмминга между двоичными кодами?
Что является самым быстрым способом вычисления расстояния Хэмминга между двумя двоичными кодами?
ответ
- Использование
std::bitset<N>
, определенный в<bitset>
заголовке, гдеN
является число битов (не байт). - Вычисление расстояния Хэмминга между двумя двоичными кодами
a
иb
с использованием(a^b).count()
.
Я не понимаю, что, если использовать 30-битные коды, я все еще могу использовать 32-битное целое число (возможно, маска 2 первых бита как-то)? – mrgloom
@mrgloom Я бы использовал этот подход, проецировал его, а затем только если вы определили, что он слишком медленно смотрит на выполнение чего-то обычного. Я понимаю, что 'std :: bitset <30>' будет использовать только 4 байта памяти. –
Ницца Тимоти, может быть, вы можете помочь с [XOR битов, когда 2D битрейт хранится как 1D] (http://stackoverflow.com/questions/40787731/xor-bitset-when-2d-bitset-is-stored-as-1d). – gsamaras
Как насчет std :: bitset? – Niall