давайте предположим, я имею следующую логическую матрицу:MATLAB: получить все перестановки для конкретной логической матрицы
log = [1 1 0;
0 1 1;
1 0 1;
0 0 1];
колонн описывает нечто вроде корзины и отдельные строки описывают некоторые объекты, идентифицированных по какому-либо признаку (например, шары разных цветов) вы можете положить в эти корзины. 1
означает, что вы можете положить его (в корзину, описанную в колонке), 0
вы не можете.
Каждая корзина может содержать только один объект. мне интересно, как вычислить перестановки о том, как поместить в объектах для данной конфигурации, это означает, что я говорю: I want to have objects in basket 1 and 3 but none in basket 2, which would be [1 0 1]
:
Поэтому у меня есть следующие возможности:
- корзина 2: 0 штук
- корзина 1: может содержать либо объект 1, либо объект. 3
- корзина 3: может содержать либо объект 2, obj. 3 или obj. 4
так что в целом, у меня есть полные перестановки (одна строка описывает одну перестановку, колонка описания корзины и число описывает объект):
1 0 2
1 0 3
1 0 4
2 0 2
2 0 3
2 0 4
, как сделать это в хороший алгоритм, который адаптируется к произвольному количеству корзин и объектов? я могу только думать о вложенном и уродливой зацикливание :( Большое спасибо!
В первой колонке окончательного ответа, это скорее [1 1 1 3 3 3] ', а не [1 1 1 2 2 2]'? – Oli