2014-10-02 4 views
3
  1. Как я могу эффективно хранить двоичные коды? Для определенных фиксированных размеров, например 32 бита, существуют примитивные типы, которые можно использовать. Но что, если мои двоичные коды намного длиннее?Как хранить и вычислять расстояние Хэмминга между двоичными кодами?

  2. Что является самым быстрым способом вычисления расстояния Хэмминга между двумя двоичными кодами?

+0

Как насчет std :: bitset? – Niall

ответ

5
  1. Использование std::bitset<N>, определенный в <bitset> заголовке, где N является число битов (не байт).
  2. Вычисление расстояния Хэмминга между двумя двоичными кодами a и b с использованием (a^b).count().
+0

Я не понимаю, что, если использовать 30-битные коды, я все еще могу использовать 32-битное целое число (возможно, маска 2 первых бита как-то)? – mrgloom

+0

@mrgloom Я бы использовал этот подход, проецировал его, а затем только если вы определили, что он слишком медленно смотрит на выполнение чего-то обычного. Я понимаю, что 'std :: bitset <30>' будет использовать только 4 байта памяти. –

+0

Ницца Тимоти, может быть, вы можете помочь с [XOR битов, когда 2D битрейт хранится как 1D] (http://stackoverflow.com/questions/40787731/xor-bitset-when-2d-bitset-is-stored-as-1d). – gsamaras