Я пытаюсь преобразовать часть моей функции в matlab в C++ с помощью кодера. Кодер не поддерживает функцию perms
. Я широко использую perms
в своем коде. После поиска в Интернете я нашел несколько предложений о том, как сгенерировать список всех перестановок без perms
, но это делается «вручную», что означает, что для перестановок с 3 элементами у нас есть три для циклов, с 4 элементами у нас есть 4 цикла и т. Д.Нерекурсивная реализация perms в Matlab, совместимая с Coder
Пример 1:4
:
row = 1;
n=a;
Z = zeros(factorial(n),n);
idxarray1=[1:4];
for idx=idxarray1
idxarray2=idxarray1(find(idxarray1~=idx)) ;
for jdx=idxarray2
idxarray3=idxarray2(find(idxarray2~=jdx));
for kdx=idxarray3
idxarray4=idxarray3(find(idxarray3~=kdx)) ;
for mdx=idxarray4
Z(row,:) = [idx,jdx,kdx,mdx];
row = row + 1 ;
end
end
end
end
для 8 элементов я бы писать 8 для петель, любые предложения о том, как я могу преобразовать это для п элементов? Что-то вроде
for i=n:-1:1
I=[1:n] ;
for j=1:i
J=I(find(I~=j));
... ?
thank you
[ 'станд :: next_permutation'] (http://en.cppreference.com/w/cpp/algorithm/next_permutation) – 101010
@ 101010, что не полезно, как OP не переводит код на C++ сам. Он полагается на Matlab Coder, чтобы сделать это, что означает, что он должен использовать только те функции Matlab, которые могут быть переведены. –