Как сгенерировать все возможные комбинации n-битных строк? - PullRequest
5 голосов
/ 19 марта 2012

Учитывая положительное целое число n, я хочу сгенерировать все возможные n битовые комбинации в matlab.
Например: если n = 3, тогда ответ должен быть

000
001
010
011
100
101
110
111

Как мне это сделать?Я хочу на самом деле хранить их в матрице.Я попытался

for n=1:2^4 
r(n)=dec2bin(n,5); 
end; 

, но это дало ошибку "В присваивании A (:) = B количество элементов в A и B должно быть одинаковым.

Ответы [ 3 ]

9 голосов
/ 19 марта 2012

Просто обведите все целые числа в [0,2^n) и выведите число в двоичном виде.Если вы всегда хотите иметь n цифры (например, вставить начальные нули), это будет выглядеть следующим образом:

for ii=0:2^n-1,
    fprintf('%0*s\n', n, dec2bin(ii));
end

Редактировать: Есть несколько способов поместить результаты вматрица.Самое простое - использовать

x = dec2bin(0:2^n-1);

, что даст матрицу n -by- 2^n типа char.Каждая строка является одной из битовых строк.

Если вы действительно хотите хранить строки в каждой строке, вы можете сделать это:

x = cell(1, 2^n);
for ii=0:2^n-1,
    x{ii} = dec2bin(ii);
end

Однако, если вы ищете эффективную обработку, вы должны помнить, что целые числа уже хранятся в памяти в двоичном виде!Итак, вектор:

x = 0 : 2^n-1;

Содержит бинарные шаблоны наиболее эффективным способом памяти и процессора.Единственный компромисс в том, что вы не сможете представлять шаблоны с более чем 32 из 64 битов, используя это компактное представление.

1 голос
/ 18 февраля 2018

Это однострочный ответ на вопрос, который дает вам двойной массив всех 2^n битовых комбинаций:

bitCombs = dec2bin(0:2^n-1) - '0'

0 голосов
/ 19 марта 2012

Так много способов сделать эту перестановку.Если вы хотите реализовать счетчик массива: установите массив счетчиков, идущий от 0 до 1 для каждой из трех позиций (2 ^ 0,2 ^ 1,2 ^ 2).Пусть начальный номер будет 000 (хранится в массиве).Используйте счетчик и увеличьте его 1-е место (2 ^ 0).Число будет 001. Сбросьте счетчик в положение (2 ^ 0), увеличьте счетчик до 2 ^ 1 и продолжайте цикл, пока не завершите все счетчики.

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