Для того, чтобы получить все k
-Письмо комбинации из произвольной alphabet
, использовать
n = length(alphabet);
aux = dec2base(0:n^k-1,n)
aux2 = aux-'A';
ind = aux2<0;
aux2(ind) = aux(ind)-'0'
aux2(~ind) = aux2(~ind)+10;
words = alphabet(aux2+1)
alphabet
может состоять из до 36 элементов (в соответствии с dec2base
). Этими элементами могут быть номера или знаков.
Как это работает:
число 0, 1, ..., п^к-1, когда выражаются в базе п дают все группы к числам, взятым из 0, ..., n- 1. dec2base
делает преобразование в базу n, но дает результат в виде строк, поэтому необходимо преобразовать в соответствующее число (это часть с aux
и aux2
). Затем добавим 1, чтобы сделать числа 1, ..., n. Наконец, мы индексируем alphabet
с тем, чтобы использовать реальные буквы чисел алфавита.
Пример с буквами:
>> alphabet = 'abc';
>> k = 2;
>> words
words =
aa
ab
ac
ba
bb
bc
ca
cb
cc
Пример с номерами:
>> alphabet = [1 3 5 7];
>> k = 2;
>> words
words =
1 1
1 3
1 5
1 7
3 1
3 3
3 5
3 7
5 1
5 3
5 5
5 7
7 1
7 3
7 5
7 7
Вот вопрос, который дал мне ключ к компактному ответ: http://stackoverflow.com/questions/9834254/cartesian-product-in-matlab (Я буду признателен за то, что я знаю, что вы ищете «продукт для работы с матрицей») –
@BenVoigt I [должен был это знать] (http://stackoverflow.com/questions/19991279/permutations-of-parameters-ie-cartesian- продукт в-а-многомерный-обр)! – chappjc
Это было задано _ много раз. Вот возможные дубликаты: [Как сгенерировать все пары из двух векторов в MATLAB с помощью векторизованного кода?] (Http: // stackoverflow.com/questions/7446946/how-to-generate-all-pairs-from-two-vectors-in-matlab-using-vectorized-code) и [Создать все возможные комбинации элементов некоторых векторов] (http: // stackoverflow.com/questions/4165859/matlab-generate-all-possible-combinations-of-the-elements-of-some-vectors) –