Ich versuche, einen Teil meiner Funktion in Matlab in C++ mit Coder zu konvertieren. Coder unterstützt die Funktion perms
nicht. Ich verwende ausgiebig perms
in meinem Code. Nachdem ich online geschaut habe, habe ich einige Vorschläge gefunden, wie man eine Liste aller Permutationen ohne perms
erzeugen kann, aber es wird "von Hand" gemacht, was bedeutet, dass für Permutationen mit 3 Elementen wir drei for Schleifen haben, mit 4 Elementen haben wir 4 Schleifen usw.Nicht-rekursive Implementierung von Dauerwellen in Matlab, kompatibel mit Coder
Beispiel für 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
für 8 Elemente würde ich 8 für Schleifen schreiben hat, irgendwelche Vorschläge, wie ich dies für n Elemente umwandeln kann? So etwas wie
for i=n:-1:1
I=[1:n] ;
for j=1:i
J=I(find(I~=j));
... ?
thank you
[ 'std :: next_permutation'] (http://en.cppreference.com/w/cpp/algorithm/next_permutation) – 101010
@ 101010, das ist nicht hilfreich, da OP nicht um den Code zu C++ übersetzen selbst. Er stützt sich dabei auf Matlab Coder, was bedeutet, dass er nur die Matlab-Funktionen verwenden muss, die übersetzt werden können. –