次の問題があります。セットの順列を計算する必要があります。ただし、セットには同じ2つの要素が含まれている可能性があるため、順列が繰り返されます。例えば:
セットが与えられると[ 0 0 1 2 ]
、順列には次の可能性が含まれます。
1 2 0 0
1 2 0 0
ただし、このような同じ順列は避けたいと思います。MATLABでは、これを簡単に行うことができます。
unique(perms([ 0 0 1 2 ]), 'rows')
しかし、ここでの問題は効率です-私はこれを巨大なfor
ループで繰り返し行っており、必要な並べ替えunique
が遅すぎます。だから私の質問は:後で結果をループすることなく、この性質のユニークな順列を直接計算できますか?私はMATLABで作業していますが、MATLABでベクトル化できるものがおそらく理想的ですが、一般的な解決策がおそらく役立つでしょう!
私が見る限り、既存の質問はこの問題を正確にカバーしていませんが、これが以前に回答されている場合はお詫びします。