Создайте сценарий триномиального дерева ios в строках матрицы - PullRequest
0 голосов
/ 25 апреля 2020

В Matlab я пытаюсь создать матрицу 3 ^ (n-1) n, содержащую в каждой строке сценарий трехчленного дерева. т.е. все строки вместе содержат все возможные пути, по которым можно следовать в дереве. В каждой точке дерева путь идет вверх, остается неизменным или go вниз. Я хочу обозначить это в матрице с 1, 0 или -1 соответственно. Примером для n = 3 будет:

[0,-1,-1; 
0,-1,0; 
0,-1,1; 
0,0,-1; 
0,0,0;
0,0,1;
0,1,-1;
0,1,0;
0,1,1]

Я хочу обобщить это для n шагов.

1 Ответ

0 голосов
/ 25 апреля 2020

На ваш вопрос в основном ответ здесь, написанный Луисом Мендо . Требуются только незначительные корректировки.

Все, что вы хотите - это все комбинации:

vectors = { [0], [-1 0 1], [-1 0 1] }; %matching your example

Или, в более общем случае, для произвольного:

vectors = [0,repmat({[-1 0 1]},1,n-1)]; %start with 0, then repeat [-1,0,1] n times

Затем вы можете продолжить со связанной ответ, цитируя здесь:

n = numel(vectors); %// number of vectors
combs = cell(1,n); %// pre-define to generate comma-separated list
[combs{end:-1:1}] = ndgrid(vectors{end:-1:1}); %// the reverse order in these two
%// comma-separated lists is needed to produce the rows of the result matrix in
%// lexicographical order 
combs = cat(n+1, combs{:}); %// concat the n n-dim arrays along dimension n+1
combs = reshape(combs,[],n); %// reshape to obtain desired matrix
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...